kettle-jem 7.0.0 → 7.1.3

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 (202) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +1505 -0
  4. data/LICENSE.md +13 -0
  5. data/README.md +794 -0
  6. data/exe/kettle-jem +20 -0
  7. data/lib/kettle/jem/cli.rb +334 -0
  8. data/lib/kettle/jem/license_txt_migrator.rb +33 -0
  9. data/lib/kettle/jem/rakelib/install.rake +10 -0
  10. data/lib/kettle/jem/rakelib/prepare.rake +10 -0
  11. data/lib/kettle/jem/rakelib/selftest.rake +10 -0
  12. data/lib/kettle/jem/rakelib/template.rake +10 -0
  13. data/lib/kettle/jem/tasks/install_task.rb +2178 -0
  14. data/lib/kettle/jem/tasks/prepare_task.rb +274 -0
  15. data/lib/kettle/jem/tasks/self_test_task.rb +256 -0
  16. data/lib/kettle/jem/tasks/template_task.rb +124 -0
  17. data/lib/kettle/jem/tasks.rb +6 -0
  18. data/lib/kettle/jem/templates/.aiignore.example +19 -0
  19. data/lib/kettle/jem/templates/.config/mise/env.sh +26 -0
  20. data/lib/kettle/jem/templates/.devcontainer/apt-install/devcontainer-feature.json.example +9 -0
  21. data/lib/kettle/jem/templates/.devcontainer/apt-install/install.sh.example +19 -0
  22. data/lib/kettle/jem/templates/.devcontainer/devcontainer.json.example +27 -0
  23. data/lib/kettle/jem/templates/.devcontainer/scripts/setup-tree-sitter.sh.example +210 -0
  24. data/lib/kettle/jem/templates/.env.local.example +67 -0
  25. data/lib/kettle/jem/templates/.envrc.example +4 -0
  26. data/lib/kettle/jem/templates/.envrc.no-osc.example +4 -0
  27. data/lib/kettle/jem/templates/.gemrc.example +1 -0
  28. data/lib/kettle/jem/templates/.git-hooks/commit-msg.example +60 -0
  29. data/lib/kettle/jem/templates/.git-hooks/commit-subjects-goalie.txt.example +8 -0
  30. data/lib/kettle/jem/templates/.git-hooks/footer-template.erb.txt.example +16 -0
  31. data/lib/kettle/jem/templates/.git-hooks/prepare-commit-msg.example +9 -0
  32. data/lib/kettle/jem/templates/.github/.codecov.yml.example +14 -0
  33. data/lib/kettle/jem/templates/.github/FUNDING.yml.example +10 -0
  34. data/lib/kettle/jem/templates/.github/FUNDING.yml.no-osc.example +10 -0
  35. data/lib/kettle/jem/templates/.github/copilot_instructions.md.example +1 -0
  36. data/lib/kettle/jem/templates/.github/dependabot.yml.example +13 -0
  37. data/lib/kettle/jem/templates/.github/workflows/auto-assign.yml.example +21 -0
  38. data/lib/kettle/jem/templates/.github/workflows/coverage.yml.example +102 -0
  39. data/lib/kettle/jem/templates/.github/workflows/current.yml.example +86 -0
  40. data/lib/kettle/jem/templates/.github/workflows/dep-heads.yml.example +249 -0
  41. data/lib/kettle/jem/templates/.github/workflows/dependency-review.yml.example +22 -0
  42. data/lib/kettle/jem/templates/.github/workflows/discord-notifier.yml.example +39 -0
  43. data/lib/kettle/jem/templates/.github/workflows/framework-ci.yml.example +81 -0
  44. data/lib/kettle/jem/templates/.github/workflows/heads.yml.example +212 -0
  45. data/lib/kettle/jem/templates/.github/workflows/jruby-10.0.yml.example +91 -0
  46. data/lib/kettle/jem/templates/.github/workflows/jruby-9.1.yml.example +90 -0
  47. data/lib/kettle/jem/templates/.github/workflows/jruby-9.2.yml.example +95 -0
  48. data/lib/kettle/jem/templates/.github/workflows/jruby-9.3.yml.example +95 -0
  49. data/lib/kettle/jem/templates/.github/workflows/jruby-9.4.yml.example +95 -0
  50. data/lib/kettle/jem/templates/.github/workflows/jruby.yml.example +91 -0
  51. data/lib/kettle/jem/templates/.github/workflows/license-eye.yml.example +43 -0
  52. data/lib/kettle/jem/templates/.github/workflows/locked_deps.yml.example +89 -0
  53. data/lib/kettle/jem/templates/.github/workflows/opencollective.yml.example +44 -0
  54. data/lib/kettle/jem/templates/.github/workflows/ruby-2.3.yml.example +80 -0
  55. data/lib/kettle/jem/templates/.github/workflows/ruby-2.4.yml.example +84 -0
  56. data/lib/kettle/jem/templates/.github/workflows/ruby-2.5.yml.example +84 -0
  57. data/lib/kettle/jem/templates/.github/workflows/ruby-2.6.yml.example +84 -0
  58. data/lib/kettle/jem/templates/.github/workflows/ruby-2.7.yml.example +84 -0
  59. data/lib/kettle/jem/templates/.github/workflows/ruby-3.0.yml.example +85 -0
  60. data/lib/kettle/jem/templates/.github/workflows/ruby-3.1.yml.example +83 -0
  61. data/lib/kettle/jem/templates/.github/workflows/ruby-3.2.yml.example +80 -0
  62. data/lib/kettle/jem/templates/.github/workflows/ruby-3.3.yml.example +80 -0
  63. data/lib/kettle/jem/templates/.github/workflows/ruby-3.4.yml.example +80 -0
  64. data/lib/kettle/jem/templates/.github/workflows/style.yml.example +78 -0
  65. data/lib/kettle/jem/templates/.github/workflows/templating.yml.example +86 -0
  66. data/lib/kettle/jem/templates/.github/workflows/truffle.yml.example +91 -0
  67. data/lib/kettle/jem/templates/.github/workflows/truffleruby-22.3.yml.example +92 -0
  68. data/lib/kettle/jem/templates/.github/workflows/truffleruby-23.0.yml.example +92 -0
  69. data/lib/kettle/jem/templates/.github/workflows/truffleruby-23.1.yml.example +78 -0
  70. data/lib/kettle/jem/templates/.github/workflows/truffleruby-24.2.yml.example +91 -0
  71. data/lib/kettle/jem/templates/.github/workflows/truffleruby-25.0.yml.example +96 -0
  72. data/lib/kettle/jem/templates/.github/workflows/truffleruby-33.0.yml.example +91 -0
  73. data/lib/kettle/jem/templates/.github/workflows/unlocked_deps.yml.example +93 -0
  74. data/lib/kettle/jem/templates/.gitignore.example +53 -0
  75. data/lib/kettle/jem/templates/.gitlab-ci.yml.example +134 -0
  76. data/lib/kettle/jem/templates/.idea/.gitignore.example +44 -0
  77. data/lib/kettle/jem/templates/.licenserc.yaml.example +8 -0
  78. data/lib/kettle/jem/templates/.opencollective.yml.example +3 -0
  79. data/lib/kettle/jem/templates/.qlty/qlty.toml.example +79 -0
  80. data/lib/kettle/jem/templates/.rspec.example +10 -0
  81. data/lib/kettle/jem/templates/.rubocop.example +1 -0
  82. data/lib/kettle/jem/templates/.rubocop.yml.example +47 -0
  83. data/lib/kettle/jem/templates/.rubocop_rspec.yml.example +55 -0
  84. data/lib/kettle/jem/templates/.simplecov.example +18 -0
  85. data/lib/kettle/jem/templates/.structuredmerge/git-drivers.toml.example +86 -0
  86. data/lib/kettle/jem/templates/.structuredmerge/kettle-jem.yml.example +519 -0
  87. data/lib/kettle/jem/templates/.yard-lint.yml.example +54 -0
  88. data/lib/kettle/jem/templates/.yardignore.example +13 -0
  89. data/lib/kettle/jem/templates/.yardopts.example +14 -0
  90. data/lib/kettle/jem/templates/AGENTS.md.example +283 -0
  91. data/lib/kettle/jem/templates/AGPL-3.0-only.md.example +235 -0
  92. data/lib/kettle/jem/templates/Appraisal.root.gemfile.example +26 -0
  93. data/lib/kettle/jem/templates/Appraisals.example +150 -0
  94. data/lib/kettle/jem/templates/Big-Time-Public-License.md.example +99 -0
  95. data/lib/kettle/jem/templates/CHANGELOG.md.example +33 -0
  96. data/lib/kettle/jem/templates/CHANGELOG.transfer.md +109 -0
  97. data/lib/kettle/jem/templates/CITATION.cff.example +20 -0
  98. data/lib/kettle/jem/templates/CODE_OF_CONDUCT.md.example +134 -0
  99. data/lib/kettle/jem/templates/CONTRIBUTING.md.example +292 -0
  100. data/lib/kettle/jem/templates/FUNDING.md.example +74 -0
  101. data/lib/kettle/jem/templates/FUNDING.md.no-osc.example +63 -0
  102. data/lib/kettle/jem/templates/Gemfile.example +52 -0
  103. data/lib/kettle/jem/templates/IRP.md.example +34 -0
  104. data/lib/kettle/jem/templates/LICENSE.md.example +3 -0
  105. data/lib/kettle/jem/templates/MIT.md.example +21 -0
  106. data/lib/kettle/jem/templates/PolyForm-Noncommercial-1.0.0.md.example +131 -0
  107. data/lib/kettle/jem/templates/PolyForm-Small-Business-1.0.0.md.example +121 -0
  108. data/lib/kettle/jem/templates/README.md.example +544 -0
  109. data/lib/kettle/jem/templates/REEK +0 -0
  110. data/lib/kettle/jem/templates/RUBOCOP.md.example +78 -0
  111. data/lib/kettle/jem/templates/Rakefile.example +163 -0
  112. data/lib/kettle/jem/templates/SECURITY.md.example +21 -0
  113. data/lib/kettle/jem/templates/bin/setup.example +36 -0
  114. data/lib/kettle/jem/templates/certs/pboling.pem.example +27 -0
  115. data/lib/kettle/jem/templates/gem.gemspec.example +161 -0
  116. data/lib/kettle/jem/templates/gemfiles/modular/benchmark/r4/v0.5.gemfile.example +2 -0
  117. data/lib/kettle/jem/templates/gemfiles/modular/benchmark/vHEAD.gemfile.example +2 -0
  118. data/lib/kettle/jem/templates/gemfiles/modular/cgi/r4/v0.5.gemfile.example +1 -0
  119. data/lib/kettle/jem/templates/gemfiles/modular/cgi/vHEAD.gemfile.example +1 -0
  120. data/lib/kettle/jem/templates/gemfiles/modular/changelog.gemfile.example +6 -0
  121. data/lib/kettle/jem/templates/gemfiles/modular/coverage.gemfile.example +14 -0
  122. data/lib/kettle/jem/templates/gemfiles/modular/coverage_local.gemfile.example +34 -0
  123. data/lib/kettle/jem/templates/gemfiles/modular/debug.gemfile.example +22 -0
  124. data/lib/kettle/jem/templates/gemfiles/modular/documentation.gemfile.example +24 -0
  125. data/lib/kettle/jem/templates/gemfiles/modular/documentation_local.gemfile.example +20 -0
  126. data/lib/kettle/jem/templates/gemfiles/modular/erb/r2/v3.0.gemfile.example +1 -0
  127. data/lib/kettle/jem/templates/gemfiles/modular/erb/r2.3/default.gemfile.example +6 -0
  128. data/lib/kettle/jem/templates/gemfiles/modular/erb/r2.6/v2.2.gemfile.example +3 -0
  129. data/lib/kettle/jem/templates/gemfiles/modular/erb/r3/v5.0.gemfile.example +1 -0
  130. data/lib/kettle/jem/templates/gemfiles/modular/erb/r3.1/v4.0.gemfile.example +2 -0
  131. data/lib/kettle/jem/templates/gemfiles/modular/erb/r4/v5.0.gemfile.example +1 -0
  132. data/lib/kettle/jem/templates/gemfiles/modular/erb/vHEAD.gemfile.example +2 -0
  133. data/lib/kettle/jem/templates/gemfiles/modular/json/truffleruby_22_3.gemfile.example +6 -0
  134. data/lib/kettle/jem/templates/gemfiles/modular/json/truffleruby_23_0.gemfile.example +6 -0
  135. data/lib/kettle/jem/templates/gemfiles/modular/json/truffleruby_23_1.gemfile.example +6 -0
  136. data/lib/kettle/jem/templates/gemfiles/modular/mutex_m/r2/v0.3.gemfile.example +2 -0
  137. data/lib/kettle/jem/templates/gemfiles/modular/mutex_m/r2.4/v0.1.gemfile.example +3 -0
  138. data/lib/kettle/jem/templates/gemfiles/modular/mutex_m/r3/v0.3.gemfile.example +2 -0
  139. data/lib/kettle/jem/templates/gemfiles/modular/mutex_m/r4/v0.3.gemfile.example +2 -0
  140. data/lib/kettle/jem/templates/gemfiles/modular/mutex_m/vHEAD.gemfile.example +2 -0
  141. data/lib/kettle/jem/templates/gemfiles/modular/optional.gemfile.example +16 -0
  142. data/lib/kettle/jem/templates/gemfiles/modular/recording/r2.3/recording.gemfile.example +16 -0
  143. data/lib/kettle/jem/templates/gemfiles/modular/recording/r2.4/recording.gemfile.example +18 -0
  144. data/lib/kettle/jem/templates/gemfiles/modular/recording/r2.5/recording.gemfile.example +16 -0
  145. data/lib/kettle/jem/templates/gemfiles/modular/recording/r3/recording.gemfile.example +16 -0
  146. data/lib/kettle/jem/templates/gemfiles/modular/recording/r4/recording.gemfile.example +16 -0
  147. data/lib/kettle/jem/templates/gemfiles/modular/recording/vHEAD.gemfile.example +2 -0
  148. data/lib/kettle/jem/templates/gemfiles/modular/rspec.gemfile.example +4 -0
  149. data/lib/kettle/jem/templates/gemfiles/modular/runtime_heads.gemfile.example +14 -0
  150. data/lib/kettle/jem/templates/gemfiles/modular/shunted.gemfile.example +21 -0
  151. data/lib/kettle/jem/templates/gemfiles/modular/stringio/r2/v3.0.gemfile.example +5 -0
  152. data/lib/kettle/jem/templates/gemfiles/modular/stringio/r2.4/v0.0.2.gemfile.example +4 -0
  153. data/lib/kettle/jem/templates/gemfiles/modular/stringio/r3/v3.0.gemfile.example +5 -0
  154. data/lib/kettle/jem/templates/gemfiles/modular/stringio/r4/v3.0.gemfile.example +5 -0
  155. data/lib/kettle/jem/templates/gemfiles/modular/stringio/vHEAD.gemfile.example +2 -0
  156. data/lib/kettle/jem/templates/gemfiles/modular/style.gemfile.example +33 -0
  157. data/lib/kettle/jem/templates/gemfiles/modular/style_local.gemfile.example +26 -0
  158. data/lib/kettle/jem/templates/gemfiles/modular/templating.gemfile.example +34 -0
  159. data/lib/kettle/jem/templates/gemfiles/modular/templating_local.gemfile.example +73 -0
  160. data/lib/kettle/jem/templates/gemfiles/modular/webrick/r4/v1.9.gemfile.example +1 -0
  161. data/lib/kettle/jem/templates/gemfiles/modular/webrick/vHEAD.gemfile.example +1 -0
  162. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs/r2/libs.gemfile.example +3 -0
  163. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs/r2.3/libs.gemfile.example +3 -0
  164. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs/r2.4/libs.gemfile.example +3 -0
  165. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs/r2.6/libs.gemfile.example +3 -0
  166. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs/r3/libs.gemfile.example +3 -0
  167. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs/r3.1/libs.gemfile.example +5 -0
  168. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs/r4/libs.gemfile.example +6 -0
  169. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs/vHEAD.gemfile.example +6 -0
  170. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs.gemfile.example +12 -0
  171. data/lib/kettle/jem/templates/lib/gem/version.rb.example +1 -0
  172. data/lib/kettle/jem/templates/lib/gem/version_gem.rb.example +1 -0
  173. data/lib/kettle/jem/templates/mise.toml.example +25 -0
  174. data/lib/kettle/jem/templates/mise.toml.no-osc.example +25 -0
  175. data/lib/kettle/jem/templates/parsers.toml.example +19 -0
  176. data/lib/kettle/jem/templates/readme/partials/basic_usage.md.example +28 -0
  177. data/lib/kettle/jem/templates/readme/partials/configuration.md.example +112 -0
  178. data/lib/kettle/jem/templates/readme/partials/synopsis.md.example +3 -0
  179. data/lib/kettle/jem/templates/shim/.github/workflows/current.yml.example +40 -0
  180. data/lib/kettle/jem/templates/shim/.rspec.example +5 -0
  181. data/lib/kettle/jem/templates/shim/.structuredmerge/kettle-jem.yml.example +28 -0
  182. data/lib/kettle/jem/templates/shim/CHANGELOG.md.example +9 -0
  183. data/lib/kettle/jem/templates/shim/Gemfile.example +14 -0
  184. data/lib/kettle/jem/templates/shim/README.md.example +25 -0
  185. data/lib/kettle/jem/templates/shim/Rakefile.example +8 -0
  186. data/lib/kettle/jem/templates/shim/gem.gemspec.example +45 -0
  187. data/lib/kettle/jem/templates/shim/lib/compat_require.rb.example +3 -0
  188. data/lib/kettle/jem/templates/shim/lib/entrypoint.rb.example +3 -0
  189. data/lib/kettle/jem/templates/shim/lib/version.rb.example +1 -0
  190. data/lib/kettle/jem/templates/shim/spec/shim_spec.rb.example +15 -0
  191. data/lib/kettle/jem/templates/shim/spec/spec_helper.rb.example +23 -0
  192. data/lib/kettle/jem/templates/sig/gem.rbs.example +1 -0
  193. data/lib/kettle/jem/templates/spec/README.md.example +28 -0
  194. data/lib/kettle/jem/templates/spec/spec_helper.rb.example +39 -0
  195. data/lib/kettle/jem/version.rb +5 -3
  196. data/lib/kettle/jem/version_gem.rb +8 -0
  197. data/lib/kettle/jem.rb +18540 -1517
  198. data/lib/kettle-jem.rb +2 -1
  199. data/sig/kettle/jem.rbs +8 -0
  200. data.tar.gz.sig +0 -0
  201. metadata +870 -32
  202. metadata.gz.sig +0 -0
@@ -0,0 +1,16 @@
1
+ # HTTP recording for deterministic specs
2
+ # It seems that somehow just having a newer version of appraisal installed breaks
3
+ # Ruby 2.3 and 2.4 even if their bundle specifies an older version,
4
+ # and as a result it can only be a dependency in the appraisals.
5
+ # Putting it here in recording.gemfile will satisfy the rubies that can load latest vcr.
6
+ # | An error occurred while loading spec_helper.
7
+ # | Failure/Error: require "vcr"
8
+ # |
9
+ # | NoMethodError:
10
+ # | undefined method `delete_prefix' for "CONTENT_LENGTH":String
11
+ # | # ./spec/config/vcr.rb:3:in `require'
12
+ # | # ./spec/config/vcr.rb:3:in `<top (required)>'
13
+ # | # ./spec/spec_helper.rb:8:in `require_relative'
14
+ # | # ./spec/spec_helper.rb:8:in `<top (required)>'
15
+ gem "vcr", "< 6" # 6.0.0 appears to have been released accidentally without changing required_ruby_version in the gemspec.
16
+ gem "webmock", "~> 3.0" # Last version to support ruby >= 2.3
@@ -0,0 +1,18 @@
1
+ # HTTP recording for deterministic specs
2
+ # It seems that somehow just having a newer version of appraisal installed breaks
3
+ # Ruby 2.3 and 2.4 even if their bundle specifies an older version,
4
+ # and as a result it can only be a dependency in the appraisals.
5
+ # Putting it here in recording.gemfile will satisfy the rubies that can load latest vcr.
6
+ # | An error occurred while loading spec_helper.
7
+ # | Failure/Error: require "vcr"
8
+ # |
9
+ # | NoMethodError:
10
+ # | undefined method `delete_prefix' for "CONTENT_LENGTH":String
11
+ # | # ./spec/config/vcr.rb:3:in `require'
12
+ # | # ./spec/config/vcr.rb:3:in `<top (required)>'
13
+ # | # ./spec/spec_helper.rb:8:in `require_relative'
14
+ # | # ./spec/spec_helper.rb:8:in `<top (required)>'
15
+ gem "vcr", "< 4"
16
+ gem "webmock", ">= 3"
17
+
18
+ # For now turning off Ruby 2.4 testing.
@@ -0,0 +1,16 @@
1
+ # HTTP recording for deterministic specs
2
+ # It seems that somehow just having a newer version of appraisal installed breaks
3
+ # Ruby 2.3 and 2.4 even if their bundle specifies an older version,
4
+ # and as a result it can only be a dependency in the appraisals.
5
+ # Putting it here in recording.gemfile will satisfy the rubies that can load latest vcr.
6
+ # | An error occurred while loading spec_helper.
7
+ # | Failure/Error: require "vcr"
8
+ # |
9
+ # | NoMethodError:
10
+ # | undefined method `delete_prefix' for "CONTENT_LENGTH":String
11
+ # | # ./spec/config/vcr.rb:3:in `require'
12
+ # | # ./spec/config/vcr.rb:3:in `<top (required)>'
13
+ # | # ./spec/spec_helper.rb:8:in `require_relative'
14
+ # | # ./spec/spec_helper.rb:8:in `<top (required)>'
15
+ gem "vcr", ">= 6"
16
+ gem "webmock", ">= 3"
@@ -0,0 +1,16 @@
1
+ # HTTP recording for deterministic specs
2
+ # It seems that somehow just having a newer version of appraisal installed breaks
3
+ # Ruby 2.3 and 2.4 even if their bundle specifies an older version,
4
+ # and as a result it can only be a dependency in the appraisals.
5
+ # Putting it here in recording.gemfile will satisfy the rubies that can load latest vcr.
6
+ # | An error occurred while loading spec_helper.
7
+ # | Failure/Error: require "vcr"
8
+ # |
9
+ # | NoMethodError:
10
+ # | undefined method `delete_prefix' for "CONTENT_LENGTH":String
11
+ # | # ./spec/config/vcr.rb:3:in `require'
12
+ # | # ./spec/config/vcr.rb:3:in `<top (required)>'
13
+ # | # ./spec/spec_helper.rb:8:in `require_relative'
14
+ # | # ./spec/spec_helper.rb:8:in `<top (required)>'
15
+ gem "vcr", ">= 6"
16
+ gem "webmock", ">= 3"
@@ -0,0 +1,16 @@
1
+ # HTTP recording for deterministic specs
2
+ # It seems that somehow just having a newer version of appraisal installed breaks
3
+ # Ruby 2.3 and 2.4 even if their bundle specifies an older version,
4
+ # and as a result it can only be a dependency in the appraisals.
5
+ # Putting it here in recording.gemfile will satisfy the rubies that can load latest vcr.
6
+ # | An error occurred while loading spec_helper.
7
+ # | Failure/Error: require "vcr"
8
+ # |
9
+ # | NoMethodError:
10
+ # | undefined method `delete_prefix' for "CONTENT_LENGTH":String
11
+ # | # ./spec/config/vcr.rb:3:in `require'
12
+ # | # ./spec/config/vcr.rb:3:in `<top (required)>'
13
+ # | # ./spec/spec_helper.rb:8:in `require_relative'
14
+ # | # ./spec/spec_helper.rb:8:in `<top (required)>'
15
+ gem "vcr", ">= 6"
16
+ gem "webmock", ">= 3"
@@ -0,0 +1,2 @@
1
+ gem "vcr", github: "vcr/vcr", branch: "master"
2
+ gem "webmock", github: "bblimke/webmock", branch: "master"
@@ -0,0 +1,4 @@
1
+ gem "rspec_junit_formatter",
2
+ github: "pboling/rspec_junit_formatter",
3
+ branch: "main",
4
+ ref: "9e6bcaaedd49477b62878ed568dc4ada5cc7cb5e"
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ # To retain during kettle-jem templating:
4
+ # {KJ|FREEZE_TOKEN}:freeze
5
+ # # ... your code
6
+ # {KJ|FREEZE_TOKEN}:unfreeze
7
+ #
8
+
9
+ # Test against HEAD of runtime dependencies so we can proactively file bugs
10
+
11
+ # Ruby >= 2.2
12
+ gem "version_gem", github: "ruby-oauth/version_gem", branch: "main"
13
+
14
+ eval_gemfile("x_std_libs/vHEAD.gemfile")
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ # To retain during kettle-jem templating:
4
+ # kettle-jem:freeze
5
+ # # ... your code
6
+ # kettle-jem:unfreeze
7
+ #
8
+
9
+ # Shunted development dependencies.
10
+ #
11
+ # These gems have been moved here from the gemspec because they require a
12
+ # newer Ruby than the project's effective test/development floor:
13
+ #
14
+ # effective_test_floor = max(gemspec required_ruby_version, ruby.test_minimum)
15
+ #
16
+ # They are loaded via the Appraisals "unlocked" group so that CI can still
17
+ # test them on the Rubies they support, while older-Ruby CI jobs simply
18
+ # skip this gemfile.
19
+ #
20
+ # This file is regenerated by `rake template` — add custom gems inside a
21
+ # kettle-jem:freeze / kettle-jem:unfreeze block to preserve them.
@@ -0,0 +1,5 @@
1
+ # !!WARNING!!
2
+ # NOT SEMVER
3
+ # Version 3.0.7 dropped support for Ruby <= 2.7
4
+ # Version 3.0.0 dropped support for Ruby <= 2.4
5
+ gem "stringio", ">= 3.0"
@@ -0,0 +1,4 @@
1
+ # !!WARNING!!
2
+ # NOT SEMVER
3
+ # Last version to support Ruby <= 2.5
4
+ gem "stringio", ">= 0.0.2"
@@ -0,0 +1,5 @@
1
+ # !!WARNING!!
2
+ # NOT SEMVER
3
+ # Version 3.0.7 dropped support for Ruby <= 2.7
4
+ # Version 3.0.0 dropped support for Ruby <= 2.4
5
+ gem "stringio", ">= 3.0"
@@ -0,0 +1,5 @@
1
+ # !!WARNING!!
2
+ # NOT SEMVER
3
+ # Version 3.0.7 dropped support for Ruby <= 2.7
4
+ # Version 3.0.0 dropped support for Ruby <= 2.4
5
+ gem "stringio", ">= 3.0"
@@ -0,0 +1,2 @@
1
+ # Ruby >= 2.5 (dependency of omniauth)
2
+ gem "stringio", github: "ruby/stringio", branch: "master"
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ # To retain during kettle-jem templating:
4
+ # {KJ|FREEZE_TOKEN}:freeze
5
+ # # ... your code
6
+ # {KJ|FREEZE_TOKEN}:unfreeze
7
+ #
8
+
9
+ # Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
10
+ # rules for the configured Ruby floor independently from task dependency floors.
11
+
12
+ gem "reek", "~> 6.5", ">= 6.5.0"
13
+
14
+ platform :mri do
15
+ gem "appraisal2-rubocop", "~> 1.0", ">= 1.0.1", require: false
16
+ gem "rubocop-gradual", "~> 0.4", ">= 0.4.0"
17
+ gem "rubocop-minitest", "~> 0.40", ">= 0.40.0"
18
+ gem "rubocop-on-rbs", "~> 2.0", ">= 2.0.0" # ruby >= 3.2.0
19
+ # 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"
24
+
25
+ if ENV.fetch("RUBOCOP_LTS_LOCAL", "false").casecmp("false").zero?
26
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
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")
29
+ gem "{KJ|RUBOCOP_RUBY_GEM}", {KJ|RUBOCOP_RUBY_CONSTRAINT} unless declared_gems.include?("{KJ|RUBOCOP_RUBY_GEM}")
30
+ else
31
+ eval_gemfile("style_local.gemfile")
32
+ end
33
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
4
+ # rules for the configured Ruby floor independently from task dependency floors.
5
+
6
+ # Local path overrides for development.
7
+ # Loaded by the associated non-local gemfile when RUBOCOP_LTS_LOCAL != "false".
8
+
9
+ {KJ|LOCAL_GEMFILE_NOMONO_BOOTSTRAP}
10
+
11
+ local_gems = %w[rubocop-lts rubocop-lts-rspec {KJ|RUBOCOP_RUBY_GEM} standard-rubocop-lts]
12
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
13
+ local_gems_to_eval = local_gems - %w[{KJ|PACKAGE_NAME}] - declared_gems
14
+
15
+ # export VENDORED_GEMS=rubocop-lts,rubocop-lts-rspec,{KJ|RUBOCOP_RUBY_GEM},standard-rubocop-lts
16
+ platform :mri do
17
+ eval_nomono_gems(
18
+ gems: local_gems_to_eval,
19
+ prefix: "RUBOCOP_LTS",
20
+ path_env: "RUBOCOP_LTS_LOCAL",
21
+ vendored_gems_env: "VENDORED_GEMS",
22
+ vendor_gem_dir_env: "VENDOR_GEM_DIR",
23
+ debug_env: "RUBOCOP_LTS_DEBUG",
24
+ root: ["src", "rubocop-lts"]
25
+ )
26
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ structuredmerge_remote = ENV.fetch("STRUCTUREDMERGE_DEV", "false").casecmp("false").zero?
4
+ kettle_remote = ENV.fetch("KETTLE_DEV_DEV", "false").casecmp("false").zero?
5
+
6
+ tslp_dev = ENV.fetch("TSLP_DEV", nil).to_s
7
+ tslp_dev = nil if tslp_dev.empty? || %w[false 0 no off].include?(tslp_dev.downcase)
8
+ if tslp_dev.to_s.empty?
9
+ if structuredmerge_remote
10
+ # Parser dependencies for released installs.
11
+ gem "tree_sitter_language_pack", "~> 1.14", ">= 1.14.3"
12
+ end
13
+ else
14
+ # Explicit local override for unreleased TSLP debugging.
15
+ gem "tree_sitter_language_pack", path: tslp_dev
16
+ end
17
+
18
+ if structuredmerge_remote
19
+ # Merge recipes for released installs.
20
+ gem "kettle-jem", ">= 7.0"
21
+ end
22
+
23
+ if kettle_remote
24
+ # Template/plugin checks for released installs.
25
+ gem "kettle-drift", "~> 1.0", ">= 1.0.12", require: false
26
+ end
27
+
28
+ # Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies.
29
+ # When false (default / CI), released kettle-jem brings merge gems and parser dependencies.
30
+ # Local path overrides bring the same dependencies from sibling gemspecs.
31
+ #
32
+ # Set KETTLE_DEV_DEV=/path/to/my for local development with Kettle plugin gems.
33
+ # When false (default / CI), released Kettle plugin gems are used.
34
+ eval_gemfile "templating_local.gemfile" unless structuredmerge_remote && kettle_remote
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Local path overrides for templating development.
4
+ # Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_DEV_DEV
5
+ # is not "false".
6
+
7
+ {KJ|LOCAL_GEMFILE_NOMONO_BOOTSTRAP}
8
+
9
+ structuredmerge_local_gems = %w[
10
+ tree_haver
11
+ ast-merge
12
+ ast-merge-git
13
+ ast-template
14
+ bash-merge
15
+ binary-merge
16
+ commonmarker-merge
17
+ citrus-toml-merge
18
+ dotenv-merge
19
+ go-merge
20
+ html-merge
21
+ json-merge
22
+ kettle-jem
23
+ kramdown-merge
24
+ markdown-merge
25
+ markly-merge
26
+ parslet-toml-merge
27
+ plain-merge
28
+ prism-merge
29
+ psych-merge
30
+ rbs-merge
31
+ ruby-merge
32
+ rust-merge
33
+ smorg-rb
34
+ typescript-merge
35
+ toml-merge
36
+ yaml-merge
37
+ zip-merge
38
+ ast-crispr
39
+ ast-crispr-markdown-markly
40
+ ast-crispr-ruby-prism
41
+ ]
42
+
43
+ kettle_dev_local_gems = %w[
44
+ {KJ|KETTLE_DEV_LOCAL_GEMS}
45
+ ]
46
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
47
+ 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
+
50
+ platform :mri do
51
+ if ENV.fetch("STRUCTUREDMERGE_DEV", "false").casecmp("false") != 0
52
+ eval_nomono_gems(
53
+ gems: structuredmerge_local_gems_to_eval,
54
+ prefix: "STRUCTUREDMERGE",
55
+ path_env: "STRUCTUREDMERGE_DEV",
56
+ vendored_gems_env: "VENDORED_GEMS",
57
+ vendor_gem_dir_env: "VENDOR_GEM_DIR",
58
+ debug_env: "STRUCTUREDMERGE_DEBUG"
59
+ )
60
+ end
61
+
62
+ if ENV.fetch("KETTLE_DEV_DEV", "false").casecmp("false") != 0
63
+ eval_nomono_gems(
64
+ gems: kettle_dev_local_gems_to_eval,
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
+ )
72
+ end
73
+ end
@@ -0,0 +1 @@
1
+ gem "webrick", "~> 1.9"
@@ -0,0 +1 @@
1
+ gem "webrick", ">= 1.9"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../../erb/r2/v3.0.gemfile"
2
+ eval_gemfile "../../mutex_m/r2/v0.3.gemfile"
3
+ eval_gemfile "../../stringio/r2/v3.0.gemfile"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../../erb/r2.3/default.gemfile"
2
+ eval_gemfile "../../mutex_m/r2.4/v0.1.gemfile"
3
+ eval_gemfile "../../stringio/r2.4/v0.0.2.gemfile"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../../erb/r2.6/v2.2.gemfile"
2
+ eval_gemfile "../../mutex_m/r2.4/v0.1.gemfile"
3
+ eval_gemfile "../../stringio/r2.4/v0.0.2.gemfile"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../../erb/r2.6/v2.2.gemfile"
2
+ eval_gemfile "../../mutex_m/r2/v0.3.gemfile"
3
+ eval_gemfile "../../stringio/r2/v3.0.gemfile"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../../erb/r3/v5.0.gemfile"
2
+ eval_gemfile "../../mutex_m/r3/v0.3.gemfile"
3
+ eval_gemfile "../../stringio/r3/v3.0.gemfile"
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ eval_gemfile "../../erb/r3.1/v4.0.gemfile"
4
+ eval_gemfile "../../mutex_m/r3/v0.3.gemfile"
5
+ eval_gemfile "../../stringio/r3/v3.0.gemfile"
@@ -0,0 +1,6 @@
1
+ eval_gemfile "../../erb/r4/v5.0.gemfile"
2
+ eval_gemfile "../../mutex_m/r4/v0.3.gemfile"
3
+ eval_gemfile "../../stringio/r4/v3.0.gemfile"
4
+ eval_gemfile "../../benchmark/r4/v0.5.gemfile"
5
+ eval_gemfile "../../cgi/r4/v0.5.gemfile"
6
+ eval_gemfile "../../webrick/r4/v1.9.gemfile"
@@ -0,0 +1,6 @@
1
+ eval_gemfile "../erb/vHEAD.gemfile"
2
+ eval_gemfile "../mutex_m/vHEAD.gemfile"
3
+ eval_gemfile "../stringio/vHEAD.gemfile"
4
+ eval_gemfile "../benchmark/vHEAD.gemfile"
5
+ eval_gemfile "../cgi/vHEAD.gemfile"
6
+ eval_gemfile "../webrick/vHEAD.gemfile"
@@ -0,0 +1,12 @@
1
+ ### Std Lib Extracted Gems
2
+ ruby_version = Gem::Version.new(RUBY_VERSION)
3
+
4
+ if ruby_version >= Gem::Version.new("4.0")
5
+ eval_gemfile "x_std_libs/r4/libs.gemfile"
6
+ elsif ruby_version >= Gem::Version.new("3.2")
7
+ eval_gemfile "x_std_libs/r3/libs.gemfile"
8
+ elsif ruby_version >= Gem::Version.new("3.1")
9
+ eval_gemfile "x_std_libs/r3.1/libs.gemfile"
10
+ else
11
+ eval_gemfile "x_std_libs/r2/libs.gemfile"
12
+ end
@@ -0,0 +1 @@
1
+ {KJ|VERSION_GEM:VERSION_RB}
@@ -0,0 +1 @@
1
+ {KJ|VERSION_GEM:VERSION_GEM_RB}
@@ -0,0 +1,25 @@
1
+ # Shared development environment for this gem.
2
+ # Local overrides belong in .env.local (loaded via dotenvy through mise).
3
+
4
+ [env]
5
+ FLOSS_CFG_FUND_DEBUG = "false"
6
+ FLOSS_CFG_FUND_LOGFILE = "tmp/log/debug.log"
7
+ FUNDING_ORG = "{KJ|OPENCOLLECTIVE_ORG}"
8
+ KETTLE_DEV_DEBUG = "false"
9
+ KETTLE_TEST_SILENT = "true"
10
+ K_SOUP_COV_COMMAND_NAME = "Test Coverage"
11
+ K_SOUP_COV_DO = "true"
12
+ K_SOUP_COV_FORMATTERS = "html,xml,rcov,lcov,json,tty"
13
+ K_SOUP_COV_MIN_BRANCH = "76"
14
+ K_SOUP_COV_MIN_HARD = "true"
15
+ K_SOUP_COV_MIN_LINE = "92"
16
+ K_SOUP_COV_MULTI_FORMATTERS = "true"
17
+ K_SOUP_COV_OPEN_BIN = ""
18
+ MAX_ROWS = "1"
19
+ OPENCOLLECTIVE_HANDLE = "{KJ|OPENCOLLECTIVE_ORG}"
20
+ _.file = { path = ".env.local", redact = true }
21
+ _.path = ["exe", "bin"]
22
+ _.source = ".config/mise/env.sh"
23
+
24
+ [tools]
25
+ ruby = "4.0.6"
@@ -0,0 +1,25 @@
1
+ # Shared development environment for this gem.
2
+ # Local overrides belong in .env.local (loaded via dotenvy through mise).
3
+
4
+ [env]
5
+ FLOSS_CFG_FUND_DEBUG = "false"
6
+ FLOSS_CFG_FUND_LOGFILE = "tmp/log/debug.log"
7
+ FUNDING_ORG = "false"
8
+ KETTLE_DEV_DEBUG = "false"
9
+ KETTLE_TEST_SILENT = "true"
10
+ K_SOUP_COV_COMMAND_NAME = "Test Coverage"
11
+ K_SOUP_COV_DO = "true"
12
+ K_SOUP_COV_FORMATTERS = "html,xml,rcov,lcov,json,tty"
13
+ K_SOUP_COV_MIN_BRANCH = "76"
14
+ K_SOUP_COV_MIN_HARD = "true"
15
+ K_SOUP_COV_MIN_LINE = "92"
16
+ K_SOUP_COV_MULTI_FORMATTERS = "true"
17
+ K_SOUP_COV_OPEN_BIN = ""
18
+ MAX_ROWS = "1"
19
+ OPENCOLLECTIVE_HANDLE = "false"
20
+ _.file = { path = ".env.local", redact = true }
21
+ _.path = ["exe", "bin"]
22
+ _.source = ".config/mise/env.sh"
23
+
24
+ [tools]
25
+ ruby = "4.0.6"
@@ -0,0 +1,19 @@
1
+ # tsdl configuration — tree-sitter grammar versions
2
+ # https://github.com/stackmystack/tsdl
3
+ #
4
+ # Run: tsdl build --out-dir /usr/local/lib
5
+ # Or let .devcontainer/scripts/setup-tree-sitter.sh handle it.
6
+
7
+ out-dir = "/usr/local/lib"
8
+
9
+ [parsers]
10
+ json = "v0.24.8"
11
+ bash = "v0.25.1"
12
+
13
+ [parsers.toml]
14
+ ref = "v0.7.0"
15
+ from = "https://github.com/tree-sitter-grammars/tree-sitter-toml"
16
+
17
+ [parsers.rbs]
18
+ ref = "v0.2.2"
19
+ from = "https://github.com/joker1007/tree-sitter-rbs"
@@ -0,0 +1,28 @@
1
+ ```console
2
+ kettle-jem
3
+ K_JEM_TEMPLATING=true kettle-jem install
4
+ K_JEM_TEMPLATING=true kettle-jem selftest
5
+ ```
6
+
7
+ `kettle-jem` setup creates or updates `.structuredmerge/kettle-jem.yml`,
8
+ installs template support, and runs the template workflow. `kettle-jem install`
9
+ reapplies full template updates and regenerates local finishing artifacts such
10
+ as binstubs.
11
+ Use `kettle-jem template --only PATH` for scoped file updates. `kettle-jem
12
+ selftest` checks template drift in a temporary workspace. The `kettle:jem:*`
13
+ rake tasks are internal targets used by the executable after it prepares the
14
+ templating environment.
15
+
16
+ Useful runtime controls:
17
+
18
+ | Setting | Use |
19
+ |---|---|
20
+ | `KETTLE_JEM_VERBOSE=true` | Show detailed template output. |
21
+ | `PARSE_ERROR_MODE=fail` | Fail when an AST/parser-backed merge cannot run. |
22
+ | `PARSE_ERROR_MODE=skip` | Preserve the destination when parsing is unavailable. |
23
+ | `FAILURE_MODE=error` | Raise on merge failure. |
24
+ | `FAILURE_MODE=rescue` | Warn and keep unmerged content on merge failure. |
25
+ | `only=glob,glob` | Limit the template run to matching paths. |
26
+ | `include=glob,glob` | Add matching paths to the run. |
27
+ | `hook_templates=l|g|n` | Install local hooks, global hooks, or no hooks. |
28
+ | `git_drivers=semantic-diff|builtin-diff|global|include-file|check|undo|none` | Install, verify, remove, or skip StructuredMerge Git diff driver setup. |
@@ -0,0 +1,112 @@
1
+ `kettle-jem` reads `.structuredmerge/kettle-jem.yml` from the project root. When
2
+ only the legacy root `.kettle-jem.yml` exists, `kettle-jem install` migrates it
3
+ to the structured config directory. The config controls template sources, README
4
+ section partials, token values, merge defaults, per-file strategies, workflow
5
+ generation, Git driver setup, and plugin loading.
6
+
7
+ <details markdown="1">
8
+ <summary>Configuration shape</summary>
9
+
10
+ ```yaml
11
+ project_emoji: "💎"
12
+ engines:
13
+ - ruby
14
+ ruby:
15
+ test_minimum: "2.4"
16
+ licenses:
17
+ - MIT
18
+ templates:
19
+ root: packaged
20
+ apply: true
21
+ entries:
22
+ - README.md
23
+ readme:
24
+ section_partials:
25
+ synopsis: readme/partials/synopsis.md
26
+ configuration: readme/partials/configuration.md
27
+ basic_usage: readme/partials/basic_usage.md
28
+ defaults:
29
+ preference: template
30
+ add_template_only_nodes: true
31
+ freeze_token: kettle-jem
32
+ patterns:
33
+ - path: "certs/**"
34
+ strategy: raw_copy
35
+ files:
36
+ Rakefile:
37
+ strategy: merge
38
+ preference: destination
39
+ git_drivers: semantic-diff
40
+ plugins:
41
+ - kettle-drift
42
+ ```
43
+
44
+ </details>
45
+
46
+ <details markdown="1">
47
+ <summary>Strategies, tokens, and freeze blocks</summary>
48
+
49
+ Template strategies:
50
+
51
+ | Strategy | Behavior |
52
+ |---|---|
53
+ | `merge` | Resolve tokens, then merge template and destination using the selected recipe. |
54
+ | `accept_template` | Resolve tokens and write the template result. |
55
+ | `keep_destination` | Leave the destination file untouched. |
56
+ | `raw_copy` | Copy bytes exactly, with no token resolution or merge. |
57
+
58
+ `raw_copy` exists for bootstrap files that may be needed before the full
59
+ templating stack is available. Because it bypasses normal template processing,
60
+ do not use it for templates that contain `{KJ\|...}` tokens or require
61
+ StructuredMerge normalization.
62
+
63
+ Merge entries may set `preference`, `add_template_only_nodes`, `freeze_token`,
64
+ `file_type`, and `recipe`. `files` entries match exact paths. `patterns`
65
+ entries are glob-based and the first match wins.
66
+
67
+ Tokens use `{KJ\|TOKEN}` syntax. Environment values win over
68
+ `.structuredmerge/kettle-jem.yml`, and config values win over safe
69
+ gemspec-derived defaults.
70
+
71
+ Freeze blocks use the configured token, defaulting to `kettle-jem`:
72
+
73
+ ```ruby
74
+ # kettle-jem:freeze
75
+ gem "local-only", path: "../local-only"
76
+ # kettle-jem:unfreeze
77
+ ```
78
+
79
+ Content inside a freeze block is preserved from the destination.
80
+
81
+ </details>
82
+
83
+ <details markdown="1">
84
+ <summary>Merge engines and workflows</summary>
85
+
86
+ `kettle-jem` routes files through recipes selected by target path and
87
+ `file_type`. Current Ruby recipes cover README metadata/style, changelog
88
+ normalization, managed text blocks, GitHub funding, GitHub Actions workflows,
89
+ obsolete workflow cleanup, Open Collective cleanup, selected template source
90
+ application, and Rakefile scaffold cleanup.
91
+
92
+ `workflows.preset: framework` generates a Ruby x framework-version CI matrix.
93
+ `workflows.exec_cmd` sets the default command for generated test workflows
94
+ (default: `kettle-test`; ENV override: `KJ_EXEC_CMD`).
95
+ `ruby.test_minimum` sets the lowest MRI Ruby version used for generated CI
96
+ workflows and Appraisals. It defaults to `2.4`, and the effective generated
97
+ floor is never lower than the gemspec `required_ruby_version`.
98
+ `workflows.coverage` enables coverage workflow generation. Existing custom
99
+ workflows can receive pinned-action snippets without replacing the whole file.
100
+
101
+ `git_drivers` defaults to `semantic-diff` during `kettle-jem install`, writing
102
+ managed `.gitattributes` entries plus repo-local `diff.smorg-*` command config.
103
+ Use `builtin-diff` to keep Git's built-in language drivers, `global` to register
104
+ driver commands once per user, `include-file` to write `.git/smorg/config`, and
105
+ `none` to opt out. `check` verifies the local setup, and `undo` removes managed
106
+ driver entries.
107
+
108
+ `plugins` lists extension gems. A plugin is required by gem name, resolved to a
109
+ constant, and called through `register_kettle_jem_plugin(registrar)`. The
110
+ registrar supports `before_phase`, `after_phase`, and `on_phase` hooks.
111
+
112
+ </details>
@@ -0,0 +1,3 @@
1
+ `{KJ|NAMESPACE}` is the Ruby implementation of the Kettle template tool. It
2
+ keeps Ruby gems aligned with a shared template while preserving package-owned
3
+ README sections and project-specific files.