kettle-jem 7.1.8 → 7.1.11

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: f6c5f5fc9bc53f2126159023d8c5648b14d48bf686a3db540d79468848fb3d30
4
- data.tar.gz: f44a05f17df8cb139e53b1bae7be96c439eada3e4f958387175e161ba08bf93b
3
+ metadata.gz: 4557a45c40575cf35c6a6630ca4f15694407df55cae707f4187c282111a5fe6e
4
+ data.tar.gz: df10a122743e47d9236115a4e7d44fbc0342a70de1da7643b863da983f9d800e
5
5
  SHA512:
6
- metadata.gz: fdafbae49efd6f2858c718ee4b7df6a14502c561e8d98b9bf11c96d5b1795b4710f2eb0aeddb3951392d9ec164afb533aa7db4d56ea6ea7cb44da21bc9398efa
7
- data.tar.gz: 186e8070d0d5aed6c18d6db8937e3d267ac38bef6703f2e5445b6bdfffc6cf2da9a097f63b580084c7eabce82fe7631eaa6da18c45ddfe09da1fe2133bb7a55f
6
+ metadata.gz: 77dfdae1740bbe776afb7d9f181a34244c6bd594cc0b9d6d274e9183c8d1be60894c7c112243c9f5d064f9cf4a57b2ec043e0bb84d55eb4dfe86b48008f535c7
7
+ data.tar.gz: 17fac3e17f62555dc40598d641007ce21c05c7968cb9745409b3eeaf153c86648b47dde2abaee0b2ed1a82cab268e267eeeac1ce31fbf2d69d493119de03d9bc
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,89 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [7.1.11] - 2026-08-29
34
+
35
+ - TAG: [v7.1.11][7.1.11t]
36
+ - COVERAGE: 93.64% -- 11027/11776 lines in 16 files
37
+ - BRANCH COVERAGE: 76.95% -- 4698/6105 branches in 16 files
38
+ - 17.95% documented
39
+
40
+ ### Changed
41
+
42
+ - [kc] kettle-jem/template: updated 398 project files:
43
+ - code and tests (20)
44
+ - configuration (12)
45
+ - dependencies (147)
46
+ - documentation (9)
47
+ - other (123)
48
+ - workflows (87)
49
+
50
+ - [kc] kettle-jem-deps-floor: Update kettle-jem template dependency floors:
51
+ - kettle-changelog (>= 1.0.5 -> >= 1.0.6)
52
+ - kettle-jem (>= 7.1.8 -> >= 7.1.10)
53
+ - turbo_tests2 (>= 3.2.6 -> >= 3.2.7)
54
+
55
+ - Raise first-party dependency minimums to their latest released versions.
56
+
57
+ ### Fixed
58
+
59
+ - Preserve inherited version namespaces by declaring their superclass before loading version.rb.
60
+
61
+ - Template-manage default local test bundles independently from appraisal and framework CI matrices.
62
+
63
+ ## [7.1.10] - 2026-08-29
64
+
65
+ - TAG: [v7.1.10][7.1.10t]
66
+ - COVERAGE: 93.56% -- 10937/11690 lines in 16 files
67
+ - BRANCH COVERAGE: 76.95% -- 4658/6053 branches in 16 files
68
+ - 17.92% documented
69
+
70
+ ### Changed
71
+
72
+ - Record template-run changelog updates before the bootstrap commit so generated changes and their maintenance summary are committed together.
73
+
74
+ - [kc] kettle-jem-deps-floor: Update kettle-jem template dependency floors:
75
+ - kettle-changelog (>= 1.0.3 -> >= 1.0.5)
76
+ - kettle-dev (>= 3.0.13 -> >= 3.0.16)
77
+ - kettle-drift (>= 1.0.12 -> >= 1.0.13)
78
+ - kettle-family (>= 1.2.62 -> >= 1.2.63)
79
+ - kettle-jem (>= 7.1.7 -> >= 7.1.8)
80
+ - kettle-soup-cover (>= 3.0.9 -> >= 3.0.10)
81
+ - kettle-test (>= 2.0.20 -> >= 2.0.21)
82
+ - nomono (>= 1.1.4 -> >= 1.1.5)
83
+
84
+ - [kc] kettle-jem-workflow-pins: Update pinned GitHub Actions in kettle-jem templates:
85
+ - apache/skywalking-eyes/dependency v0.8.0 (61275cc80d0798a405cb070f7d3a8aaf7cf2c2c1) -> v0.9.0 (a196742f472feaffafea537ce5a2a4c3c53a8de4)
86
+ - github/codeql-action/analyze v4.37.8 (db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28) -> v4.37.9 (cdf488f595d80d6e07e03d4674febd5ab45fa938)
87
+ - github/codeql-action/autobuild v4.37.8 (db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28) -> v4.37.9 (cdf488f595d80d6e07e03d4674febd5ab45fa938)
88
+ - github/codeql-action/init v4.37.8 (db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28) -> v4.37.9 (cdf488f595d80d6e07e03d4674febd5ab45fa938)
89
+
90
+ - [kc] kettle-jem/template: updated 1194 project files:
91
+ - code and tests (60)
92
+ - configuration (36)
93
+ - dependencies (441)
94
+ - documentation (27)
95
+ - other (369)
96
+ - workflows (261)
97
+
98
+ - [kc] kettle-jem-deps-floor: Update kettle-jem template dependency floors:
99
+ - kettle-dev (>= 3.0.16 -> >= 3.0.17)
100
+ - kettle-family (>= 1.2.63 -> >= 1.2.64)
101
+
102
+ - [kc] kettle-jem/prepare: updated 13 project files:
103
+ - dependencies (13)
104
+
105
+ - [kc] kettle-jem/template: updated 3 project files:
106
+ - code and tests (1)
107
+ - dependencies (1)
108
+ - other (1)
109
+
110
+ ### Fixed
111
+
112
+ - Keep external superclass expressions out of generated standalone version files.
113
+
114
+ - Skip template changelog recording for partial destination projects that do not contain a changelog.
115
+
33
116
  ## [7.1.8] - 2026-08-26
34
117
 
35
118
  - TAG: [v7.1.8][7.1.8t]
@@ -1621,7 +1704,11 @@ Please file a bug if you notice a violation of semantic versioning.
1621
1704
  - Released kettle-jem as part of the initial StructuredMerge Ruby 7.0.0 gem set.
1622
1705
  - Included packaged templates and parser-backed merge support for Ruby gem templating.
1623
1706
 
1624
- [Unreleased]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.8...HEAD
1707
+ [Unreleased]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.11...HEAD
1708
+ [7.1.11]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.10...v7.1.11
1709
+ [7.1.11t]: https://github.com/structuredmerge/structuredmerge-ruby/releases/tag/v7.1.11
1710
+ [7.1.10]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.8...v7.1.10
1711
+ [7.1.10t]: https://github.com/structuredmerge/structuredmerge-ruby/releases/tag/v7.1.10
1625
1712
  [7.1.8]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.7...v7.1.8
1626
1713
  [7.1.8t]: https://github.com/structuredmerge/structuredmerge-ruby/releases/tag/v7.1.8
1627
1714
  [7.1.7]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.6...v7.1.7
data/README.md CHANGED
@@ -268,7 +268,77 @@ good fit when you want kettle-jem to generate framework-version modular gemfiles
268
268
 
269
269
  If you need a deeper or more complex matrix, prefer
270
270
  **`kettle-jem-appraisals`**, which generates `Appraisals` entries and is the
271
- better fit for Appraisals-style combinations.
271
+ better fit for Appraisals-style combinations. Its `appraisal_matrix` config is
272
+ the source of truth for the generated matrix: use `mode` (or per-gem `mode`),
273
+ `freshness_ttl`, `exec_cmd`, `appraisal_gemfiles`, `standard_appraisal_role`,
274
+ and `gems.tier1` / `gems.tier2` as documented in the
275
+ [`kettle-jem-appraisals` configuration reference](https://github.com/appraisal-rb/kettle-jem-appraisals#%EF%B8%8F-configuration).
276
+
277
+ Neither `appraisal_matrix` nor `framework_matrix` implicitly changes the root
278
+ local development bundle. Pair either policy with `test_bundle` when the
279
+ default local test command needs a specific framework or harness.
280
+
281
+ ### Default Local Test Bundle
282
+
283
+ The root `Gemfile` is the default bundle for local commands such as
284
+ `bundle exec kettle-test`. It is intentionally separate from Appraisals and
285
+ CI, which run with their own generated Gemfiles. Declare its project-specific
286
+ test dependencies with `test_bundle`; kettle-jem will add them to the root
287
+ `Gemfile` on every template run.
288
+
289
+ Use `test_bundle.gemfiles` for a modular fragment. A mapping may name direct
290
+ dependencies that the fragment replaces, so kettle-jem removes stale root
291
+ declarations before adding the `eval_gemfile` call:
292
+
293
+ ```yaml
294
+ test_bundle:
295
+ gemfiles:
296
+ - path: gemfiles/rails_7_2.gemfile
297
+ replaces:
298
+ - combustion
299
+ - actionmailer
300
+ - railties
301
+ ```
302
+
303
+ Use `test_bundle.gems` for a small, explicit local test dependency that does
304
+ not warrant a modular fragment. Use either `requirement` or `requirements`; set
305
+ `require: false` only when the dependency must be available to Bundler but
306
+ should not be automatically required:
307
+
308
+ ```yaml
309
+ test_bundle:
310
+ gems:
311
+ - name: activerecord
312
+ requirement: "~> 7.2"
313
+ - name: debug
314
+ requirement: "~> 1.11"
315
+ require: false
316
+ ```
317
+
318
+ For a simple `workflows.framework_matrix`, mark exactly one version as
319
+ `default: true` to load that generated framework gemfile into the root
320
+ `Gemfile` as the local default. The matrix still controls Appraisals and CI;
321
+ the flag only selects the root local bundle. `appraisal_matrix` deliberately
322
+ has no implicit default selector: use `test_bundle` to name the stable local
323
+ Gemfile fragment or direct dependencies while the plugin continues to generate
324
+ the full appraisal matrix.
325
+
326
+ ```yaml
327
+ workflows:
328
+ preset: framework
329
+ framework_matrix:
330
+ dimension: rails
331
+ gem: rails
332
+ gemfile_pattern: "rails_{version}.gemfile"
333
+ versions:
334
+ - label: "7.2"
335
+ slug: "7_2"
336
+ requirement: "~> 7.2.2"
337
+ default: true
338
+ ```
339
+
340
+ Do not use freeze markers for any of these declarations. The configuration is
341
+ the source of truth, and templating keeps the root bundle synchronized with it.
272
342
 
273
343
  ### Strategies
274
344
 
@@ -794,7 +864,7 @@ Thanks for RTFM. ☺️
794
864
  [📌gitmoji]: https://gitmoji.dev
795
865
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
796
866
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
797
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-11.606-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
867
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-11.776-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
798
868
  [🔐security]: https://github.com/structuredmerge/structuredmerge-ruby/blob/main/SECURITY.md
799
869
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
800
870
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -234,6 +234,8 @@ module Kettle
234
234
  end
235
235
  return result unless %w[setup prepare apply template install].include?(command)
236
236
 
237
+ return result if result.is_a?(Hash) && result.key?(:changelog)
238
+
237
239
  Kettle::Jem::MaintenanceChangelog.record_template_run(
238
240
  project_root: project_root,
239
241
  report: result,
@@ -95,6 +95,10 @@ module Kettle
95
95
  return report.merge(changelog: {status: "skipped", reason: "no_template_changes", changed_files: []})
96
96
  end
97
97
 
98
+ unless File.file?(File.join(project_root, "CHANGELOG.md"))
99
+ return report.merge(changelog: {status: "skipped", reason: "missing_changelog"})
100
+ end
101
+
98
102
  key = TEMPLATE_CHANGELOG_KEYS.fetch(label, "kettle-jem/template")
99
103
  entry = ->(matches) { template_run_entry(changed_files, matches) }
100
104
  result = upsert_unreleased_entry(project_root: project_root, section: "Changed", key: key, entry: entry)
@@ -8,6 +8,7 @@ require "toml-rb"
8
8
  require "uri"
9
9
  require "yaml"
10
10
  require "kettle/rb/compat_matrix"
11
+ require "kettle/jem/maintenance_changelog"
11
12
 
12
13
  module Kettle
13
14
  module Jem
@@ -48,7 +49,6 @@ module Kettle
48
49
  install_steps << rubocop_gradual_autocorrect_step(project_root, env: setup_env, run_options: effective_run_options)
49
50
  install_steps << normalize_lockfile_step(project_root, env: setup_env, run_options: effective_run_options)
50
51
  install_steps << bundled_handoff_step(project_root: project_root, env: env, run_options: effective_run_options)
51
- install_steps << bootstrap_commit_step(project_root, run_options: effective_run_options)
52
52
  install_steps = execute_orchestration_steps(install_steps, project_root: project_root, env: setup_env, run_options: effective_run_options, command_runner: command_runner)
53
53
 
54
54
  final_report = report.merge(
@@ -62,6 +62,26 @@ module Kettle
62
62
  message: "kettle:jem:install applied templates, completed local post-template checks, and executed available orchestration steps."
63
63
  }]
64
64
  )
65
+ final_report = Kettle::Jem::MaintenanceChangelog.record_template_run(
66
+ project_root: project_root,
67
+ report: final_report,
68
+ run_options: effective_run_options
69
+ )
70
+ bootstrap_commit = bootstrap_commit_step(project_root, run_options: effective_run_options)
71
+ install_steps.concat(
72
+ execute_orchestration_steps(
73
+ [bootstrap_commit],
74
+ project_root: project_root,
75
+ env: setup_env,
76
+ run_options: effective_run_options,
77
+ command_runner: command_runner
78
+ )
79
+ )
80
+ final_report = final_report.merge(
81
+ install_steps: install_steps,
82
+ install_phase_reports: install_phase_reports(install_steps),
83
+ install_summary: install_step_summary(install_steps)
84
+ )
65
85
  Kettle::Jem.emit_summary_event(Kettle::Jem.event_stream_from_options(effective_run_options), final_report)
66
86
  final_report
67
87
  end
@@ -33,7 +33,7 @@ jobs:
33
33
  persist-credentials: false
34
34
 
35
35
  - name: Check Dependencies' License
36
- uses: apache/skywalking-eyes/dependency@61275cc80d0798a405cb070f7d3a8aaf7cf2c2c1 # v0.8.0
36
+ uses: apache/skywalking-eyes/dependency@a196742f472feaffafea537ce5a2a4c3c53a8de4 # v0.9.0
37
37
  with:
38
38
  config: .licenserc.yaml
39
39
  mode: "{KJ|LICENSE_EYE:MODE}"
@@ -215,6 +215,11 @@ rubyforum:
215
215
  # label - display value used in CI
216
216
  # slug - path-safe value used in gemfile_pattern
217
217
  # requirement - Bundler requirement written to the gemfile
218
+ # default - true for the one generated framework
219
+ # gemfile loaded by the root Gemfile for local
220
+ # `bundle exec kettle-test` commands
221
+ # replaces - direct root Gemfile dependencies replaced by
222
+ # the default framework gemfile
218
223
  # gemfile_pattern — pattern for gemfile paths; {version} is replaced
219
224
  # with each version slug (dots replaced by underscores
220
225
  # when the pattern contains an underscore placeholder).
@@ -225,7 +230,9 @@ rubyforum:
225
230
  # "rails_{version}" → gemfiles/rails_7_0.gemfile
226
231
  # Use this when you need a simple 2D matrix: Ruby × one framework gem/version axis.
227
232
  # For deeper or more complex matrices that are better modeled as Appraisals entries,
228
- # prefer kettle-jem-appraisals instead.
233
+ # prefer the kettle-jem-appraisals plugin instead. Its appraisal_matrix config
234
+ # controls generated Appraisals and CI strategy; pair it with test_bundle below
235
+ # when the root local Gemfile needs a stable framework or harness.
229
236
  #
230
237
  workflows:
231
238
  # Default command used by generated test workflows.
@@ -247,6 +254,35 @@ workflows:
247
254
  # requirement: ">= 8.0"
248
255
  # gemfile_pattern: "ar-{version}.x"
249
256
 
257
+ # Appraisal matrices are owned by the kettle-jem-appraisals plugin. It uses
258
+ # appraisal_matrix.mode, freshness_ttl, exec_cmd, appraisal_gemfiles,
259
+ # standard_appraisal_role, and gems.tier1 / gems.tier2 to generate the full
260
+ # Appraisals and CI matrix. It does not implicitly select the root local bundle;
261
+ # configure test_bundle below for that purpose.
262
+
263
+ # Default local test bundle.
264
+ # The root Gemfile is used by local bundle commands and is separate from
265
+ # Appraisals and CI, which use their own generated Gemfiles. Declare the
266
+ # project-specific test stack here instead of preserving it with freeze markers.
267
+ #
268
+ # gemfiles accepts either a path string or a mapping. `replaces` removes direct
269
+ # root Gemfile declarations that are supplied by the modular fragment.
270
+ # gems adds a direct declaration when a modular fragment is not warranted.
271
+ #
272
+ # test_bundle:
273
+ # gemfiles:
274
+ # - path: gemfiles/rails_7_2.gemfile
275
+ # replaces:
276
+ # - combustion
277
+ # - actionmailer
278
+ # - railties
279
+ # gems:
280
+ # - name: activerecord
281
+ # requirement: "~> 7.2"
282
+ # - name: debug
283
+ # requirement: "~> 1.11"
284
+ # require: false
285
+
250
286
  # Project-level third-party integrations.
251
287
  # Disabling an integration removes its upload/check action, suppresses its
252
288
  # README badges, skips templating its packaged config/workflow, and cleans up
@@ -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.13") # ruby >= {KJ|MIN_TEST_RUBY}
121
+ spec.add_development_dependency("kettle-dev", "~> 3.0", ">= 3.0.17") # 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
@@ -133,8 +133,8 @@ Gem::Specification.new do |spec|
133
133
  # Loads version files in anonymous namespaces for coverage without constant redefinition warnings.
134
134
  spec.add_development_dependency("anonymous_loader", "~> 0.1", ">= 0.1.3") # ruby >= 2.2.0
135
135
  spec.add_development_dependency("appraisal2", "~> 3.2", ">= 3.2.2") # ruby >= 1.8.7, for testing against multiple versions of dependencies
136
- spec.add_development_dependency("kettle-test", "~> 2.0", ">= 2.0.20") # ruby >= {KJ|MIN_TEST_RUBY}
137
- spec.add_development_dependency("turbo_tests2", "~> 3.2", ">= 3.2.6") # ruby >= 2.4.0, default kettle-test runner
136
+ spec.add_development_dependency("kettle-test", "~> 2.0", ">= 2.0.21") # ruby >= {KJ|MIN_TEST_RUBY}
137
+ spec.add_development_dependency("turbo_tests2", "~> 3.2", ">= 3.2.7") # ruby >= 2.4.0, default kettle-test runner
138
138
 
139
139
  # Releasing
140
140
  spec.add_development_dependency("ruby-progressbar", "~> 1.13") # ruby >= 0
@@ -7,7 +7,7 @@
7
7
  if ENV.fetch("KETTLE_DEV_DEV", "false").casecmp("false").zero?
8
8
  # Coverage (remote/released)
9
9
  platform :mri do
10
- gem "kettle-soup-cover", "~> 3.0", ">= 3.0.9", require: false
10
+ gem "kettle-soup-cover", "~> 3.0", ">= 3.0.10", require: false
11
11
  end
12
12
  else
13
13
  eval_gemfile "coverage_local.gemfile"
@@ -23,7 +23,7 @@ end
23
23
 
24
24
  if kettle_remote
25
25
  # Template/plugin checks for released installs.
26
- gem "kettle-drift", "~> 1.0", ">= 1.0.12", require: false
26
+ gem "kettle-drift", "~> 1.0", ">= 1.0.13", require: false
27
27
  end
28
28
 
29
29
  # Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies.
@@ -6,7 +6,7 @@ shimmed_gem_path = ENV["KETTLE_JEM_SHIMMED_GEM_PATH"].to_s
6
6
  gem "{KJ|SHIMMED_GEM_NAME}", path: shimmed_gem_path unless shimmed_gem_path.empty?
7
7
 
8
8
  # Local workspace dependency wiring for templating_local.gemfile overrides.
9
- gem "nomono", "~> 1.1", ">= 1.1.4", require: false # ruby >= 3.2.0
9
+ gem "nomono", "~> 1.1", ">= 1.1.5", require: false # ruby >= 3.2.0
10
10
 
11
11
  # Templating (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
12
12
  eval_gemfile "gemfiles/modular/templating.gemfile" if ENV.fetch("K_JEM_TEMPLATING", "false").casecmp("true").zero?
@@ -30,13 +30,13 @@ 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.13") # ruby >= {KJ|MIN_TEST_RUBY}
33
+ spec.add_development_dependency("kettle-dev", "~> 3.0", ">= 3.0.17") # ruby >= {KJ|MIN_TEST_RUBY}
34
34
 
35
35
  # Tasks
36
36
  spec.add_development_dependency "rake", "~> 13.0"
37
37
 
38
38
  # Testing
39
- spec.add_development_dependency("kettle-test", "~> 2.0", ">= 2.0.20") # ruby >= {KJ|MIN_TEST_RUBY}
39
+ spec.add_development_dependency("kettle-test", "~> 2.0", ">= 2.0.21") # ruby >= {KJ|MIN_TEST_RUBY}
40
40
  spec.add_development_dependency "rspec", "~> 3.12"
41
41
 
42
42
  # Releasing
@@ -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.8"
8
+ VERSION = "7.1.11"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location