kettle-jem 7.1.24 → 7.1.26

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: 5e183814ce90643b2d4e1ba747c57730aec7a1fe2c4a07721495a3fc22cdb0b5
4
- data.tar.gz: 9d0f017241c7ba8bb6061eb9408dd2f61145349219f518a04a6023a98900d75f
3
+ metadata.gz: 95ee5953f40a8942373ca016b41f67e812fcf90b0e13f4e5786609f3d9a38b86
4
+ data.tar.gz: c1afa212c3c6aa6995b25b78955bd878af0abe8aa3e77b5bbd7c4ae75598516c
5
5
  SHA512:
6
- metadata.gz: 1dc4f69e46b0819d491b897ee6fa078fbe44f6eee3ae8b131121c2a3f997610a76c86acbdc9d65a1645ea67540663e2daab17a2d0ba7dee2ba769878364f8ddc
7
- data.tar.gz: bd375240be6f8bebfe334e3138a74dfc7d5f32d4c77747f90745feb2527f086e4b4a49e324f78088b48e400e243c387e43d3fb241cbdfe4b594792874061ff47
6
+ metadata.gz: 41d248dc8ef3148fed43dfb300bc5e6061ba5794dec1d423f12bf6f0522ec4218a1cfdde1130a14972dd0ba781d30d49eca30974f2dbfdda5529ffcf9a24f6b0
7
+ data.tar.gz: b4d92519f1a06e75010493a1fa107aa939220595e0dcd46ce7e0a3d573e20141422fa97b241d5811bd2cb40895c34b94acec14008160d6215ded967b2e8493cb
checksums.yaml.gz.sig CHANGED
@@ -1,3 +1,2 @@
1
- e�-TڀI�A��&�C�;_$�J1q���#6@6���.�ͤ+A�u����M�c�J9/W�?!U}S����wc��Q��Ŭe��|1{�;�<�.��A�Ԡ��-��H�k�͙^�-����y}�h�dΩ�MB J�C�?
2
- �H�i� ���&S��Mi��E��"sSb#��E������*�ڣ������Nz�+�.>�l�H���F6�.�m��4pz6�#��!(Eվ�d�A����f�U�$ŝ�J{yMK�@:��C��`K~(��ɣ�r���l�a(*Ө�1hd�������{�,�a�s;�
3
- ?:(-#���7H�I �bw��NF���S�E�ŬP���H��V
1
+ ��)�<VŇ��䲈 ŭ��� ���T�Y���9�?��ѢfG_]�T
2
+ 7b�з VU�����V�0��C'ם|!7�P��|��:�5'[3m\-%s"cN.>
data/CHANGELOG.md CHANGED
@@ -30,6 +30,55 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [7.1.26] - 2026-09-10
34
+
35
+ - TAG: [v7.1.26][7.1.26t]
36
+ - COVERAGE: 93.67% -- 11268/12030 lines in 16 files
37
+ - BRANCH COVERAGE: 77.10% -- 4794/6218 branches in 16 files
38
+ - 18.11% documented
39
+
40
+ ### Added
41
+
42
+ - Curated Bundler binstub generation now includes `rubocop-gradual`.
43
+
44
+ ### Changed
45
+
46
+ - [kc] kettle-jem-deps-floor: Update kettle-jem template dependency floors:
47
+ - kettle-dev (>= 3.0.33 -> >= 3.0.34)
48
+ - kettle-family (>= 1.2.97 -> >= 1.2.100)
49
+
50
+ - [kc] kettle-jem/prepare: updated 10 project files:
51
+ - dependencies (10)
52
+
53
+ - [kc] kettle-jem/template: updated 5 project files:
54
+ - code and tests (1)
55
+ - dependencies (3)
56
+ - other (1)
57
+
58
+ ### Fixed
59
+
60
+ - [kc] kettle-jem/template-file-tracking: Track distinct changed template files across repeated Unreleased template runs.
61
+
62
+ - Keep branch-stack release CI active by managing the r*_*-*-v* GitHub Actions push trigger.
63
+
64
+ - Allow KETTLE_DEV_DEV to override a directly declared kettle-dev development dependency in local coverage Gemfiles.
65
+
66
+ - Predeclare the intentional version_gem runtime-heads dependency overlap in generated Kettle Jem configuration.
67
+
68
+ - Preserve declared kettle-dev requirements when local coverage and templating Gemfiles replace it with a workspace path.
69
+
70
+ ## [7.1.25] - 2026-09-08
71
+
72
+ - TAG: [v7.1.25][7.1.25t]
73
+ - COVERAGE: 93.66% -- 11248/12010 lines in 16 files
74
+ - BRANCH COVERAGE: 77.04% -- 4786/6212 branches in 16 files
75
+ - 18.14% documented
76
+
77
+ ### Changed
78
+
79
+ - [kc] kettle-jem-deps-floor: Update kettle-jem template dependency floors:
80
+ - kettle-family (>= 1.2.96 -> >= 1.2.97)
81
+
33
82
  ## [7.1.24] - 2026-09-08
34
83
 
35
84
  - TAG: [v7.1.24][7.1.24t]
@@ -1970,7 +2019,11 @@ Please file a bug if you notice a violation of semantic versioning.
1970
2019
  - Released kettle-jem as part of the initial StructuredMerge Ruby 7.0.0 gem set.
1971
2020
  - Included packaged templates and parser-backed merge support for Ruby gem templating.
1972
2021
 
1973
- [Unreleased]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.24...HEAD
2022
+ [Unreleased]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.26...HEAD
2023
+ [7.1.26]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.25...v7.1.26
2024
+ [7.1.26t]: https://github.com/structuredmerge/structuredmerge-ruby/releases/tag/v7.1.26
2025
+ [7.1.25]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.24...v7.1.25
2026
+ [7.1.25t]: https://github.com/structuredmerge/structuredmerge-ruby/releases/tag/v7.1.25
1974
2027
  [7.1.24]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.23...v7.1.24
1975
2028
  [7.1.24t]: https://github.com/structuredmerge/structuredmerge-ruby/releases/tag/v7.1.24
1976
2029
  [7.1.23]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.22...v7.1.23
data/README.md CHANGED
@@ -293,6 +293,14 @@ workflows:
293
293
  truffleruby-22.3: kettle-test --tag ~type:acceptance --example-status-log .rspec_status
294
294
  ```
295
295
 
296
+ ### Branch-Stack CI
297
+
298
+ Generated GitHub Actions workflows run on the default branch, `*-stable`, and
299
+ branch-stack release names matching `r*_*-*-v*` (for example,
300
+ `r3_2-even-v24`). This keeps release CI active for every target that
301
+ `kettle-family` publishes from a branch stack. Existing project-specific push
302
+ branch patterns remain preserved during templating.
303
+
296
304
  ### Default Local Test Bundle
297
305
 
298
306
  The root `Gemfile` is the default bundle for local commands such as
@@ -899,7 +907,7 @@ Thanks for RTFM. ☺️
899
907
  [📌gitmoji]: https://gitmoji.dev
900
908
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
901
909
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
902
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-12.010-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
910
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-12.030-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
903
911
  [🔐security]: https://github.com/structuredmerge/structuredmerge-ruby/blob/main/SECURITY.md
904
912
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
905
913
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -104,14 +104,25 @@ module Kettle
104
104
  end
105
105
 
106
106
  key = TEMPLATE_CHANGELOG_KEYS.fetch(label, "kettle-jem/template")
107
- entry = ->(matches) { template_run_entry(changed_files, matches) }
107
+ tracked_paths = nil
108
+ entry = lambda do |matches|
109
+ existing_paths = matches.empty? ? [] : TemplateLock.maintenance_changelog_paths(project_root: project_root, key: key).to_a
110
+ tracked_paths = (existing_paths + changed_files).uniq.sort
111
+ template_run_entry(tracked_paths)
112
+ end
108
113
  result = upsert_unreleased_entry(project_root: project_root, section: "Changed", key: key, entry: entry)
109
- changelog = result.merge(changed_files: changed_files, entry: result.fetch(:entry))
114
+ state_changed = TemplateLock.update_maintenance_changelog_paths(
115
+ project_root: project_root,
116
+ key: key,
117
+ paths: tracked_paths || changed_files
118
+ )
119
+ changelog = result.merge(changed_files: changed_files, tracked_paths: tracked_paths, entry: result.fetch(:entry))
110
120
  changed_files_with_changelog = if result.fetch(:status) == "updated"
111
121
  (Array(report.fetch(:changed_files, [])) + ["CHANGELOG.md"]).uniq.sort
112
122
  else
113
123
  Array(report.fetch(:changed_files, [])).uniq.sort
114
124
  end
125
+ changed_files_with_changelog << KETTLE_LOCK_PATH if state_changed
115
126
  report.merge(changelog: changelog, changed_files: changed_files_with_changelog)
116
127
  end
117
128
 
@@ -121,8 +132,8 @@ module Kettle
121
132
  end
122
133
  end
123
134
 
124
- def template_run_entry(changed_files, matches)
125
- counts = template_entry_counts(matches)
135
+ def template_run_entry(changed_files)
136
+ counts = {}
126
137
  changed_files.group_by { |path| template_change_category(path) }.each do |category, paths|
127
138
  counts[category] = counts.fetch(category, 0) + paths.length
128
139
  end
@@ -133,19 +144,6 @@ module Kettle
133
144
  ["updated #{total} project file#{"s" unless total == 1}:", *details].join("\n")
134
145
  end
135
146
 
136
- def template_entry_counts(matches)
137
- source = Array(matches).first.to_h.fetch(:source, "")
138
- source.lines.filter_map do |line|
139
- match = line.match(/\A\s{2,}- (.+?) \((\d+)\)\s*\z/)
140
- next unless match
141
-
142
- category = match[1].tr(" ", "_").to_sym
143
- next unless TEMPLATE_CHANGE_CATEGORIES.key?(category) || category == :other
144
-
145
- [category, match[2].to_i]
146
- end.to_h
147
- end
148
-
149
147
  def template_change_category(path)
150
148
  TEMPLATE_CHANGE_CATEGORIES.each do |category, matcher|
151
149
  return category if matcher.call(path)
@@ -16,7 +16,7 @@ module Kettle
16
16
  module InstallTask
17
17
  module_function
18
18
 
19
- CURATED_BINSTUB_GEMS = %w[appraisal2 rake rbs rspec-core yard kettle-dev kettle-test kettle-soup-cover kettle-gha-pins stone_checksums].freeze
19
+ CURATED_BINSTUB_GEMS = %w[appraisal2 rake rbs rspec-core yard rubocop-gradual kettle-dev kettle-test kettle-soup-cover kettle-gha-pins stone_checksums].freeze
20
20
  CURATED_BINSTUB_DISCRETE_EXECUTABLES = %w[
21
21
  kettle-drift
22
22
  yard
@@ -108,7 +108,15 @@ author_aliases:
108
108
  dependency_conflicts:
109
109
  # Set true only after every discovered conflict has an intentional action.
110
110
  reviewed: false
111
- resolve: []
111
+ resolve:
112
+ # The gemspec defines the released runtime contract. runtime_heads
113
+ # intentionally resolves version_gem from main to detect upstream changes
114
+ # before release, so both declarations must remain.
115
+ - gem: version_gem
116
+ direct: "{KJ|GEMSPEC_PATH}"
117
+ modular: gemfiles/modular/runtime_heads.gemfile
118
+ action: keep_both
119
+ reason: "The gemspec declares the released runtime contract while runtime_heads intentionally tests version_gem from main."
112
120
 
113
121
  # This project's identifying emoji.
114
122
  # Used as the leading emoji in the README H1 heading and in the gemspec
@@ -118,7 +118,7 @@ Gem::Specification.new do |spec|
118
118
  # and preferably a modular one (see gemfiles/modular/*.gemfile).
119
119
 
120
120
  # Dev, Test, & Release Tasks
121
- spec.add_development_dependency("kettle-dev", "~> 3.0", ">= 3.0.33") # ruby >= {KJ|MIN_TEST_RUBY}
121
+ spec.add_development_dependency("kettle-dev", "~> 3.0", ">= 3.0.34") # ruby >= {KJ|MIN_TEST_RUBY}
122
122
 
123
123
  # Security
124
124
  spec.add_development_dependency("bundler-audit", "~> 0.9.3") # ruby >= 2.0.0
@@ -6,11 +6,29 @@
6
6
  {KJ|LOCAL_GEMFILE_NOMONO_BOOTSTRAP}
7
7
 
8
8
  local_gems = %w[{KJ|KETTLE_DEV_LOCAL_GEMS}]
9
- declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
10
- local_gems_to_eval = local_gems - %w[{KJ|PACKAGE_NAME}] - declared_gems
11
9
 
12
10
  # export KETTLE_DEV_DEV=/path/to/my
13
11
  platform :mri do
12
+ # Replace the gemspec dependency instead of declaring kettle-dev twice. Bundler
13
+ # rejects duplicate declarations with different requirements or sources.
14
+ kettle_dev_dependency = instance_variable_get(:@dependencies).to_a.find { |dependency| dependency.name == "kettle-dev" }
15
+ kettle_dev_local_path = nomono_gems(
16
+ gems: %w[kettle-dev],
17
+ prefix: "KETTLE_DEV",
18
+ path_env: "KETTLE_DEV_DEV",
19
+ vendored_gems_env: "VENDORED_GEMS",
20
+ vendor_gem_dir_env: "VENDOR_GEM_DIR",
21
+ debug_env: "KETTLE_DEV_DEBUG",
22
+ root: ["src", "my", "kettle-dev"]
23
+ ).fetch("kettle-dev", nil)
24
+ if kettle_dev_dependency && kettle_dev_local_path
25
+ instance_variable_get(:@dependencies).delete(kettle_dev_dependency)
26
+ gem kettle_dev_dependency.name, *kettle_dev_dependency.requirements_list, path: kettle_dev_local_path
27
+ end
28
+
29
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
30
+ local_gems_to_eval = local_gems - %w[{KJ|PACKAGE_NAME}] - declared_gems
31
+
14
32
  eval_nomono_gems(
15
33
  gems: local_gems_to_eval,
16
34
  prefix: "KETTLE_DEV",
@@ -25,7 +25,7 @@ platform :mri do
25
25
  if ENV.fetch("RUBOCOP_LTS_DEV", "false").casecmp("false").zero?
26
26
  declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
27
27
  gem "rubocop-lts", {KJ|RUBOCOP_LTS_CONSTRAINT} unless declared_gems.include?("rubocop-lts")
28
- gem "rubocop-lts-rspec", "~> 1.0", ">= 1.0.5" unless declared_gems.include?("rubocop-lts-rspec")
28
+ gem "rubocop-lts-rspec", "~> 1.0", ">= 1.0.6" unless declared_gems.include?("rubocop-lts-rspec")
29
29
  gem "{KJ|RUBOCOP_RUBY_GEM}", {KJ|RUBOCOP_RUBY_CONSTRAINT} unless declared_gems.include?("{KJ|RUBOCOP_RUBY_GEM}")
30
30
  else
31
31
  eval_gemfile("style_local.gemfile")
@@ -43,9 +43,7 @@ structuredmerge_local_gems = %w[
43
43
  kettle_dev_local_gems = %w[
44
44
  {KJ|KETTLE_DEV_LOCAL_GEMS}
45
45
  ]
46
- declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
47
46
  structuredmerge_local_gems_to_eval = structuredmerge_local_gems - %w[{KJ|PACKAGE_NAME}]
48
- kettle_dev_local_gems_to_eval = kettle_dev_local_gems - %w[{KJ|PACKAGE_NAME}] - (declared_gems - %w[kettle-dev])
49
47
 
50
48
  if ENV.fetch("STRUCTUREDMERGE_DEV", "false").casecmp("false") != 0
51
49
  eval_nomono_gems(
@@ -59,6 +57,26 @@ if ENV.fetch("STRUCTUREDMERGE_DEV", "false").casecmp("false") != 0
59
57
  end
60
58
 
61
59
  if ENV.fetch("KETTLE_DEV_DEV", "false").casecmp("false") != 0
60
+ # Replace the gemspec dependency instead of declaring kettle-dev twice. Bundler
61
+ # rejects duplicate declarations with different requirements or sources.
62
+ kettle_dev_dependency = instance_variable_get(:@dependencies).to_a.find { |dependency| dependency.name == "kettle-dev" }
63
+ kettle_dev_local_path = nomono_gems(
64
+ gems: %w[kettle-dev],
65
+ prefix: "KETTLE_DEV",
66
+ path_env: "KETTLE_DEV_DEV",
67
+ vendored_gems_env: "VENDORED_GEMS",
68
+ vendor_gem_dir_env: "VENDOR_GEM_DIR",
69
+ debug_env: "KETTLE_DEV_DEBUG",
70
+ root: ["src", "my", "kettle-dev"]
71
+ ).fetch("kettle-dev", nil)
72
+ if kettle_dev_dependency && kettle_dev_local_path
73
+ instance_variable_get(:@dependencies).delete(kettle_dev_dependency)
74
+ gem kettle_dev_dependency.name, *kettle_dev_dependency.requirements_list, path: kettle_dev_local_path
75
+ end
76
+
77
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
78
+ kettle_dev_local_gems_to_eval = kettle_dev_local_gems - %w[{KJ|PACKAGE_NAME}] - declared_gems
79
+
62
80
  eval_nomono_gems(
63
81
  gems: kettle_dev_local_gems_to_eval,
64
82
  prefix: "KETTLE_DEV",
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.add_dependency "{KJ|SHIMMED_GEM_NAME}"
31
31
 
32
32
  # Dev, Test, & Release Tasks
33
- spec.add_development_dependency("kettle-dev", "~> 3.0", ">= 3.0.33") # ruby >= {KJ|MIN_TEST_RUBY}
33
+ spec.add_development_dependency("kettle-dev", "~> 3.0", ">= 3.0.34") # ruby >= {KJ|MIN_TEST_RUBY}
34
34
 
35
35
  # Tasks
36
36
  spec.add_development_dependency "rake", "~> 13.0"
@@ -5,7 +5,7 @@ module Kettle
5
5
  # Version namespace for this gem.
6
6
  module Version
7
7
  # Current gem version.
8
- VERSION = "7.1.24"
8
+ VERSION = "7.1.26"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
data/lib/kettle/jem.rb CHANGED
@@ -58,7 +58,7 @@ module Kettle
58
58
  # set in place before Bundler is allowed to evaluate that destination.
59
59
  TEMPLATE_MANAGED_DEPENDENCIES = [
60
60
  {name: "nomono", requirements: ["~> 1.1", ">= 1.1.5"], bootstrap: true},
61
- {name: "kettle-dev", requirements: ["~> 3.0", ">= 3.0.33"], bootstrap: true},
61
+ {name: "kettle-dev", requirements: ["~> 3.0", ">= 3.0.34"], bootstrap: true},
62
62
  {
63
63
  name: "kettle-changelog",
64
64
  requirements: ["~> 1.0", ">= 1.0.7"],
@@ -2087,6 +2087,7 @@ module Kettle
2087
2087
  VERSION = 1
2088
2088
  TEMPLATE_STATE_KEY = "template_state"
2089
2089
  FILES_KEY = "files"
2090
+ MAINTENANCE_CHANGELOG_SUBKEY = "maintenance_changelog"
2090
2091
 
2091
2092
  module_function
2092
2093
 
@@ -2155,6 +2156,34 @@ module Kettle
2155
2156
  record.is_a?(Hash) ? record : {}
2156
2157
  end
2157
2158
 
2159
+ def maintenance_changelog(lock)
2160
+ value = lock.dig(TEMPLATE_STATE_KEY, MAINTENANCE_CHANGELOG_SUBKEY)
2161
+ value.is_a?(Hash) ? value : {}
2162
+ end
2163
+
2164
+ def maintenance_changelog_paths(project_root:, key:)
2165
+ state = maintenance_changelog(load(project_root: project_root))
2166
+ return unless state.key?(key.to_s)
2167
+
2168
+ Array(state.fetch(key.to_s)).map(&:to_s).uniq.sort
2169
+ end
2170
+
2171
+ def update_maintenance_changelog_paths(project_root:, key:, paths:)
2172
+ lock = load(project_root: project_root)
2173
+ template_state = lock.fetch(TEMPLATE_STATE_KEY, {}).dup
2174
+ changelog = maintenance_changelog(lock).dup
2175
+ normalized_paths = Array(paths).map(&:to_s).uniq.sort
2176
+ return false if changelog[key.to_s] == normalized_paths
2177
+
2178
+ changelog[key.to_s] = normalized_paths
2179
+ template_state[MAINTENANCE_CHANGELOG_SUBKEY] = changelog
2180
+ lock[TEMPLATE_STATE_KEY] = template_state
2181
+ lock["version"] ||= VERSION
2182
+ lock[FILES_KEY] ||= {}
2183
+ write(project_root: project_root, lock: lock)
2184
+ true
2185
+ end
2186
+
2158
2187
  def build_lock(template_state:, file_records:)
2159
2188
  {
2160
2189
  "version" => VERSION,
@@ -5206,6 +5235,7 @@ module Kettle
5206
5235
  latest_replay = report.dig(:facts, :changelog, :latest_transfer_entry)
5207
5236
  existing_state = TemplateLock.load(project_root: project_root, config_path: config_path)
5208
5237
  existing_replay = existing_state.dig(TemplateLock::TEMPLATE_STATE_KEY, TemplateChecksums::CHANGELOG_REPLAY_SUBKEY)
5238
+ maintenance_changelog = TemplateLock.maintenance_changelog(existing_state)
5209
5239
  changelog_replay = if latest_replay
5210
5240
  {
5211
5241
  TemplateChecksums::LAST_ENTRY_KEY_SUBKEY => latest_replay.fetch(:key),
@@ -5218,6 +5248,7 @@ module Kettle
5218
5248
  "version" => VERSION,
5219
5249
  "applied_at" => Time.now.utc.strftime("%Y-%m-%d"),
5220
5250
  TemplateChecksums::CHANGELOG_REPLAY_SUBKEY => changelog_replay,
5251
+ TemplateLock::MAINTENANCE_CHANGELOG_SUBKEY => maintenance_changelog,
5221
5252
  TemplateChecksums::CHECKSUMS_SUBKEY => TemplateChecksums.compute(
5222
5253
  template_root: template_root_path(project_root, config: kettle_jem_config(project_root))
5223
5254
  )
@@ -5465,9 +5496,9 @@ module Kettle
5465
5496
  [
5466
5497
  {name: "appraisal2", source: %(gem "appraisal2", "~> 3.2", ">= 3.2.3"\n)},
5467
5498
  {name: "bundler-audit", source: %(gem "bundler-audit", "~> 0.9.3"\n)},
5468
- {name: "kettle-dev", source: %(gem "kettle-dev", "~> 3.0", ">= 3.0.33"\n)},
5499
+ {name: "kettle-dev", source: %(gem "kettle-dev", "~> 3.0", ">= 3.0.34"\n)},
5469
5500
  {name: "kettle-drift", source: %(gem "kettle-drift", "~> 1.0", ">= 1.0.13"\n)},
5470
- {name: "kettle-family", source: %(gem "kettle-family", "~> 1.2", ">= 1.2.96"\n)},
5501
+ {name: "kettle-family", source: %(gem "kettle-family", "~> 1.2", ">= 1.2.100"\n)},
5471
5502
  {name: PACKAGE_NAME, source: kettle_jem_dependency_source},
5472
5503
  {name: "kettle-test", source: %(gem "kettle-test", "~> 2.0", ">= 2.0.21"\n)},
5473
5504
  {name: "rake", source: %(gem "rake", "~> 13.0"\n)},
@@ -14366,6 +14397,7 @@ module Kettle
14366
14397
  github_org = facts.fetch(:repository, {})[:slug].to_s.split("/", 2).first.to_s if github_org.empty?
14367
14398
  tokens = {
14368
14399
  "KJ|GEM_NAME" => package.fetch(:name).to_s,
14400
+ "KJ|GEMSPEC_PATH" => rubygems.fetch(:gemspec_path, "").to_s,
14369
14401
  "KJ|PACKAGE_SUMMARY" => package.fetch(:summary, package.fetch(:description, "")).to_s,
14370
14402
  "KJ|PACKAGE_DESCRIPTION" => package.fetch(:description, package.fetch(:summary, "")).to_s,
14371
14403
  "KJ|GEMSPEC_PACKAGE_SUMMARY" => ruby_double_quoted_string_body(strip_leading_decorative_graphemes(package.fetch(:summary, package.fetch(:description, "")).to_s)),
@@ -15495,7 +15527,7 @@ module Kettle
15495
15527
  def main_gemfile_kettle_family_gem(package_name)
15496
15528
  return "" if package_name.to_s == "kettle-family"
15497
15529
 
15498
- %(gem "kettle-family", "~> 1.2", ">= 1.2.96"\n)
15530
+ %(gem "kettle-family", "~> 1.2", ">= 1.2.100"\n)
15499
15531
  end
15500
15532
 
15501
15533
  def main_gemfile_nomono_bootstrap(package_name)
@@ -18595,6 +18627,7 @@ module Kettle
18595
18627
  )
18596
18628
  recipe[:template_preference] = bootstrap.fetch(:template_preference)
18597
18629
  recipe[:template_tokens] = {
18630
+ "KJ|GEMSPEC_PATH" => bootstrap[:gemspec_path].to_s,
18598
18631
  "KJ|MIN_DIVERGENCE_THRESHOLD" => bootstrap.fetch(:min_divergence_threshold).to_s,
18599
18632
  "KJ|MIN_RUBY" => bootstrap[:min_ruby].to_s,
18600
18633
  "KJ|MIN_TEST_RUBY" => bootstrap[:test_min_ruby].to_s,
@@ -19847,7 +19880,10 @@ module Kettle
19847
19880
  end
19848
19881
 
19849
19882
  def github_actions_push_branches(content, default_branch:)
19850
- managed = [default_branch.to_s, "*-stable"]
19883
+ # Branch-stack releases use names such as r3_2-even-v24. They must run
19884
+ # the same push workflows as stable branches because kettle-release
19885
+ # monitors those runs before publishing the branch release.
19886
+ managed = [default_branch.to_s, "*-stable", "r*_*-*-v*"]
19851
19887
  existing = yaml_scalar_sequence_at_path(content, %w[on push branches])
19852
19888
  (managed + existing).uniq
19853
19889
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kettle-jem
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.1.24
4
+ version: 7.1.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -226,7 +226,7 @@ dependencies:
226
226
  version: '1.0'
227
227
  - - ">="
228
228
  - !ruby/object:Gem::Version
229
- version: 1.0.6
229
+ version: 1.0.7
230
230
  type: :runtime
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
@@ -236,27 +236,27 @@ dependencies:
236
236
  version: '1.0'
237
237
  - - ">="
238
238
  - !ruby/object:Gem::Version
239
- version: 1.0.6
239
+ version: 1.0.7
240
240
  - !ruby/object:Gem::Dependency
241
241
  name: kettle-dev
242
242
  requirement: !ruby/object:Gem::Requirement
243
243
  requirements:
244
- - - ">="
244
+ - - "~>"
245
245
  - !ruby/object:Gem::Version
246
- version: 3.0.17
247
- - - "<"
246
+ version: '3.0'
247
+ - - ">="
248
248
  - !ruby/object:Gem::Version
249
- version: 4.0.0
249
+ version: 3.0.34
250
250
  type: :runtime
251
251
  prerelease: false
252
252
  version_requirements: !ruby/object:Gem::Requirement
253
253
  requirements:
254
- - - ">="
254
+ - - "~>"
255
255
  - !ruby/object:Gem::Version
256
- version: 3.0.17
257
- - - "<"
256
+ version: '3.0'
257
+ - - ">="
258
258
  - !ruby/object:Gem::Version
259
- version: 4.0.0
259
+ version: 3.0.34
260
260
  - !ruby/object:Gem::Dependency
261
261
  name: kettle-gha-pins
262
262
  requirement: !ruby/object:Gem::Requirement
@@ -613,26 +613,6 @@ dependencies:
613
613
  - - "~>"
614
614
  - !ruby/object:Gem::Version
615
615
  version: 0.9.3
616
- - !ruby/object:Gem::Dependency
617
- name: json
618
- requirement: !ruby/object:Gem::Requirement
619
- requirements:
620
- - - "~>"
621
- - !ruby/object:Gem::Version
622
- version: '2.0'
623
- - - ">="
624
- - !ruby/object:Gem::Version
625
- version: 2.21.2
626
- type: :development
627
- prerelease: false
628
- version_requirements: !ruby/object:Gem::Requirement
629
- requirements:
630
- - - "~>"
631
- - !ruby/object:Gem::Version
632
- version: '2.0'
633
- - - ">="
634
- - !ruby/object:Gem::Version
635
- version: 2.21.2
636
616
  - !ruby/object:Gem::Dependency
637
617
  name: rake
638
618
  requirement: !ruby/object:Gem::Requirement
@@ -801,6 +781,26 @@ dependencies:
801
781
  - - ">="
802
782
  - !ruby/object:Gem::Version
803
783
  version: 2.0.12
784
+ - !ruby/object:Gem::Dependency
785
+ name: json
786
+ requirement: !ruby/object:Gem::Requirement
787
+ requirements:
788
+ - - "~>"
789
+ - !ruby/object:Gem::Version
790
+ version: '2.0'
791
+ - - ">="
792
+ - !ruby/object:Gem::Version
793
+ version: 2.21.2
794
+ type: :development
795
+ prerelease: false
796
+ version_requirements: !ruby/object:Gem::Requirement
797
+ requirements:
798
+ - - "~>"
799
+ - !ruby/object:Gem::Version
800
+ version: '2.0'
801
+ - - ">="
802
+ - !ruby/object:Gem::Version
803
+ version: 2.21.2
804
804
  description: "\U0001F52E Kettle::Jem provides gem scaffolding, templating, and setup
805
805
  automation using the *-merge gem family for AST-based file merging and token-resolver
806
806
  for template token resolution. Includes MergerConfig presets, YAML recipes, and
@@ -1016,10 +1016,10 @@ licenses:
1016
1016
  - PolyForm-Small-Business-1.0.0
1017
1017
  metadata:
1018
1018
  homepage_uri: https://structuredmerge.org
1019
- source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.24
1020
- changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.24/CHANGELOG.md
1019
+ source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.26
1020
+ changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.26/CHANGELOG.md
1021
1021
  bug_tracker_uri: https://github.com/structuredmerge/structuredmerge-ruby/issues
1022
- documentation_uri: https://www.rubydoc.info/gems/kettle-jem/7.1.24
1022
+ documentation_uri: https://www.rubydoc.info/gems/kettle-jem/7.1.26
1023
1023
  funding_uri: https://github.com/sponsors/pboling
1024
1024
  wiki_uri: https://github.com/structuredmerge/structuredmerge-ruby/wiki
1025
1025
  news_uri: https://www.railsbling.com/tags/kettle-jem
metadata.gz.sig CHANGED
Binary file