kettle-family 0.1.14 → 0.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3b6e08799214b00e8f52b6860bc7b08d60388cf9d432d25570af4cfc4366b54c
4
- data.tar.gz: 241f806e20a77c405ceb783b9a9e3e957d85d37d7d670e9e9528e91df69f09af
3
+ metadata.gz: f34f86e4bbc4ff6d79503e62d90a5f5942f2cf5ca71889d28e9580467e1cbf62
4
+ data.tar.gz: 5b930341c10d8dbd8f254cfdd1cd38ffd553ce42801e43bc7d53be1feb794127
5
5
  SHA512:
6
- metadata.gz: a6a8c0facd2448af40324cdf3f4ffe7c17dffb57187b8919dffdb3c078a1424d0d5cf36b3c34b2227af9ff24ca79a0941661ced826190fd6f1ba5340d9746973
7
- data.tar.gz: 7b40ab91662c6f755e055ec54edc435a9617ed9569cb5de755300e77834e76c03e620aadf0dcfc7a4f6d59e83173e25847daaab650cc343082fdac2e4f826fcb
6
+ metadata.gz: 4728fe4ae1ee4c04ab01034ccc2443b7d77379912ec38aa0838c63f1ee08c902ce0db06c4d4753521a5461a34bd62a97715b4f3594eac960f4b4e0d3c0ea32b8
7
+ data.tar.gz: e51a4793bb4b96ac610165217d143cba66976ef4e0ac2c106e87c9c7197ba5a238af032b3e9b5f360e67134668a11f9fce70e70ac9d6fa4cc545e2fd7b2689ac
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -20,6 +20,8 @@ Please file a bug if you notice a violation of semantic versioning.
20
20
 
21
21
  ### Added
22
22
 
23
+ - `kettle-family push`, `kettle-family pull`, and `kettle-family up` now plan
24
+ or execute family-wide git synchronization commands.
23
25
  - `kettle-family bump-version` now accepts the same relative bump targets as
24
26
  `kettle-bump` (`major`, `minor`, `patch`, and `pre`) and applies them per
25
27
  member from each member's current version.
@@ -32,6 +34,9 @@ Please file a bug if you notice a violation of semantic versioning.
32
34
 
33
35
  ### Fixed
34
36
 
37
+ - Branch-stack commands now allow `main` as a configured branch target for
38
+ workflows like templating while excluding it from install and release
39
+ traversals.
35
40
  - `kettle-family bump-version` now leaves non-exact family dependency
36
41
  requirements unchanged instead of rejecting them as ambiguous, allowing
37
42
  families with loose inter-gem constraints to use relative version bumps.
@@ -6,8 +6,9 @@ require "optparse"
6
6
  module Kettle
7
7
  module Family
8
8
  class CLI
9
- COMMANDS = %w[discover plan report metadata check test lint docs template install bump-version add-changelog release branch-lanes release-state].freeze
10
- WORKFLOW_COMMANDS = %w[check test lint docs template release].freeze
9
+ COMMANDS = %w[discover plan report metadata check test lint docs template install bump-version add-changelog release push pull up branch-lanes release-state].freeze
10
+ WORKFLOW_COMMANDS = %w[check test lint docs template release push pull up].freeze
11
+ MAIN_BRANCH_SKIPPING_COMMANDS = %w[install release].freeze
11
12
 
12
13
  def self.call(argv, out: $stdout, err: $stderr)
13
14
  new(argv, out: out, err: err).call
@@ -64,6 +65,9 @@ module Kettle
64
65
  bump-version Check, plan, or execute family version alignment
65
66
  add-changelog Add an entry to an existing Unreleased changelog section
66
67
  release Plan or execute release build/publish phases
68
+ push Plan or execute git push per member
69
+ pull Plan or execute git pull --rebase per member
70
+ up Plan or execute git pull --rebase then git push per member
67
71
  branch-lanes Audit configured branch lane release mappings
68
72
  release-state Report changelog release state for family members
69
73
 
@@ -176,8 +180,8 @@ module Kettle
176
180
  selected_members: selected,
177
181
  config_path: config.path,
178
182
  branch_lanes: config.branch_lanes,
179
- release_target_branches: config.release_target_branches,
180
- member_release_target_branches: member_release_target_branches(members: selected, config: config),
183
+ release_target_branches: branch_targets_for(command, config.release_target_branches),
184
+ member_release_target_branches: member_release_target_branches(command: command, members: selected, config: config),
181
185
  release_mode: release_mode(command: command, options: options),
182
186
  command: command,
183
187
  results: results
@@ -235,7 +239,7 @@ module Kettle
235
239
  def branch_target_command_results(command:, config:, members:, options:)
236
240
  runner = CommandRunner.new(execute: options[:execute])
237
241
  selected_names = members.map(&:name)
238
- config.release_target_branches.each_with_object([]) do |branch, memo|
242
+ branch_targets_for(command, config.release_target_branches).each_with_object([]) do |branch, memo|
239
243
  memo << runner.call(
240
244
  member: family_member(config),
241
245
  phase: "release_checkout",
@@ -263,7 +267,7 @@ module Kettle
263
267
  next
264
268
  end
265
269
 
266
- member_config.release_target_branches.each do |branch|
270
+ branch_targets_for(command, member_config.release_target_branches).each do |branch|
267
271
  memo << runner.call(
268
272
  member: member,
269
273
  phase: "release_checkout",
@@ -391,13 +395,19 @@ module Kettle
391
395
  options[:publish] ? "publish" : "build-only"
392
396
  end
393
397
 
394
- def member_release_target_branches(members:, config:)
398
+ def member_release_target_branches(command:, members:, config:)
395
399
  members.each_with_object({}) do |member, memo|
396
400
  member_config = member_local_release_config(member: member, config: config)
397
- memo[member.name] = member_config.release_target_branches if member_config
401
+ memo[member.name] = branch_targets_for(command, member_config.release_target_branches) if member_config
398
402
  end
399
403
  end
400
404
 
405
+ def branch_targets_for(command, branches)
406
+ return branches unless MAIN_BRANCH_SKIPPING_COMMANDS.include?(command)
407
+
408
+ branches.reject { |branch| branch == "main" }
409
+ end
410
+
401
411
  def member_local_release_config(member:, config:)
402
412
  member_config = Config.load(root: member.root)
403
413
  return unless member_config.path
@@ -3,7 +3,7 @@
3
3
  module Kettle
4
4
  module Family
5
5
  module Version
6
- VERSION = "0.1.14"
6
+ VERSION = "0.1.15"
7
7
  end
8
8
  VERSION = Version::VERSION # Traditional Constant Location
9
9
  end
@@ -14,6 +14,12 @@ module Kettle
14
14
  "lint" => "bundle exec rake rubocop_gradual",
15
15
  "docs" => "bundle exec rake yard"
16
16
  }.freeze
17
+ GIT_SYNC_COMMANDS = {
18
+ "push" => [["push", %w[git push]]],
19
+ "pull" => [["pull", %w[git pull --rebase]]],
20
+ "up" => [["pull", %w[git pull --rebase]], ["push", %w[git push]]]
21
+ }.freeze
22
+ MAIN_BRANCH_SKIPPING_COMMANDS = %w[release].freeze
17
23
 
18
24
  def initialize(command:, config:, members:, execute: false, commit: true, allow_dirty: false, publish: false, push: false, tag: false, start_step: nil, local_ci: false, continue_ci_failures: false, env_overrides: {}, gem_signing_password: nil)
19
25
  @command = command
@@ -47,6 +53,7 @@ module Kettle
47
53
  def current_branch_results(workflow_members)
48
54
  return check_results(workflow_members) if command == "check"
49
55
  return release_member_results(workflow_members, include_family_changelog: true) if command == "release"
56
+ return git_sync_results(workflow_members) if GIT_SYNC_COMMANDS.key?(command)
50
57
 
51
58
  member_workflow_results(workflow_members)
52
59
  end
@@ -75,7 +82,7 @@ module Kettle
75
82
  def branch_target_results
76
83
  runner = command_runner
77
84
  selected_names = members.map(&:name)
78
- config.release_target_branches.each_with_object([]) do |branch, memo|
85
+ branch_targets.each_with_object([]) do |branch, memo|
79
86
  memo << checkout_branch_result(branch: branch, runner: runner)
80
87
  break memo unless memo.last.ok?
81
88
 
@@ -176,6 +183,17 @@ module Kettle
176
183
  end
177
184
  end
178
185
 
186
+ def git_sync_results(sync_members)
187
+ runner = command_runner
188
+ sync_members.each_with_object([]) do |member, memo|
189
+ GIT_SYNC_COMMANDS.fetch(command).each do |phase, git_command|
190
+ memo << runner.call(member: member, phase: phase, command: git_command)
191
+ break unless memo.last.ok?
192
+ end
193
+ break memo unless memo.last.ok?
194
+ end
195
+ end
196
+
179
197
  def command_runner
180
198
  CommandRunner.new(execute: execute, gem_signing_password: @gem_signing_password)
181
199
  end
@@ -190,6 +208,12 @@ module Kettle
190
208
  members.any? { |member| member_local_release_config(member) }
191
209
  end
192
210
 
211
+ def branch_targets
212
+ return config.release_target_branches unless MAIN_BRANCH_SKIPPING_COMMANDS.include?(command)
213
+
214
+ config.release_target_branches.reject { |branch| branch == "main" }
215
+ end
216
+
193
217
  def member_local_release_config(member)
194
218
  member_config = Config.load(root: member.root)
195
219
  return unless member_config.path
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kettle-family
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.14
4
+ version: 0.1.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -309,10 +309,10 @@ licenses:
309
309
  - AGPL-3.0-only
310
310
  metadata:
311
311
  homepage_uri: https://kettle-family.galtzo.com
312
- source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v0.1.14
313
- changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v0.1.14/CHANGELOG.md
312
+ source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v0.1.15
313
+ changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v0.1.15/CHANGELOG.md
314
314
  bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
315
- documentation_uri: https://www.rubydoc.info/gems/kettle-family/0.1.14
315
+ documentation_uri: https://www.rubydoc.info/gems/kettle-family/0.1.15
316
316
  funding_uri: https://github.com/sponsors/pboling
317
317
  wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
318
318
  news_uri: https://www.railsbling.com/tags/kettle-family
metadata.gz.sig CHANGED
Binary file