kettle-family 1.2.53 → 1.2.54
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +14 -1
- data/README.md +1 -1
- data/lib/kettle/family/cli.rb +16 -11
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/workflow.rb +40 -3
- data.tar.gz.sig +0 -0
- metadata +4 -4
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c0f5a2c157047beb738100cc8d76c0df51c1664ebd6156fe4b8df9d6a2f80c1a
|
|
4
|
+
data.tar.gz: 930877d4514aa57efadabc0a22a39cbae5fcb3610ef07019c5fce3b050b4bcb2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5c4811b61a654bb5e496c3f0069f56b788d0262b3b6276a02e926b68dfb8a7c985a251af93b45fe3d6824586ee49b2c7e331124b911f88a4b63853e504f55aa5
|
|
7
|
+
data.tar.gz: 42b4aef5d2795e99cb011ef56f8607fb5a24ff9a338230959cf72f2e9ef6474ca2c2b75fa8adb12daed8fce22b654094eaaf35183150d367c0d7154c10c4dd95
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,17 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [1.2.54] - 2026-08-12
|
|
34
|
+
|
|
35
|
+
- TAG: [v1.2.54][1.2.54t]
|
|
36
|
+
- COVERAGE: 93.57% -- 5270/5632 lines in 33 files
|
|
37
|
+
- BRANCH COVERAGE: 76.23% -- 2120/2781 branches in 33 files
|
|
38
|
+
- 29.86% documented
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Family releases now reconcile already-published sibling dependency floors and remote lockfiles before resuming a selected release set.
|
|
43
|
+
|
|
33
44
|
## [1.2.53] - 2026-08-12
|
|
34
45
|
|
|
35
46
|
- TAG: [v1.2.53][1.2.53t]
|
|
@@ -2098,7 +2109,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
2098
2109
|
- Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
|
|
2099
2110
|
- Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
|
|
2100
2111
|
|
|
2101
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.
|
|
2112
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.54...HEAD
|
|
2113
|
+
[1.2.54]: https://github.com/kettle-dev/kettle-family/compare/v1.2.53...v1.2.54
|
|
2114
|
+
[1.2.54t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.54
|
|
2102
2115
|
[1.2.53]: https://github.com/kettle-dev/kettle-family/compare/v1.2.52...v1.2.53
|
|
2103
2116
|
[1.2.53t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.53
|
|
2104
2117
|
[1.2.52]: https://github.com/kettle-dev/kettle-family/compare/v1.2.51...v1.2.52
|
data/README.md
CHANGED
|
@@ -836,7 +836,7 @@ Thanks for RTFM. ☺️
|
|
|
836
836
|
[📌gitmoji]: https://gitmoji.dev
|
|
837
837
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
838
838
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
839
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-5.
|
|
839
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-5.632-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
840
840
|
[🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
|
|
841
841
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
842
842
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
data/lib/kettle/family/cli.rb
CHANGED
|
@@ -652,7 +652,10 @@ module Kettle
|
|
|
652
652
|
effective_only = default_only_filter(command: command, only: options[:only])
|
|
653
653
|
discovery = Discovery.new(
|
|
654
654
|
config: config,
|
|
655
|
-
|
|
655
|
+
# Release reconciliation needs the complete family graph: a
|
|
656
|
+
# dependency that published in an earlier invocation is not part of
|
|
657
|
+
# a subsequent --only pend selection.
|
|
658
|
+
release_dependency_member_names: (command == "release") ? nil : direct_member_only_names(effective_only)
|
|
656
659
|
)
|
|
657
660
|
members = discovery.members
|
|
658
661
|
ordered = if command == "install"
|
|
@@ -685,6 +688,7 @@ module Kettle
|
|
|
685
688
|
command: command,
|
|
686
689
|
config: config,
|
|
687
690
|
members: result_members,
|
|
691
|
+
family_members: ordered,
|
|
688
692
|
options: options,
|
|
689
693
|
start_at: start_at,
|
|
690
694
|
state_event_handler: state_event_handler
|
|
@@ -712,11 +716,11 @@ module Kettle
|
|
|
712
716
|
|
|
713
717
|
StartAt = Struct.new(:member, :branch)
|
|
714
718
|
|
|
715
|
-
def command_results(command:, config:, members:, options:, start_at:, state_event_handler: nil)
|
|
716
|
-
return branch_target_command_results(command: command, config: config, members: members, options: options, start_at: start_at) if branch_target_command?(command, config)
|
|
717
|
-
return member_local_branch_target_command_results(command: command, config: config, members: members, options: options, start_at: start_at) if member_local_branch_target_command?(command, config, members)
|
|
719
|
+
def command_results(command:, config:, members:, family_members:, options:, start_at:, state_event_handler: nil)
|
|
720
|
+
return branch_target_command_results(command: command, config: config, members: members, family_members: family_members, options: options, start_at: start_at) if branch_target_command?(command, config)
|
|
721
|
+
return member_local_branch_target_command_results(command: command, config: config, members: members, family_members: family_members, options: options, start_at: start_at) if member_local_branch_target_command?(command, config, members)
|
|
718
722
|
|
|
719
|
-
command_results_for_current_branch(command: command, config: config, members: members, options: options, start_at: start_at, state_event_handler: state_event_handler)
|
|
723
|
+
command_results_for_current_branch(command: command, config: config, members: members, family_members: family_members, options: options, start_at: start_at, state_event_handler: state_event_handler)
|
|
720
724
|
end
|
|
721
725
|
|
|
722
726
|
def release_state_results_for_selection(config:, members:, only:, jobs: nil)
|
|
@@ -757,7 +761,7 @@ module Kettle
|
|
|
757
761
|
members
|
|
758
762
|
end
|
|
759
763
|
|
|
760
|
-
def command_results_for_current_branch(command:, config:, members:, options:, start_at: StartAt.new(nil, nil), state_event_handler: nil)
|
|
764
|
+
def command_results_for_current_branch(command:, config:, members:, options:, family_members: members, start_at: StartAt.new(nil, nil), state_event_handler: nil)
|
|
761
765
|
return mise_trust_results(config: config, members: members) if command == "mise-trust"
|
|
762
766
|
return bump_version_results(config: config, members: members, options: options, phase: command) if %w[bump bump-version].include?(command)
|
|
763
767
|
return add_changelog_results(members: members, options: options) if command == "add-changelog"
|
|
@@ -772,6 +776,7 @@ module Kettle
|
|
|
772
776
|
command: command,
|
|
773
777
|
config: config,
|
|
774
778
|
members: members,
|
|
779
|
+
family_members: family_members,
|
|
775
780
|
execute: options[:execute],
|
|
776
781
|
accept: options[:accept],
|
|
777
782
|
commit: options[:commit],
|
|
@@ -931,7 +936,7 @@ module Kettle
|
|
|
931
936
|
members.any? { |member| member_release_config(member: member, config: config) }
|
|
932
937
|
end
|
|
933
938
|
|
|
934
|
-
def branch_target_command_results(command:, config:, members:, options:, start_at:)
|
|
939
|
+
def branch_target_command_results(command:, config:, members:, family_members:, options:, start_at:)
|
|
935
940
|
runner = CommandRunner.new(execute: options[:execute])
|
|
936
941
|
selected_names = members.map(&:name)
|
|
937
942
|
release_target_branches(command: command, config: config, start_at: start_at).each_with_object([]) do |branch, memo|
|
|
@@ -945,7 +950,7 @@ module Kettle
|
|
|
945
950
|
|
|
946
951
|
branch_members = rediscovered_selected_members(config: config, selected_names: selected_names, command: command)
|
|
947
952
|
branch_members = members if branch_members.empty?
|
|
948
|
-
branch_results = command_results_for_current_branch(command: command, config: config, members: branch_members, options: options)
|
|
953
|
+
branch_results = command_results_for_current_branch(command: command, config: config, members: branch_members, family_members: family_members, options: options)
|
|
949
954
|
branch_results.each { |result| result.branch = branch if result.respond_to?(:branch=) }
|
|
950
955
|
memo.concat(branch_results)
|
|
951
956
|
break memo unless memo.last&.ok?
|
|
@@ -955,12 +960,12 @@ module Kettle
|
|
|
955
960
|
end
|
|
956
961
|
end
|
|
957
962
|
|
|
958
|
-
def member_local_branch_target_command_results(command:, config:, members:, options:, start_at:)
|
|
963
|
+
def member_local_branch_target_command_results(command:, config:, members:, family_members:, options:, start_at:)
|
|
959
964
|
runner = CommandRunner.new(execute: options[:execute])
|
|
960
965
|
members.each_with_object([]) do |member, memo|
|
|
961
966
|
member_config = member_release_config(member: member, config: config)
|
|
962
967
|
unless member_config
|
|
963
|
-
memo.concat(command_results_for_current_branch(command: command, config: config, members: [member], options: options))
|
|
968
|
+
memo.concat(command_results_for_current_branch(command: command, config: config, members: [member], family_members: family_members, options: options))
|
|
964
969
|
break memo unless memo.last&.ok?
|
|
965
970
|
next
|
|
966
971
|
end
|
|
@@ -976,7 +981,7 @@ module Kettle
|
|
|
976
981
|
|
|
977
982
|
branch_members = rediscovered_selected_members(config: member_config, selected_names: [member.name], command: command)
|
|
978
983
|
branch_members = [member] if branch_members.empty?
|
|
979
|
-
branch_results = command_results_for_current_branch(command: command, config: member_config, members: branch_members, options: options)
|
|
984
|
+
branch_results = command_results_for_current_branch(command: command, config: member_config, members: branch_members, family_members: family_members, options: options)
|
|
980
985
|
branch_results.each { |result| result.branch = branch if result.respond_to?(:branch=) }
|
|
981
986
|
memo.concat(branch_results)
|
|
982
987
|
break unless memo.last&.ok?
|
|
@@ -5,7 +5,7 @@ module Kettle
|
|
|
5
5
|
# Version namespace for this gem.
|
|
6
6
|
module Version
|
|
7
7
|
# Current gem version.
|
|
8
|
-
VERSION = "1.2.
|
|
8
|
+
VERSION = "1.2.54"
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
|
@@ -102,10 +102,11 @@ module Kettle
|
|
|
102
102
|
REGISTRY_WAIT_ATTEMPTS = 15
|
|
103
103
|
REGISTRY_WAIT_INTERVAL_SECONDS = 15
|
|
104
104
|
|
|
105
|
-
def initialize(command:, config:, members:, execute: false, accept: true, commit: true, allow_dirty: false, autostash: true, publish: false, push: false, tag: false, start_step: nil, skip_steps: nil, skip_changelog: false, local_ci: false, continue_ci_failures: false, ci_workflows: nil, skip_bundle_audit: false, skip_remotes: nil, required_remotes: nil, auto_dependency_floors: nil, gha_sha_pins_upgrade: "patch", gha_sha_pins_check: false, gha_sha_pins_ttl_days: nil, env_overrides: {}, debug: false, verbose: false, gem_signing_password: nil, secrets_provider: nil, jobs: nil, progress_io: nil, reset_target: nil, bup_args: [], bex_args: [], start_member: nil, start_branch: nil, **options)
|
|
105
|
+
def initialize(command:, config:, members:, family_members: nil, execute: false, accept: true, commit: true, allow_dirty: false, autostash: true, publish: false, push: false, tag: false, start_step: nil, skip_steps: nil, skip_changelog: false, local_ci: false, continue_ci_failures: false, ci_workflows: nil, skip_bundle_audit: false, skip_remotes: nil, required_remotes: nil, auto_dependency_floors: nil, gha_sha_pins_upgrade: "patch", gha_sha_pins_check: false, gha_sha_pins_ttl_days: nil, env_overrides: {}, debug: false, verbose: false, gem_signing_password: nil, secrets_provider: nil, jobs: nil, progress_io: nil, reset_target: nil, bup_args: [], bex_args: [], start_member: nil, start_branch: nil, **options)
|
|
106
106
|
@command = command
|
|
107
107
|
@config = config
|
|
108
108
|
@members = members
|
|
109
|
+
@family_members = family_members || members
|
|
109
110
|
@execute = execute
|
|
110
111
|
@accept = accept
|
|
111
112
|
@commit = commit
|
|
@@ -185,7 +186,7 @@ module Kettle
|
|
|
185
186
|
execute && release_command_delegates_secrets_to_kettle_release?
|
|
186
187
|
end
|
|
187
188
|
|
|
188
|
-
attr_reader :command, :config, :members, :execute, :accept, :commit, :allow_dirty, :autostash, :publish, :push, :tag, :start_step, :skip_steps, :skip_changelog, :local_ci, :continue_ci_failures, :ci_workflows, :skip_bundle_audit, :skip_remotes, :required_remotes, :auto_dependency_floors, :gha_sha_pins_upgrade, :gha_sha_pins_check, :gha_sha_pins_ttl_days, :env_overrides, :debug, :verbose, :jobs, :progress_io, :reset_target, :bup_args, :bex_args, :start_member, :start_branch
|
|
189
|
+
attr_reader :command, :config, :members, :family_members, :execute, :accept, :commit, :allow_dirty, :autostash, :publish, :push, :tag, :start_step, :skip_steps, :skip_changelog, :local_ci, :continue_ci_failures, :ci_workflows, :skip_bundle_audit, :skip_remotes, :required_remotes, :auto_dependency_floors, :gha_sha_pins_upgrade, :gha_sha_pins_check, :gha_sha_pins_ttl_days, :env_overrides, :debug, :verbose, :jobs, :progress_io, :reset_target, :bup_args, :bex_args, :start_member, :start_branch
|
|
189
190
|
|
|
190
191
|
def template_with_worktree_sync_results
|
|
191
192
|
runner = command_runner
|
|
@@ -421,7 +422,10 @@ module Kettle
|
|
|
421
422
|
return check_results(workflow_members) if command == "check"
|
|
422
423
|
return reset_member_results(workflow_members) if command == "reset"
|
|
423
424
|
if command == "release"
|
|
424
|
-
results =
|
|
425
|
+
results = release_dependency_floor_reconciliation_results(workflow_members)
|
|
426
|
+
return results unless results.all?(&:ok?)
|
|
427
|
+
|
|
428
|
+
results.concat(release_member_results(workflow_members, include_family_changelog: !skip_changelog))
|
|
425
429
|
return results unless explicit_monorepo_mode? && results.all?(&:ok?)
|
|
426
430
|
|
|
427
431
|
results << aggregate_monorepo_github_release(workflow_members)
|
|
@@ -1082,6 +1086,7 @@ module Kettle
|
|
|
1082
1086
|
command: command,
|
|
1083
1087
|
config: member_config,
|
|
1084
1088
|
members: [member],
|
|
1089
|
+
family_members: family_members,
|
|
1085
1090
|
execute: execute,
|
|
1086
1091
|
accept: accept,
|
|
1087
1092
|
commit: commit,
|
|
@@ -1358,6 +1363,38 @@ module Kettle
|
|
|
1358
1363
|
ReleaseWaves.new(members: release_members, configured_waves: config.release_waves, strict_cycles: true).waves
|
|
1359
1364
|
end
|
|
1360
1365
|
|
|
1366
|
+
def release_dependency_floor_reconciliation_results(release_members)
|
|
1367
|
+
return [] unless execute && auto_dependency_floors
|
|
1368
|
+
|
|
1369
|
+
published_members = published_family_dependencies_for(release_members)
|
|
1370
|
+
return [] if published_members.empty?
|
|
1371
|
+
|
|
1372
|
+
results = []
|
|
1373
|
+
append_dependency_floor_results(
|
|
1374
|
+
released_members: published_members,
|
|
1375
|
+
dependent_members: release_members,
|
|
1376
|
+
runner: release_command_runner,
|
|
1377
|
+
memo: results
|
|
1378
|
+
)
|
|
1379
|
+
results
|
|
1380
|
+
end
|
|
1381
|
+
|
|
1382
|
+
# A resumed --only pend release no longer includes members that finished
|
|
1383
|
+
# in an earlier invocation. Reconcile against the registry before the
|
|
1384
|
+
# next release wave so those already-published versions still update
|
|
1385
|
+
# sibling floors and lockfiles.
|
|
1386
|
+
def published_family_dependencies_for(release_members)
|
|
1387
|
+
dependency_names = release_members.flat_map { |member| release_dependency_names(member) }.uniq
|
|
1388
|
+
family_members_by_name = family_members.to_h { |member| [member.name, member] }
|
|
1389
|
+
dependency_names.filter_map do |dependency_name|
|
|
1390
|
+
member = family_members_by_name[dependency_name]
|
|
1391
|
+
next unless member
|
|
1392
|
+
next unless released_version?(member.name, member.version)
|
|
1393
|
+
|
|
1394
|
+
member
|
|
1395
|
+
end
|
|
1396
|
+
end
|
|
1397
|
+
|
|
1361
1398
|
def append_dependency_floor_results(released_members:, dependent_members:, runner:, memo:)
|
|
1362
1399
|
return unless auto_dependency_floors
|
|
1363
1400
|
return if dependent_members.empty?
|
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: 1.2.
|
|
4
|
+
version: 1.2.54
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -361,10 +361,10 @@ licenses:
|
|
|
361
361
|
- AGPL-3.0-only
|
|
362
362
|
metadata:
|
|
363
363
|
homepage_uri: https://kettle-family.galtzo.com
|
|
364
|
-
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.
|
|
365
|
-
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.
|
|
364
|
+
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.54
|
|
365
|
+
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.54/CHANGELOG.md
|
|
366
366
|
bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
|
|
367
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.
|
|
367
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.54
|
|
368
368
|
funding_uri: https://github.com/sponsors/pboling
|
|
369
369
|
wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
|
|
370
370
|
news_uri: https://www.railsbling.com/tags/kettle-family
|
metadata.gz.sig
CHANGED
|
Binary file
|