kettle-family 1.2.55 → 1.2.56

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: 78192c675c05e34bc11c6ab9666307c7131e3ce2adec2a3976169a386010334b
4
- data.tar.gz: e26353522276591309786749b160e21e115b640a04dae48e72444f1e0ce08177
3
+ metadata.gz: 34b36ee55d171d1e9132e82d5df605e2e56c619ffa1ebb71a7c066681a691b68
4
+ data.tar.gz: 1b2ff2457c6c84226919f6772fc365daa5083fbeb2b66b005f4132cd17efcaca
5
5
  SHA512:
6
- metadata.gz: 1bb4af016efa9523f39f9be70fcdef33b2f7f2cac9d8831fb743d6da9f5e6a53852b985fb01a604f78e4d578b62b806bff2531d3698a6619cdc103fecdf82c34
7
- data.tar.gz: 3fa82f87d49ad6c002cdc51f3477733565b40507ef31906021bfe1e62fa974446c0702737210dfaf38a33f615272c21a2e43260c89a37ccc4c01fad0d5d0f10d
6
+ metadata.gz: cb03a78962298730c27ce7e56cf5cdfd332de42bde594b3de1da00f323a14f5a1f7051baab7d9f3a24797bcfb3f5abe4259db7b6fe803aff7c6648d2abeba5a4
7
+ data.tar.gz: 0c83a56da0fca5dea3a7d33f43a00bfc4b5b7302bb37c989399e5a38205a936e5e3e13e18b566df236faa0c6a33cba947237540c8183c992e34a546edea7484c
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.56] - 2026-08-18
34
+
35
+ - TAG: [v1.2.56][1.2.56t]
36
+ - COVERAGE: 93.66% -- 5301/5660 lines in 33 files
37
+ - BRANCH COVERAGE: 76.31% -- 2136/2799 branches in 33 files
38
+ - 29.86% documented
39
+
40
+ ### Fixed
41
+
42
+ - Family version bumps now apply shared targets only to shared-root members and independently bump local-changelog members when release state marks them pending.
43
+
33
44
  ## [1.2.55] - 2026-08-15
34
45
 
35
46
  - TAG: [v1.2.55][1.2.55t]
@@ -2120,7 +2131,9 @@ Please file a bug if you notice a violation of semantic versioning.
2120
2131
  - Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
2121
2132
  - Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
2122
2133
 
2123
- [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.55...HEAD
2134
+ [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.56...HEAD
2135
+ [1.2.56]: https://github.com/kettle-dev/kettle-family/compare/v1.2.55...v1.2.56
2136
+ [1.2.56t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.56
2124
2137
  [1.2.55]: https://github.com/kettle-dev/kettle-family/compare/v1.2.54...v1.2.55
2125
2138
  [1.2.55t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.55
2126
2139
  [1.2.54]: https://github.com/kettle-dev/kettle-family/compare/v1.2.53...v1.2.54
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.640-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
839
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-5.660-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
@@ -691,7 +691,8 @@ module Kettle
691
691
  family_members: ordered,
692
692
  options: options,
693
693
  start_at: start_at,
694
- state_event_handler: state_event_handler
694
+ state_event_handler: state_event_handler,
695
+ release_state_results: release_state_results
695
696
  )
696
697
  state_progress&.finish
697
698
  elapsed_seconds = Process.clock_gettime(Process::CLOCK_MONOTONIC) - started_at
@@ -716,11 +717,40 @@ module Kettle
716
717
 
717
718
  StartAt = Struct.new(:member, :branch)
718
719
 
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)
720
+ def command_results(command:, config:, members:, family_members:, options:, start_at:, state_event_handler: nil, release_state_results: nil)
721
+ if branch_target_command?(command, config)
722
+ return branch_target_command_results(
723
+ command: command,
724
+ config: config,
725
+ members: members,
726
+ family_members: family_members,
727
+ options: options,
728
+ start_at: start_at,
729
+ release_state_results: release_state_results
730
+ )
731
+ end
732
+ if member_local_branch_target_command?(command, config, members)
733
+ return member_local_branch_target_command_results(
734
+ command: command,
735
+ config: config,
736
+ members: members,
737
+ family_members: family_members,
738
+ options: options,
739
+ start_at: start_at,
740
+ release_state_results: release_state_results
741
+ )
742
+ end
722
743
 
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)
744
+ command_results_for_current_branch(
745
+ command: command,
746
+ config: config,
747
+ members: members,
748
+ family_members: family_members,
749
+ options: options,
750
+ start_at: start_at,
751
+ state_event_handler: state_event_handler,
752
+ release_state_results: release_state_results
753
+ )
724
754
  end
725
755
 
726
756
  def release_state_results_for_selection(config:, members:, only:, jobs: nil)
@@ -761,9 +791,9 @@ module Kettle
761
791
  members
762
792
  end
763
793
 
764
- def command_results_for_current_branch(command:, config:, members:, options:, family_members: members, start_at: StartAt.new(nil, nil), state_event_handler: nil)
794
+ def command_results_for_current_branch(command:, config:, members:, options:, family_members: members, start_at: StartAt.new(nil, nil), state_event_handler: nil, release_state_results: nil)
765
795
  return mise_trust_results(config: config, members: members) if command == "mise-trust"
766
- return bump_version_results(config: config, members: members, options: options, phase: command) if %w[bump bump-version].include?(command)
796
+ return bump_version_results(config: config, members: members, options: options, phase: command, release_state_results: release_state_results) if %w[bump bump-version].include?(command)
767
797
  return add_changelog_results(members: members, options: options) if command == "add-changelog"
768
798
  return clean_unreleased_results(config: config, members: members, options: options) if command == "clean-unreleased"
769
799
  return reconcile_release_results(config: config, members: members, options: options) if command == "reconcile-releases"
@@ -936,7 +966,7 @@ module Kettle
936
966
  members.any? { |member| member_release_config(member: member, config: config) }
937
967
  end
938
968
 
939
- def branch_target_command_results(command:, config:, members:, family_members:, options:, start_at:)
969
+ def branch_target_command_results(command:, config:, members:, family_members:, options:, start_at:, release_state_results: nil)
940
970
  runner = CommandRunner.new(execute: options[:execute])
941
971
  selected_names = members.map(&:name)
942
972
  release_target_branches(command: command, config: config, start_at: start_at).each_with_object([]) do |branch, memo|
@@ -950,7 +980,14 @@ module Kettle
950
980
 
951
981
  branch_members = rediscovered_selected_members(config: config, selected_names: selected_names, command: command)
952
982
  branch_members = members if branch_members.empty?
953
- branch_results = command_results_for_current_branch(command: command, config: config, members: branch_members, family_members: family_members, options: options)
983
+ branch_results = command_results_for_current_branch(
984
+ command: command,
985
+ config: config,
986
+ members: branch_members,
987
+ family_members: family_members,
988
+ options: options,
989
+ release_state_results: release_state_results
990
+ )
954
991
  branch_results.each { |result| result.branch = branch if result.respond_to?(:branch=) }
955
992
  memo.concat(branch_results)
956
993
  break memo unless memo.last&.ok?
@@ -960,12 +997,19 @@ module Kettle
960
997
  end
961
998
  end
962
999
 
963
- def member_local_branch_target_command_results(command:, config:, members:, family_members:, options:, start_at:)
1000
+ def member_local_branch_target_command_results(command:, config:, members:, family_members:, options:, start_at:, release_state_results: nil)
964
1001
  runner = CommandRunner.new(execute: options[:execute])
965
1002
  members.each_with_object([]) do |member, memo|
966
1003
  member_config = member_release_config(member: member, config: config)
967
1004
  unless member_config
968
- memo.concat(command_results_for_current_branch(command: command, config: config, members: [member], family_members: family_members, options: options))
1005
+ memo.concat(command_results_for_current_branch(
1006
+ command: command,
1007
+ config: config,
1008
+ members: [member],
1009
+ family_members: family_members,
1010
+ options: options,
1011
+ release_state_results: release_state_results
1012
+ ))
969
1013
  break memo unless memo.last&.ok?
970
1014
  next
971
1015
  end
@@ -981,7 +1025,14 @@ module Kettle
981
1025
 
982
1026
  branch_members = rediscovered_selected_members(config: member_config, selected_names: [member.name], command: command)
983
1027
  branch_members = [member] if branch_members.empty?
984
- branch_results = command_results_for_current_branch(command: command, config: member_config, members: branch_members, family_members: family_members, options: options)
1028
+ branch_results = command_results_for_current_branch(
1029
+ command: command,
1030
+ config: member_config,
1031
+ members: branch_members,
1032
+ family_members: family_members,
1033
+ options: options,
1034
+ release_state_results: release_state_results
1035
+ )
985
1036
  branch_results.each { |result| result.branch = branch if result.respond_to?(:branch=) }
986
1037
  memo.concat(branch_results)
987
1038
  break unless memo.last&.ok?
@@ -1019,13 +1070,19 @@ module Kettle
1019
1070
  StartAt.new(member, branch)
1020
1071
  end
1021
1072
 
1022
- def bump_version_results(config:, members:, options:, phase:)
1073
+ def bump_version_results(config:, members:, options:, phase:, release_state_results: nil)
1023
1074
  require_relative "version_bump"
1024
1075
  require_relative "release_waves"
1025
1076
 
1026
1077
  results = []
1027
1078
  completed_target_versions = {}
1028
- shared_target_version = shared_bump_target_version(config: config, members: members, options: options)
1079
+ shared_member_names = shared_bump_member_names(config: config, members: members)
1080
+ shared_target_version = shared_bump_target_version(
1081
+ config: config,
1082
+ members: members,
1083
+ options: options,
1084
+ release_state_results: release_state_results
1085
+ )
1029
1086
  ReleaseWaves.new(members: members).waves.each do |wave|
1030
1087
  bump = VersionBump.new(
1031
1088
  members: wave,
@@ -1034,6 +1091,7 @@ module Kettle
1034
1091
  mode: bump_version_mode(options),
1035
1092
  phase: phase,
1036
1093
  shared_target_version: shared_target_version,
1094
+ shared_member_names: shared_member_names,
1037
1095
  dependency_target_versions: completed_target_versions
1038
1096
  )
1039
1097
  wave_results = bump.results
@@ -1060,14 +1118,38 @@ module Kettle
1060
1118
  end
1061
1119
  end
1062
1120
 
1063
- def shared_bump_target_version(config:, members:, options:)
1121
+ def shared_bump_member_names(config:, members:)
1122
+ return [] unless config.shared_changelog?
1123
+
1124
+ members.reject { |member| config.member_local_changelog?(member) }.map(&:name)
1125
+ end
1126
+
1127
+ def shared_bump_target_version(config:, members:, options:, release_state_results: nil)
1064
1128
  return unless config.shared_changelog?
1065
1129
  return unless Kettle::Dev::VersionBump::BUMP_TYPES.include?(options[:target_version].to_s)
1066
1130
 
1067
- versions = members.map { |member| Gem::Version.new(member.version.to_s) }.uniq
1131
+ shared_members = members.reject { |member| config.member_local_changelog?(member) }
1132
+ return if shared_members.empty?
1133
+
1134
+ versions = shared_members.map { |member| Gem::Version.new(member.version.to_s) }.uniq
1068
1135
  current = versions.max
1069
1136
  return current.to_s if versions.length > 1
1070
1137
 
1138
+ released_versions = Array(release_state_results).filter_map do |result|
1139
+ next unless shared_members.any? { |member| member.name == result.member_name }
1140
+
1141
+ state = result.state
1142
+ next unless state.respond_to?(:[])
1143
+
1144
+ value = state["latest_released"]
1145
+ next if value.to_s.empty?
1146
+
1147
+ Gem::Version.new(value.to_s)
1148
+ rescue ArgumentError
1149
+ nil
1150
+ end
1151
+ return current.to_s if released_versions.any? && current > released_versions.max
1152
+
1071
1153
  Kettle::Dev::VersionBump.resolve_target_version(options[:target_version].to_s, current.to_s)
1072
1154
  end
1073
1155
 
@@ -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.55"
8
+ VERSION = "1.2.56"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
@@ -7,7 +7,7 @@ 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, shared_target_version: nil)
10
+ def initialize(members:, target_version:, from_version: nil, mode: :dry_run, phase: "bump-version", dependency_target_versions: nil, shared_target_version: nil, shared_member_names: 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)
@@ -15,6 +15,7 @@ module Kettle
15
15
  @mode = mode
16
16
  @phase = phase
17
17
  @shared_target_version = shared_target_version && validate_version(shared_target_version)
18
+ @shared_member_names = shared_member_names&.map(&:to_s)
18
19
  @member_names = members.map(&:name)
19
20
  @member_target_versions = members.each_with_object({}) do |member, memo|
20
21
  memo[member.name] = resolve_target_version(member)
@@ -33,7 +34,7 @@ module Kettle
33
34
 
34
35
  private
35
36
 
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
37
+ attr_reader :members, :target_version, :explicit_target_version, :from_version, :mode, :phase, :member_target_versions, :dependency_target_versions, :dependency_member_names, :shared_target_version, :shared_member_names
37
38
 
38
39
  def validate_version(version)
39
40
  with_dev_errors { Kettle::Dev::VersionBump.validate_version(version) }
@@ -148,11 +149,15 @@ module Kettle
148
149
 
149
150
  def resolve_target_version(member)
150
151
  return explicit_target_version unless Kettle::Dev::VersionBump::BUMP_TYPES.include?(target_version)
151
- return shared_target_version if shared_target_version
152
+ return shared_target_version if shared_target_version && shared_target_applies_to?(member)
152
153
 
153
154
  with_dev_errors { Kettle::Dev::VersionBump.resolve_target_version(target_version, member.version) }
154
155
  end
155
156
 
157
+ def shared_target_applies_to?(member)
158
+ shared_member_names.nil? || shared_member_names.include?(member.name)
159
+ end
160
+
156
161
  def write_edits(edits)
157
162
  Kettle::Dev::VersionBump.write_edits(edits)
158
163
  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.55
4
+ version: 1.2.56
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.55
365
- changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.55/CHANGELOG.md
364
+ source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.56
365
+ changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.56/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.55
367
+ documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.56
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
@@ -1,2 +1,4 @@
1
- d��&�BjA �h�p�*��"�|�1Č;$�!��n��PZ�k��k��P��/��@�{�`�����S�c|g�Y��F…�XL3�x��� ��Q^��""���,�Ь����U.t2��..NY2P���g���H{B}A��t���B�{�DP34��Vq3���u�TOy���9)+
2
- �v/�?-�r�(!N&�cu��%H���hX�O�gRob�6���p��S��J��>�� ���V6�����O5����m�|^%� -�%���FOL����L���{�8Zbly:g(���\��;�*�(��s
1
+ ��u2���<*�)�p�EX��MGvb��
2
+ >����ֺ �sn��sK�����Y% If��#�W>��.
3
3
  �f�_ţ�,�,�_T[��ڀ͝/�]|���
4
+ �|� M���<д�UM1HBr`���:?�t�bR;\� �缺�R�����D�xk���T�Kn\�G%w���F��f��N4����#ۛ<c
5
+ �N����C���g�{��f�q.`:q�-9�Ĺ���h?;��4 ޗ���E$�?��K���"֟AķW8������A