kettle-family 1.2.39 → 1.2.41
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 +33 -1
- data/README.md +1 -1
- data/lib/kettle/family/cli.rb +20 -3
- data/lib/kettle/family/release_state_check.rb +29 -2
- data/lib/kettle/family/selection.rb +7 -2
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/version_bump.rb +4 -2
- 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: 06e650b41451e42fa21f02b33415452f6150a28f23a7201476d7b53898985836
|
|
4
|
+
data.tar.gz: 78d0efc3990b00ae0f89e9fb0e4ea1f187248cdfb23280492495cd119e4b5e42
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 73a92a80cfa7c1774bdf4af3cdd36f5e9d56eaab91a350b3ef9ac2478d3c142f8843c732b2d7a5c5690dfb317a0fad2d855bead22054e5044cd08504d978e87d
|
|
7
|
+
data.tar.gz: 3266c134547b5a0001c1979d706b2d68bee48deea4b4f4fa787a833e8a47379c5d94e4b121885f5f99a9f81c0b1fedcd1099babbce9807c91ee269a9c5c403d9
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,34 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [1.2.41] - 2026-08-07
|
|
34
|
+
|
|
35
|
+
- TAG: [v1.2.41][1.2.41t]
|
|
36
|
+
- COVERAGE: 93.55% -- 5020/5366 lines in 32 files
|
|
37
|
+
- BRANCH COVERAGE: 76.05% -- 2010/2643 branches in 32 files
|
|
38
|
+
- 29.81% documented
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Propagate shared-version bump state across all family members.
|
|
43
|
+
|
|
44
|
+
- Align incomplete shared-version bumps to one family target version.
|
|
45
|
+
|
|
46
|
+
- Distinguish partial shared-version bumps from aligned family bumps.
|
|
47
|
+
|
|
48
|
+
## [1.2.40] - 2026-08-07
|
|
49
|
+
|
|
50
|
+
- TAG: [v1.2.40][1.2.40t]
|
|
51
|
+
- COVERAGE: 93.62% -- 5007/5348 lines in 32 files
|
|
52
|
+
- BRANCH COVERAGE: 76.09% -- 2002/2631 branches in 32 files
|
|
53
|
+
- 29.81% documented
|
|
54
|
+
|
|
55
|
+
### Fixed
|
|
56
|
+
|
|
57
|
+
- Compute bump release state for shared-changelog members.
|
|
58
|
+
|
|
59
|
+
- Select the complete shared-version family when any member requires a version bump.
|
|
60
|
+
|
|
33
61
|
## [1.2.39] - 2026-08-07
|
|
34
62
|
|
|
35
63
|
- TAG: [v1.2.39][1.2.39t]
|
|
@@ -1896,7 +1924,11 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
1896
1924
|
- Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
|
|
1897
1925
|
- Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
|
|
1898
1926
|
|
|
1899
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.
|
|
1927
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.41...HEAD
|
|
1928
|
+
[1.2.41]: https://github.com/kettle-dev/kettle-family/compare/v1.2.40...v1.2.41
|
|
1929
|
+
[1.2.41t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.41
|
|
1930
|
+
[1.2.40]: https://github.com/kettle-dev/kettle-family/compare/v1.2.39...v1.2.40
|
|
1931
|
+
[1.2.40t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.40
|
|
1900
1932
|
[1.2.39]: https://github.com/kettle-dev/kettle-family/compare/v1.2.38...v1.2.39
|
|
1901
1933
|
[1.2.39t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.39
|
|
1902
1934
|
[1.2.38]: https://github.com/kettle-dev/kettle-family/compare/v1.2.37...v1.2.38
|
data/README.md
CHANGED
|
@@ -837,7 +837,7 @@ Thanks for RTFM. ☺️
|
|
|
837
837
|
[📌gitmoji]: https://gitmoji.dev
|
|
838
838
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
839
839
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
840
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-5.
|
|
840
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-5.366-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
841
841
|
[🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
|
|
842
842
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
843
843
|
[📄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
|
@@ -655,7 +655,11 @@ module Kettle
|
|
|
655
655
|
end
|
|
656
656
|
state_event_tape = release_state_event_tape(command: command, config: config, options: options)
|
|
657
657
|
release_state_results = release_state_results_for_selection(config: config, members: ordered, only: effective_only, jobs: options[:jobs])
|
|
658
|
-
selected = Selection.new(
|
|
658
|
+
selected = Selection.new(
|
|
659
|
+
members: ordered,
|
|
660
|
+
release_state_results: release_state_results,
|
|
661
|
+
shared_version: config.shared_changelog?
|
|
662
|
+
).apply(only: effective_only, exclude: options[:exclude], start_at: start_at.member)
|
|
659
663
|
result_members = selected
|
|
660
664
|
display_members = display_members_for(command: command, config: config, members: ordered, selected_members: selected)
|
|
661
665
|
display_selected_members = display_members_for(command: command, config: config, members: selected, selected_members: selected)
|
|
@@ -746,7 +750,7 @@ module Kettle
|
|
|
746
750
|
|
|
747
751
|
def command_results_for_current_branch(command:, config:, members:, options:, start_at: StartAt.new(nil, nil), state_event_handler: nil)
|
|
748
752
|
return mise_trust_results(config: config, members: members) if command == "mise-trust"
|
|
749
|
-
return bump_version_results(members: members, options: options, phase: command) if %w[bump bump-version].include?(command)
|
|
753
|
+
return bump_version_results(config: config, members: members, options: options, phase: command) if %w[bump bump-version].include?(command)
|
|
750
754
|
return add_changelog_results(members: members, options: options) if command == "add-changelog"
|
|
751
755
|
return clean_unreleased_results(config: config, members: members, options: options) if command == "clean-unreleased"
|
|
752
756
|
return reconcile_release_results(config: config, members: members, options: options) if command == "reconcile-releases"
|
|
@@ -999,12 +1003,13 @@ module Kettle
|
|
|
999
1003
|
StartAt.new(member, branch)
|
|
1000
1004
|
end
|
|
1001
1005
|
|
|
1002
|
-
def bump_version_results(members:, options:, phase:)
|
|
1006
|
+
def bump_version_results(config:, members:, options:, phase:)
|
|
1003
1007
|
require_relative "version_bump"
|
|
1004
1008
|
require_relative "release_waves"
|
|
1005
1009
|
|
|
1006
1010
|
results = []
|
|
1007
1011
|
completed_target_versions = {}
|
|
1012
|
+
shared_target_version = shared_bump_target_version(config: config, members: members, options: options)
|
|
1008
1013
|
ReleaseWaves.new(members: members).waves.each do |wave|
|
|
1009
1014
|
bump = VersionBump.new(
|
|
1010
1015
|
members: wave,
|
|
@@ -1012,6 +1017,7 @@ module Kettle
|
|
|
1012
1017
|
from_version: options[:from_version],
|
|
1013
1018
|
mode: bump_version_mode(options),
|
|
1014
1019
|
phase: phase,
|
|
1020
|
+
shared_target_version: shared_target_version,
|
|
1015
1021
|
dependency_target_versions: completed_target_versions
|
|
1016
1022
|
)
|
|
1017
1023
|
wave_results = bump.results
|
|
@@ -1038,6 +1044,17 @@ module Kettle
|
|
|
1038
1044
|
end
|
|
1039
1045
|
end
|
|
1040
1046
|
|
|
1047
|
+
def shared_bump_target_version(config:, members:, options:)
|
|
1048
|
+
return unless config.shared_changelog?
|
|
1049
|
+
return unless Kettle::Dev::VersionBump::BUMP_TYPES.include?(options[:target_version].to_s)
|
|
1050
|
+
|
|
1051
|
+
versions = members.map { |member| Gem::Version.new(member.version.to_s) }.uniq
|
|
1052
|
+
current = versions.max
|
|
1053
|
+
return current.to_s if versions.length > 1
|
|
1054
|
+
|
|
1055
|
+
Kettle::Dev::VersionBump.resolve_target_version(options[:target_version].to_s, current.to_s)
|
|
1056
|
+
end
|
|
1057
|
+
|
|
1041
1058
|
def add_changelog_results(members:, options:)
|
|
1042
1059
|
section = options[:changelog_section].to_s
|
|
1043
1060
|
entry = options[:changelog_entry].to_s
|
|
@@ -35,7 +35,10 @@ module Kettle
|
|
|
35
35
|
|
|
36
36
|
def results(event_handler: nil)
|
|
37
37
|
return branch_results(event_handler: event_handler) unless release_target_branches.empty?
|
|
38
|
-
|
|
38
|
+
if shared_changelog?
|
|
39
|
+
results = parallel_map(members) { |member| check_shared_changelog_member_or_local(member, event_handler: event_handler) }
|
|
40
|
+
return normalize_shared_version_bump(results)
|
|
41
|
+
end
|
|
39
42
|
|
|
40
43
|
member_results = parallel_map(members) do |member|
|
|
41
44
|
member_branch_results = member_local_branch_results(member, event_handler: event_handler)
|
|
@@ -55,7 +58,8 @@ module Kettle
|
|
|
55
58
|
with_branch_worktree(root: root, branch: branch) do |worktree_root|
|
|
56
59
|
branch_members = discover_branch_members(worktree_root: worktree_root, selected_names: selected_names)
|
|
57
60
|
if shared_changelog?
|
|
58
|
-
|
|
61
|
+
results = parallel_map(branch_members) { |member| check_shared_changelog_member_or_local(member, branch: branch, event_handler: event_handler) }
|
|
62
|
+
memo.concat(normalize_shared_version_bump(results))
|
|
59
63
|
next
|
|
60
64
|
end
|
|
61
65
|
|
|
@@ -118,6 +122,7 @@ module Kettle
|
|
|
118
122
|
success = status.success?
|
|
119
123
|
emit_event(event_handler, member: member, branch: branch, action: "changelog_command", status: success ? "ok" : "failed", elapsed_seconds: elapsed, status_code: status.exitstatus)
|
|
120
124
|
state = success ? JSON.parse(stdout) : {}
|
|
125
|
+
state = state_with_computed_booleans(state) if success
|
|
121
126
|
state = branch_filtered_state(member, state, branch) if success && branch
|
|
122
127
|
emit_event(event_handler, member: member, branch: branch, action: "git_state", status: "running") if success
|
|
123
128
|
state = enrich_git_state(member.root, state, branch: branch) if success
|
|
@@ -735,6 +740,28 @@ module Kettle
|
|
|
735
740
|
config&.shared_changelog?
|
|
736
741
|
end
|
|
737
742
|
|
|
743
|
+
def normalize_shared_version_bump(results)
|
|
744
|
+
return results unless results.any? { |result| result.ok? && result.state["bump_release_pending"] == true }
|
|
745
|
+
|
|
746
|
+
results.map do |result|
|
|
747
|
+
next result unless result.ok?
|
|
748
|
+
|
|
749
|
+
result.class.new(
|
|
750
|
+
member_name: result.member_name,
|
|
751
|
+
command: result.command,
|
|
752
|
+
workdir: result.workdir,
|
|
753
|
+
status: result.status,
|
|
754
|
+
success: result.success,
|
|
755
|
+
stdout: result.stdout,
|
|
756
|
+
stderr: result.stderr,
|
|
757
|
+
elapsed_seconds: result.elapsed_seconds,
|
|
758
|
+
state: result.state.merge("bump_release_pending" => true),
|
|
759
|
+
reason: result.reason,
|
|
760
|
+
branch: result.branch
|
|
761
|
+
)
|
|
762
|
+
end
|
|
763
|
+
end
|
|
764
|
+
|
|
738
765
|
def git_root
|
|
739
766
|
stdout, stderr, status = Open3.capture3("git", "rev-parse", "--show-toplevel", chdir: config.root)
|
|
740
767
|
raise Error, "could not determine git root for #{config.root}: #{stderr}" unless status.success?
|
|
@@ -21,9 +21,10 @@ module Kettle
|
|
|
21
21
|
STATUS_TOKEN_KEYS.key?(value.to_s)
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
def initialize(members:, release_state_results: nil)
|
|
24
|
+
def initialize(members:, release_state_results: nil, shared_version: false)
|
|
25
25
|
@members = members
|
|
26
26
|
@release_state_results = release_state_results
|
|
27
|
+
@shared_version = shared_version
|
|
27
28
|
end
|
|
28
29
|
|
|
29
30
|
def apply(only: nil, exclude: nil, start_at: nil)
|
|
@@ -38,7 +39,7 @@ module Kettle
|
|
|
38
39
|
|
|
39
40
|
private
|
|
40
41
|
|
|
41
|
-
attr_reader :members, :release_state_results
|
|
42
|
+
attr_reader :members, :release_state_results, :shared_version
|
|
42
43
|
|
|
43
44
|
def select_only(selected, only)
|
|
44
45
|
names = only.split(",").map(&:strip).reject(&:empty?)
|
|
@@ -80,6 +81,10 @@ module Kettle
|
|
|
80
81
|
failed = results_by_member.values.select { |result| !result.ok? }
|
|
81
82
|
raise Error, "release-state check failed for: #{failed.map(&:member_name).join(", ")}" unless failed.empty?
|
|
82
83
|
|
|
84
|
+
if shared_version && status_tokens.include?("bump")
|
|
85
|
+
return selected if selected.any? { |candidate| truthy_state?(results_by_member[candidate.name]&.state&.fetch("bump_release_pending", nil)) }
|
|
86
|
+
end
|
|
87
|
+
|
|
83
88
|
selected.select do |candidate|
|
|
84
89
|
result = results_by_member[candidate.name]
|
|
85
90
|
result && status_tokens.all? { |token| truthy_state?(result.state[STATUS_TOKEN_KEYS.fetch(token)]) }
|
|
@@ -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.41"
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
|
@@ -7,13 +7,14 @@ module Kettle
|
|
|
7
7
|
class VersionBump
|
|
8
8
|
DEPENDENCY_METHODS = %i[add_dependency add_runtime_dependency add_development_dependency].freeze
|
|
9
9
|
|
|
10
|
-
def initialize(members:, target_version:, from_version: nil, mode: :dry_run, phase: "bump-version", dependency_target_versions: nil)
|
|
10
|
+
def initialize(members:, target_version:, from_version: nil, mode: :dry_run, phase: "bump-version", dependency_target_versions: nil, shared_target_version: nil)
|
|
11
11
|
@members = members
|
|
12
12
|
@target_version = target_version.to_s
|
|
13
13
|
@explicit_target_version = validate_version(target_version) unless Kettle::Dev::VersionBump::BUMP_TYPES.include?(@target_version)
|
|
14
14
|
@from_version = validate_version(from_version) if from_version
|
|
15
15
|
@mode = mode
|
|
16
16
|
@phase = phase
|
|
17
|
+
@shared_target_version = shared_target_version && validate_version(shared_target_version)
|
|
17
18
|
@member_names = members.map(&:name)
|
|
18
19
|
@member_target_versions = members.each_with_object({}) do |member, memo|
|
|
19
20
|
memo[member.name] = resolve_target_version(member)
|
|
@@ -32,7 +33,7 @@ module Kettle
|
|
|
32
33
|
|
|
33
34
|
private
|
|
34
35
|
|
|
35
|
-
attr_reader :members, :target_version, :explicit_target_version, :from_version, :mode, :phase, :member_target_versions, :dependency_target_versions, :dependency_member_names
|
|
36
|
+
attr_reader :members, :target_version, :explicit_target_version, :from_version, :mode, :phase, :member_target_versions, :dependency_target_versions, :dependency_member_names, :shared_target_version
|
|
36
37
|
|
|
37
38
|
def validate_version(version)
|
|
38
39
|
with_dev_errors { Kettle::Dev::VersionBump.validate_version(version) }
|
|
@@ -147,6 +148,7 @@ module Kettle
|
|
|
147
148
|
|
|
148
149
|
def resolve_target_version(member)
|
|
149
150
|
return explicit_target_version unless Kettle::Dev::VersionBump::BUMP_TYPES.include?(target_version)
|
|
151
|
+
return shared_target_version if shared_target_version
|
|
150
152
|
|
|
151
153
|
with_dev_errors { Kettle::Dev::VersionBump.resolve_target_version(target_version, member.version) }
|
|
152
154
|
end
|
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.41
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -360,10 +360,10 @@ licenses:
|
|
|
360
360
|
- AGPL-3.0-only
|
|
361
361
|
metadata:
|
|
362
362
|
homepage_uri: https://kettle-family.galtzo.com
|
|
363
|
-
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.
|
|
364
|
-
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.
|
|
363
|
+
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.41
|
|
364
|
+
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.41/CHANGELOG.md
|
|
365
365
|
bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
|
|
366
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.
|
|
366
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.41
|
|
367
367
|
funding_uri: https://github.com/sponsors/pboling
|
|
368
368
|
wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
|
|
369
369
|
news_uri: https://www.railsbling.com/tags/kettle-family
|
metadata.gz.sig
CHANGED
|
Binary file
|