kettle-jem 7.1.28 → 7.1.29

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.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +183 -1
  4. data/README.md +18 -2
  5. data/lib/kettle/jem/maintenance_changelog.rb +1 -1
  6. data/lib/kettle/jem/relative_paths.rb +61 -0
  7. data/lib/kettle/jem/tasks/install_task.rb +9 -5
  8. data/lib/kettle/jem/tasks/prepare_task.rb +29 -10
  9. data/lib/kettle/jem/tasks/template_task.rb +18 -3
  10. data/lib/kettle/jem/templates/.git-hooks/prepare-commit-msg.example +3 -4
  11. data/lib/kettle/jem/templates/.github/workflows/coverage.yml.example +1 -1
  12. data/lib/kettle/jem/templates/.github/workflows/current.yml.example +8 -13
  13. data/lib/kettle/jem/templates/.github/workflows/dep-heads.yml.example +5 -5
  14. data/lib/kettle/jem/templates/.github/workflows/framework-ci.yml.example +1 -1
  15. data/lib/kettle/jem/templates/.github/workflows/heads.yml.example +3 -63
  16. data/lib/kettle/jem/templates/.github/workflows/jruby-10.0.yml.example +2 -2
  17. data/lib/kettle/jem/templates/.github/workflows/jruby-9.1.yml.example +2 -2
  18. data/lib/kettle/jem/templates/.github/workflows/jruby-9.2.yml.example +2 -2
  19. data/lib/kettle/jem/templates/.github/workflows/jruby-9.3.yml.example +2 -2
  20. data/lib/kettle/jem/templates/.github/workflows/jruby-9.4.yml.example +2 -2
  21. data/lib/kettle/jem/templates/.github/workflows/jruby.yml.example +2 -2
  22. data/lib/kettle/jem/templates/.github/workflows/license-eye.yml.example +22 -1
  23. data/lib/kettle/jem/templates/.github/workflows/locked_deps.yml.example +1 -1
  24. data/lib/kettle/jem/templates/.github/workflows/opencollective.yml.example +1 -1
  25. data/lib/kettle/jem/templates/.github/workflows/ruby-2.3.yml.example +1 -1
  26. data/lib/kettle/jem/templates/.github/workflows/ruby-2.4.yml.example +1 -1
  27. data/lib/kettle/jem/templates/.github/workflows/ruby-2.5.yml.example +1 -1
  28. data/lib/kettle/jem/templates/.github/workflows/ruby-2.6.yml.example +1 -1
  29. data/lib/kettle/jem/templates/.github/workflows/ruby-2.7.yml.example +1 -1
  30. data/lib/kettle/jem/templates/.github/workflows/ruby-3.0.yml.example +1 -1
  31. data/lib/kettle/jem/templates/.github/workflows/ruby-3.1.yml.example +1 -1
  32. data/lib/kettle/jem/templates/.github/workflows/ruby-3.2.yml.example +1 -1
  33. data/lib/kettle/jem/templates/.github/workflows/ruby-3.3.yml.example +1 -1
  34. data/lib/kettle/jem/templates/.github/workflows/ruby-3.4.yml.example +1 -1
  35. data/lib/kettle/jem/templates/.github/workflows/style.yml.example +1 -1
  36. data/lib/kettle/jem/templates/.github/workflows/templating.yml.example +14 -1
  37. data/lib/kettle/jem/templates/.github/workflows/truffle.yml.example +2 -2
  38. data/lib/kettle/jem/templates/.github/workflows/truffleruby-22.3.yml.example +2 -2
  39. data/lib/kettle/jem/templates/.github/workflows/truffleruby-23.1.yml.example +2 -2
  40. data/lib/kettle/jem/templates/.github/workflows/truffleruby-24.2.yml.example +2 -2
  41. data/lib/kettle/jem/templates/.github/workflows/truffleruby-25.0.yml.example +2 -2
  42. data/lib/kettle/jem/templates/.github/workflows/truffleruby-33.0.yml.example +2 -2
  43. data/lib/kettle/jem/templates/.github/workflows/unlocked_deps.yml.example +1 -1
  44. data/lib/kettle/jem/templates/.structuredmerge/kettle-jem.yml.example +19 -0
  45. data/lib/kettle/jem/templates/Appraisal.root.gemfile.example +2 -1
  46. data/lib/kettle/jem/templates/Appraisals.example +4 -1
  47. data/lib/kettle/jem/templates/CHANGELOG.transfer.md +6 -0
  48. data/lib/kettle/jem/templates/Gemfile.example +12 -3
  49. data/lib/kettle/jem/templates/README.md.example +5 -5
  50. data/lib/kettle/jem/templates/Rakefile.example +2 -0
  51. data/lib/kettle/jem/templates/bin/turbo_tests2.example +14 -0
  52. data/lib/kettle/jem/templates/gem.gemspec.example +6 -6
  53. data/lib/kettle/jem/templates/gemfiles/modular/coverage.gemfile.example +1 -1
  54. data/lib/kettle/jem/templates/gemfiles/modular/coverage_local.gemfile.example +10 -12
  55. data/lib/kettle/jem/templates/gemfiles/modular/documentation.gemfile.example +5 -5
  56. data/lib/kettle/jem/templates/gemfiles/modular/ostruct/r4/v0.6.gemfile.example +2 -0
  57. data/lib/kettle/jem/templates/gemfiles/modular/style.gemfile.example +15 -8
  58. data/lib/kettle/jem/templates/gemfiles/modular/style_local.gemfile.example +7 -1
  59. data/lib/kettle/jem/templates/gemfiles/modular/templating.gemfile.example +3 -2
  60. data/lib/kettle/jem/templates/gemfiles/modular/templating_local.gemfile.example +18 -19
  61. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs/r4/libs.gemfile.example +1 -0
  62. data/lib/kettle/jem/templates/mise.toml.example +1 -1
  63. data/lib/kettle/jem/templates/mise.toml.no-osc.example +1 -1
  64. data/lib/kettle/jem/templates/readme/partials/configuration.md.example +4 -3
  65. data/lib/kettle/jem/templates/shim/Gemfile.example +9 -3
  66. data/lib/kettle/jem/templates/shim/gem.gemspec.example +3 -3
  67. data/lib/kettle/jem/version.rb +1 -1
  68. data/lib/kettle/jem.rb +1156 -705
  69. data.tar.gz.sig +0 -0
  70. metadata +28 -67
  71. metadata.gz.sig +0 -0
  72. data/lib/kettle/jem/templates/.github/workflows/truffleruby-23.0.yml.example +0 -92
  73. data/lib/kettle/jem/templates/gemfiles/modular/json/truffleruby_23_0.gemfile.example +0 -6
@@ -8,7 +8,6 @@
8
8
 
9
9
  source "https://gem.coop"
10
10
 
11
- git_source(:github) { |repo_name| "git@github.com:#{repo_name}.git" }
12
11
  git_source(:codeberg) { |repo_name| "https://codeberg.org/#{repo_name}" }
13
12
  git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" }
14
13
 
@@ -25,8 +24,18 @@ gemspec
25
24
 
26
25
  {KJ|MAIN_GEMFILE_DIRECT_SIBLING_BLOCK}
27
26
 
28
- # Templating (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
29
- eval_gemfile "gemfiles/modular/templating.gemfile" if ENV.fetch("K_JEM_TEMPLATING", "false").casecmp("true").zero?
27
+ # Templating and the StructuredMerge family share this modular Gemfile.
28
+ # kettle-jem needs StructuredMerge to template, and kettle-changelog needs it at
29
+ # runtime (ast-crispr-markdown-markly -> markdown-merge -> tree_haver), so the
30
+ # test, lint, and release bundles resolve the family too. While the family is
31
+ # only partially released, registry copies pin the last published version exactly
32
+ # and cannot be satisfied alongside a local lockstep version, so a partial local
33
+ # wiring fails version solving for every command in the bundle.
34
+ #
35
+ # (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
36
+ eval_gemfile "gemfiles/modular/templating.gemfile" if
37
+ ENV.fetch("K_JEM_TEMPLATING", "false").casecmp("true").zero? ||
38
+ ENV.fetch("STRUCTUREDMERGE_DEV", "false").casecmp("false") != 0
30
39
 
31
40
  # Debugging
32
41
  eval_gemfile "gemfiles/modular/debug.gemfile"
@@ -35,7 +35,7 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
35
35
  | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
36
36
  |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
37
37
  | Works with JRuby | [![JRuby 9.1 Compat][💎jruby-9.1i]][🚎jruby-9.1-wf] [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎jruby-9.2-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎jruby-9.3-wf] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎jruby-9.4-wf] [![JRuby 10.0 Compat][💎jruby-10.0i]][🚎jruby-10.0-wf] [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf] |
38
- | Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-wf] [![Truffle Ruby 23.0 Compat][💎truby-23.0i]][🚎truby-23.0-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎truby-23.1-wf] <br/> [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby 33.0 Compat][💎truby-33.0i]][🚎truby-33.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf] [![Truffle Ruby HEAD Compat][💎truby-headi]][🚎3-hd-wf] |
38
+ | Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎truby-23.1-wf] <br/> [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby 33.0 Compat][💎truby-33.0i]][🚎truby-33.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf] |
39
39
  | Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf] |
40
40
  | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎ruby-3.0-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎ruby-3.1-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎ruby-3.2-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎ruby-3.3-wf] [![Ruby 3.4 Compat][💎ruby-3.4i]][🚎ruby-3.4-wf] |
41
41
  | Works with MRI Ruby 2 | ![Ruby 2.0 Compat][💎ruby-2.0i] ![Ruby 2.1 Compat][💎ruby-2.1i] ![Ruby 2.2 Compat][💎ruby-2.2i] ![Ruby 2.3 Compat][💎ruby-2.3i] <br/> [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎ruby-2.4-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎ruby-2.5-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎ruby-2.6-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎ruby-2.7-wf] |
@@ -64,6 +64,10 @@ The _amazing_ test matrix is powered by the kettle-dev stack.
64
64
 
65
65
  {KJ|README:FAMILY_INTRO_BACKEND_MATRIX}
66
66
 
67
+ ### Runtime and Platform Support
68
+
69
+ {KJ|README:PLATFORM_SUPPORT_TABLE}
70
+
67
71
  ### Federated DVCS
68
72
 
69
73
  <details markdown="1">
@@ -441,8 +445,6 @@ Thanks for RTFM. ☺️
441
445
  [🚎jruby-10.0-wfi]: {KJ|README:GH_REPOSITORY_URL}/actions/workflows/jruby-10.0.yml/badge.svg
442
446
  [🚎truby-22.3-wf]: {KJ|README:GH_REPOSITORY_URL}/actions/workflows/truffleruby-22.3.yml
443
447
  [🚎truby-22.3-wfi]: {KJ|README:GH_REPOSITORY_URL}/actions/workflows/truffleruby-22.3.yml/badge.svg
444
- [🚎truby-23.0-wf]: {KJ|README:GH_REPOSITORY_URL}/actions/workflows/truffleruby-23.0.yml
445
- [🚎truby-23.0-wfi]: {KJ|README:GH_REPOSITORY_URL}/actions/workflows/truffleruby-23.0.yml/badge.svg
446
448
  [🚎truby-23.1-wf]: {KJ|README:GH_REPOSITORY_URL}/actions/workflows/truffleruby-23.1.yml
447
449
  [🚎truby-23.1-wfi]: {KJ|README:GH_REPOSITORY_URL}/actions/workflows/truffleruby-23.1.yml/badge.svg
448
450
  [🚎truby-24.2-wf]: {KJ|README:GH_REPOSITORY_URL}/actions/workflows/truffleruby-24.2.yml
@@ -490,13 +492,11 @@ Thanks for RTFM. ☺️
490
492
  [💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
491
493
  [💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
492
494
  [💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
493
- [💎truby-23.0i]: https://img.shields.io/badge/Truffle_Ruby-23.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
494
495
  [💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
495
496
  [💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
496
497
  [💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
497
498
  [💎truby-33.0i]: https://img.shields.io/badge/Truffle_Ruby-33.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
498
499
  [💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
499
- [💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
500
500
  [💎jruby-9.1i]: https://img.shields.io/badge/JRuby-9.1-FBE742?style=for-the-badge&logo=ruby&logoColor=red
501
501
  [💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2-FBE742?style=for-the-badge&logo=ruby&logoColor=red
502
502
  [💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge&logo=ruby&logoColor=red
@@ -64,6 +64,8 @@ task :default do
64
64
  puts "Default task complete."
65
65
  end
66
66
 
67
+ {KJ|RAKE:TOP_LEVEL_DOCS_TASK}
68
+
67
69
  # simplecov:disable
68
70
  ### MONOREPO FAMILY TASKS
69
71
  if Dir.exist?(File.join(__dir__, "gems"))
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file is generated by Kettle Jem.
6
+ # It loads turbo_tests2 from the active bundle for Windows CI.
7
+ #
8
+
9
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
10
+
11
+ require "rubygems"
12
+ require "bundler/setup"
13
+
14
+ load Gem.bin_path("turbo_tests2", "turbo_tests2")
@@ -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.1", ">= 3.1.0") # ruby >= {KJ|MIN_TEST_RUBY}
121
+ spec.add_development_dependency("kettle-dev", "~> 3.1", ">= 3.1.11") # 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
@@ -132,13 +132,13 @@ Gem::Specification.new do |spec|
132
132
  # Testing
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
- spec.add_development_dependency("appraisal2", "~> 3.2", ">= 3.2.3") # ruby >= 1.8.7, for testing against multiple versions of dependencies
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
135
+ spec.add_development_dependency("appraisal2", "~> 3.2", ">= 3.2.5") # ruby >= 1.8.7, for testing against multiple versions of dependencies
136
+ spec.add_development_dependency("kettle-test", "~> 2.0", ">= 2.0.24") # ruby >= {KJ|MIN_TEST_RUBY}
137
+ spec.add_development_dependency("turbo_tests2", "~> 3.2", ">= 3.2.14") # 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
141
- spec.add_development_dependency("stone_checksums", "~> 1.0", ">= 1.0.8") # ruby >= 2.2.0
141
+ spec.add_development_dependency("stone_checksums", "~> 1.0", ">= 1.0.9") # ruby >= 2.2.0
142
142
 
143
143
  # Git integration (optional)
144
144
  # The 'git' gem is optional; {KJ|GEM_NAME} falls back to shelling out to `git` if it is not present.
@@ -150,7 +150,7 @@ Gem::Specification.new do |spec|
150
150
  # This means we have no choice but to use the erb that shipped with Ruby 2.3
151
151
  # /opt/hostedtoolcache/Ruby/2.3.8/x64/lib/ruby/gems/2.3.0/gems/erb-2.2.2/lib/erb.rb:670:in `prepare_trim_mode': undefined method `match?' for "-":String (NoMethodError)
152
152
  # spec.add_development_dependency("erb", ">= 2.2") # ruby >= 2.3.0, not SemVer, old rubies get dropped in a patch.
153
- spec.add_development_dependency("gitmoji-regex", "~> 2.0", ">= 2.0.12") # ruby >= 2.4
153
+ spec.add_development_dependency("gitmoji-regex", "~> 2.0", ">= 2.0.15") # ruby >= 2.4
154
154
 
155
155
  # HTTP recording for deterministic specs
156
156
  # In Ruby 3.5 (HEAD) the CGI library has been pared down, so we also need to depend on gem "cgi" for ruby@head
@@ -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.10", require: false
10
+ gem "kettle-soup-cover", "~> 3.0", ">= 3.0.12", require: false
11
11
  end
12
12
  else
13
13
  eval_gemfile "coverage_local.gemfile"
@@ -6,6 +6,14 @@
6
6
  {KJ|LOCAL_GEMFILE_NOMONO_BOOTSTRAP}
7
7
 
8
8
  local_gems = %w[{KJ|KETTLE_DEV_LOCAL_GEMS}]
9
+ kettle_dev_nomono_options = {
10
+ prefix: "KETTLE_DEV",
11
+ path_env: "KETTLE_DEV_DEV",
12
+ vendored_gems_env: "VENDORED_GEMS",
13
+ vendor_gem_dir_env: "VENDOR_GEM_DIR",
14
+ debug_env: "KETTLE_DEV_DEBUG",
15
+ root: ["src", "my", "kettle-dev"]
16
+ }
9
17
 
10
18
  # export KETTLE_DEV_DEV=/path/to/my
11
19
  platform :mri do
@@ -14,12 +22,7 @@ platform :mri do
14
22
  kettle_dev_dependency = instance_variable_get(:@dependencies).to_a.find { |dependency| dependency.name == "kettle-dev" }
15
23
  kettle_dev_local_path = nomono_gems(
16
24
  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"]
25
+ **kettle_dev_nomono_options
23
26
  ).fetch("kettle-dev", nil)
24
27
  if kettle_dev_dependency && kettle_dev_local_path
25
28
  instance_variable_get(:@dependencies).delete(kettle_dev_dependency)
@@ -31,12 +34,7 @@ platform :mri do
31
34
 
32
35
  eval_nomono_gems(
33
36
  gems: local_gems_to_eval,
34
- prefix: "KETTLE_DEV",
35
- path_env: "KETTLE_DEV_DEV",
36
- vendored_gems_env: "VENDORED_GEMS",
37
- vendor_gem_dir_env: "VENDOR_GEM_DIR",
38
- debug_env: "KETTLE_DEV_DEBUG",
39
- root: ["src", "my", "kettle-dev"]
37
+ **kettle_dev_nomono_options
40
38
  )
41
39
 
42
40
  if ENV.fetch("GALTZO_FLOSS_DEV", "false").casecmp("false") != 0
@@ -9,16 +9,16 @@
9
9
  # Documentation
10
10
  gem "kramdown", "~> 2.5", ">= 2.5.2", require: false # Ruby >= 2.5
11
11
  gem "kramdown-parser-gfm", "~> 1.1", require: false # Ruby >= 2.3
12
- gem "yaml-converter", "~> 0.2", ">= 0.2.5", require: false # Ruby >= 3.2
12
+ gem "yaml-converter", "~> 0.2", ">= 0.2.7", require: false # Ruby >= 3.2
13
13
  gem "yard", "~> 0.9", ">= 0.9.45", require: false
14
14
  gem "yard-junk", "~> 0.1", ">= 0.1.0", require: false # Ruby >= 3.1
15
- gem "yard-lint", "~> 1.11", ">= 1.11.0", require: false # Ruby >= 3.3
15
+ gem "yard-lint", "~> 1.12", ">= 1.12.0", require: false # Ruby >= 3.3
16
16
  gem "yard-relative_markdown_links", "~> 0.6", require: false
17
17
 
18
18
  if ENV.fetch("GALTZO_FLOSS_DEV", "false").casecmp("false").zero?
19
- gem "yard-fence", "~> 0.9", ">= 0.9.8", require: false # Ruby >= 3.2
20
- gem "yard-timekeeper", "~> 0.2", ">= 0.2.6", require: false
21
- gem "yard-yaml", "~> 0.2", ">= 0.2.5", require: false
19
+ gem "yard-fence", "~> 0.9", ">= 0.9.10", require: false # Ruby >= 3.2
20
+ gem "yard-timekeeper", "~> 0.2", ">= 0.2.9", require: false
21
+ gem "yard-yaml", "~> 0.2", ">= 0.2.6", require: false
22
22
  else
23
23
  eval_gemfile "documentation_local.gemfile"
24
24
  end
@@ -0,0 +1,2 @@
1
+ # Ruby >= 2.5
2
+ gem "ostruct", "~> 0.6"
@@ -9,23 +9,30 @@
9
9
  # Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
10
10
  # rules for the configured Ruby floor independently from task dependency floors.
11
11
 
12
- gem "reek", "~> 6.5", ">= 6.5.0"
12
+ gem "reek", "~> 6.6", ">= 6.6.0"
13
13
 
14
14
  platform :mri do
15
- gem "appraisal2-rubocop", "~> 1.0", ">= 1.0.2", require: false
15
+ gem "appraisal2-rubocop", "~> 1.0", ">= 1.0.4", require: false
16
16
  gem "rubocop-gradual", "~> 0.4", ">= 0.4.0"
17
+ # rubocop-minitest floor held at 0.40: 0.41.0 requires rubocop >= 1.89.0,
18
+ # but standard (~> 1.56) caps rubocop at ~> 1.88.0, making the pair
19
+ # unsatisfiable. This gem is registered in KettleJemDepsFloor::FLOOR_HOLDS,
20
+ # so kettle-jem-deps-floor will not auto-raise it. Remove the hold (and
21
+ # raise the floor) once standard supports rubocop >= 1.89.
17
22
  gem "rubocop-minitest", "~> 0.40", ">= 0.40.0"
18
- gem "rubocop-on-rbs", "~> 2.0", ">= 2.0.0" # ruby >= 3.2.0
23
+ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.3.0")
24
+ gem "rubocop-on-rbs", "~> 2.2", ">= 2.2.0" # ruby >= 3.3.0
25
+ end
19
26
  # gem "rubocop", "~> 1.73", ">= 1.73.2" # constrained by standard
20
- gem "rubocop-packaging",
21
- github: "pboling/rubocop-packaging",
22
- ref: "3539ba858d379740d638566faee9e56b2b854145"
23
- gem "standard", "~> 1.56", ">= 1.56.0"
27
+ gem "standard", "~> 1.57", ">= 1.57.0"
24
28
 
25
29
  if ENV.fetch("RUBOCOP_LTS_DEV", "false").casecmp("false").zero?
30
+ gem "rubocop-packaging",
31
+ github: "pboling/rubocop-packaging",
32
+ ref: "3539ba858d379740d638566faee9e56b2b854145"
26
33
  declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
27
34
  gem "rubocop-lts", {KJ|RUBOCOP_LTS_CONSTRAINT} unless declared_gems.include?("rubocop-lts")
28
- gem "rubocop-lts-rspec", "~> 1.0", ">= 1.0.6" unless declared_gems.include?("rubocop-lts-rspec")
35
+ gem "rubocop-lts-rspec", "~> 1.0", ">= 1.0.7" unless declared_gems.include?("rubocop-lts-rspec")
29
36
  gem "{KJ|RUBOCOP_RUBY_GEM}", {KJ|RUBOCOP_RUBY_CONSTRAINT} unless declared_gems.include?("{KJ|RUBOCOP_RUBY_GEM}")
30
37
  else
31
38
  eval_gemfile("style_local.gemfile")
@@ -12,6 +12,12 @@ local_gems = %w[rubocop-lts rubocop-lts-rspec {KJ|RUBOCOP_RUBY_GEM} standard-rub
12
12
  declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
13
13
  local_gems_to_eval = local_gems - %w[{KJ|PACKAGE_NAME}] - declared_gems
14
14
 
15
+ # The generated RuboCop config loads this plugin in both local and released
16
+ # style modes, so the local bundle must provide it too.
17
+ gem "rubocop-packaging",
18
+ github: "pboling/rubocop-packaging",
19
+ ref: "3539ba858d379740d638566faee9e56b2b854145"
20
+
15
21
  # export VENDORED_GEMS=rubocop-lts,rubocop-lts-rspec,{KJ|RUBOCOP_RUBY_GEM},standard-rubocop-lts
16
22
  platform :mri do
17
23
  eval_nomono_gems(
@@ -21,6 +27,6 @@ platform :mri do
21
27
  vendored_gems_env: "VENDORED_GEMS",
22
28
  vendor_gem_dir_env: "VENDOR_GEM_DIR",
23
29
  debug_env: "RUBOCOP_LTS_DEBUG",
24
- root: ["src", "rubocop-lts"]
30
+ root: ["src", "my", "rubocop-lts"]
25
31
  )
26
32
  end
@@ -17,13 +17,14 @@ if structuredmerge_remote || !tslp_dev.to_s.empty?
17
17
  end
18
18
 
19
19
  if structuredmerge_remote
20
- # Merge recipes for released installs.
20
+ # Keep the released floor when templating with local StructuredMerge paths;
21
+ # kettle-jem-deps-floor advances this requirement from published versions.
21
22
  gem "kettle-jem", {KJ|KETTLE_JEM_DEPENDENCY_ARGUMENTS}
22
23
  end
23
24
 
24
25
  if kettle_remote
25
26
  # Template/plugin checks for released installs.
26
- gem "kettle-drift", "~> 1.0", ">= 1.0.13", require: false
27
+ gem "kettle-drift", "~> 1.0", ">= 1.0.16", require: false
27
28
  end
28
29
 
29
30
  # Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies.
@@ -13,14 +13,12 @@ structuredmerge_local_gems = %w[
13
13
  ast-template
14
14
  bash-merge
15
15
  binary-merge
16
- commonmarker-merge
17
16
  citrus-toml-merge
18
17
  dotenv-merge
19
18
  go-merge
20
19
  html-merge
21
20
  json-merge
22
21
  kettle-jem
23
- kramdown-merge
24
22
  markdown-merge
25
23
  markly-merge
26
24
  parslet-toml-merge
@@ -43,16 +41,27 @@ structuredmerge_local_gems = %w[
43
41
  kettle_dev_local_gems = %w[
44
42
  {KJ|KETTLE_DEV_LOCAL_GEMS}
45
43
  ]
44
+ shared_nomono_options = {
45
+ vendored_gems_env: "VENDORED_GEMS",
46
+ vendor_gem_dir_env: "VENDOR_GEM_DIR"
47
+ }
48
+ kettle_dev_nomono_options = shared_nomono_options.merge(
49
+ prefix: "KETTLE_DEV",
50
+ path_env: "KETTLE_DEV_DEV",
51
+ debug_env: "KETTLE_DEV_DEBUG",
52
+ root: ["src", "my", "kettle-dev"]
53
+ )
54
+ structuredmerge_nomono_options = shared_nomono_options.merge(
55
+ prefix: "STRUCTUREDMERGE",
56
+ path_env: "STRUCTUREDMERGE_DEV",
57
+ debug_env: "STRUCTUREDMERGE_DEBUG"
58
+ )
46
59
  structuredmerge_local_gems_to_eval = structuredmerge_local_gems - %w[{KJ|PACKAGE_NAME}]
47
60
 
48
61
  if ENV.fetch("STRUCTUREDMERGE_DEV", "false").casecmp("false") != 0
49
62
  eval_nomono_gems(
50
63
  gems: structuredmerge_local_gems_to_eval,
51
- prefix: "STRUCTUREDMERGE",
52
- path_env: "STRUCTUREDMERGE_DEV",
53
- vendored_gems_env: "VENDORED_GEMS",
54
- vendor_gem_dir_env: "VENDOR_GEM_DIR",
55
- debug_env: "STRUCTUREDMERGE_DEBUG"
64
+ **structuredmerge_nomono_options
56
65
  )
57
66
  end
58
67
 
@@ -62,12 +71,7 @@ if ENV.fetch("KETTLE_DEV_DEV", "false").casecmp("false") != 0
62
71
  kettle_dev_dependency = instance_variable_get(:@dependencies).to_a.find { |dependency| dependency.name == "kettle-dev" }
63
72
  kettle_dev_local_path = nomono_gems(
64
73
  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"]
74
+ **kettle_dev_nomono_options
71
75
  ).fetch("kettle-dev", nil)
72
76
  if kettle_dev_dependency && kettle_dev_local_path
73
77
  instance_variable_get(:@dependencies).delete(kettle_dev_dependency)
@@ -79,11 +83,6 @@ if ENV.fetch("KETTLE_DEV_DEV", "false").casecmp("false") != 0
79
83
 
80
84
  eval_nomono_gems(
81
85
  gems: kettle_dev_local_gems_to_eval,
82
- prefix: "KETTLE_DEV",
83
- path_env: "KETTLE_DEV_DEV",
84
- vendored_gems_env: "VENDORED_GEMS",
85
- vendor_gem_dir_env: "VENDOR_GEM_DIR",
86
- debug_env: "KETTLE_DEV_DEBUG",
87
- root: ["src", "my", "kettle-dev"]
86
+ **kettle_dev_nomono_options
88
87
  )
89
88
  end
@@ -1,5 +1,6 @@
1
1
  eval_gemfile "../../erb/r4/v5.0.gemfile"
2
2
  eval_gemfile "../../mutex_m/r4/v0.3.gemfile"
3
+ eval_gemfile "../../ostruct/r4/v0.6.gemfile"
3
4
  eval_gemfile "../../stringio/r4/v3.0.gemfile"
4
5
  eval_gemfile "../../benchmark/r4/v0.5.gemfile"
5
6
  eval_gemfile "../../cgi/r4/v0.5.gemfile"
@@ -22,4 +22,4 @@ _.path = ["exe", "bin"]
22
22
  _.source = ".config/mise/env.sh"
23
23
 
24
24
  [tools]
25
- ruby = "4.0.6"
25
+ ruby = "4.0.7"
@@ -22,4 +22,4 @@ _.path = ["exe", "bin"]
22
22
  _.source = ".config/mise/env.sh"
23
23
 
24
24
  [tools]
25
- ruby = "4.0.6"
25
+ ruby = "4.0.7"
@@ -12,7 +12,7 @@ project_emoji: "💎"
12
12
  engines:
13
13
  - ruby
14
14
  ruby:
15
- test_minimum: "2.4"
15
+ test_minimum: "{KJ|DEFAULT_TEST_MINIMUM_RUBY}"
16
16
  licenses:
17
17
  - MIT
18
18
  templates:
@@ -106,8 +106,9 @@ application, and Rakefile scaffold cleanup.
106
106
  `workflows.exec_cmd` sets the default command for generated test workflows
107
107
  (default: `kettle-test`; ENV override: `KJ_EXEC_CMD`).
108
108
  `ruby.test_minimum` sets the lowest MRI Ruby version used for generated CI
109
- workflows and Appraisals. It defaults to `2.4`, and the effective generated
110
- floor is never lower than the gemspec `required_ruby_version`.
109
+ workflows and Appraisals. It defaults to `{KJ|DEFAULT_TEST_MINIMUM_RUBY}`, and
110
+ the effective generated floor is never lower than the gemspec
111
+ `required_ruby_version`.
111
112
  `workflows.coverage` enables coverage workflow generation. Existing custom
112
113
  workflows can receive pinned-action snippets without replacing the whole file.
113
114
 
@@ -6,9 +6,15 @@ 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.5", require: false # ruby >= 3.2.0
9
+ gem "nomono", "~> 1.1", ">= 1.1.7", require: false # ruby >= 3.2.0
10
10
 
11
- # Templating (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
12
- eval_gemfile "gemfiles/modular/templating.gemfile" if ENV.fetch("K_JEM_TEMPLATING", "false").casecmp("true").zero?
11
+ # Templating and the StructuredMerge family share this modular Gemfile.
12
+ # kettle-jem needs StructuredMerge to template, and kettle-changelog needs it at
13
+ # runtime, so the test, lint, and release bundles resolve the family too.
14
+ #
15
+ # (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
16
+ eval_gemfile "gemfiles/modular/templating.gemfile" if
17
+ ENV.fetch("K_JEM_TEMPLATING", "false").casecmp("true").zero? ||
18
+ ENV.fetch("STRUCTUREDMERGE_DEV", "false").casecmp("false") != 0
13
19
 
14
20
  gemspec
@@ -30,16 +30,16 @@ 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.1", ">= 3.1.0") # ruby >= {KJ|MIN_TEST_RUBY}
33
+ spec.add_development_dependency("kettle-dev", "~> 3.1", ">= 3.1.11") # 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.21") # ruby >= {KJ|MIN_TEST_RUBY}
39
+ spec.add_development_dependency("kettle-test", "~> 2.0", ">= 2.0.24") # ruby >= {KJ|MIN_TEST_RUBY}
40
40
  spec.add_development_dependency "rspec", "~> 3.12"
41
41
 
42
42
  # Releasing
43
43
  spec.add_development_dependency("ruby-progressbar", "~> 1.13") # ruby >= 0
44
- spec.add_development_dependency("stone_checksums", "~> 1.0", ">= 1.0.8") # ruby >= 2.2.0
44
+ spec.add_development_dependency("stone_checksums", "~> 1.0", ">= 1.0.9") # ruby >= 2.2.0
45
45
  end
@@ -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.28"
8
+ VERSION = "7.1.29"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location