kettle-jem 7.1.28 → 7.1.30

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 (74) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +220 -1
  4. data/README.md +2 -114
  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/.devcontainer/devcontainer.json.example +1 -1
  11. data/lib/kettle/jem/templates/.git-hooks/prepare-commit-msg.example +3 -4
  12. data/lib/kettle/jem/templates/.github/workflows/coverage.yml.example +24 -2
  13. data/lib/kettle/jem/templates/.github/workflows/current.yml.example +13 -14
  14. data/lib/kettle/jem/templates/.github/workflows/dep-heads.yml.example +8 -5
  15. data/lib/kettle/jem/templates/.github/workflows/framework-ci.yml.example +4 -1
  16. data/lib/kettle/jem/templates/.github/workflows/heads.yml.example +16 -66
  17. data/lib/kettle/jem/templates/.github/workflows/jruby-10.0.yml.example +16 -3
  18. data/lib/kettle/jem/templates/.github/workflows/jruby-9.1.yml.example +16 -3
  19. data/lib/kettle/jem/templates/.github/workflows/jruby-9.2.yml.example +16 -3
  20. data/lib/kettle/jem/templates/.github/workflows/jruby-9.3.yml.example +16 -3
  21. data/lib/kettle/jem/templates/.github/workflows/jruby-9.4.yml.example +16 -3
  22. data/lib/kettle/jem/templates/.github/workflows/jruby.yml.example +16 -3
  23. data/lib/kettle/jem/templates/.github/workflows/license-eye.yml.example +22 -1
  24. data/lib/kettle/jem/templates/.github/workflows/locked_deps.yml.example +2 -1
  25. data/lib/kettle/jem/templates/.github/workflows/opencollective.yml.example +1 -1
  26. data/lib/kettle/jem/templates/.github/workflows/ruby-2.3.yml.example +8 -2
  27. data/lib/kettle/jem/templates/.github/workflows/ruby-2.4.yml.example +8 -2
  28. data/lib/kettle/jem/templates/.github/workflows/ruby-2.5.yml.example +8 -2
  29. data/lib/kettle/jem/templates/.github/workflows/ruby-2.6.yml.example +8 -2
  30. data/lib/kettle/jem/templates/.github/workflows/ruby-2.7.yml.example +8 -2
  31. data/lib/kettle/jem/templates/.github/workflows/ruby-3.0.yml.example +9 -3
  32. data/lib/kettle/jem/templates/.github/workflows/ruby-3.1.yml.example +8 -2
  33. data/lib/kettle/jem/templates/.github/workflows/ruby-3.2.yml.example +8 -2
  34. data/lib/kettle/jem/templates/.github/workflows/ruby-3.3.yml.example +8 -2
  35. data/lib/kettle/jem/templates/.github/workflows/ruby-3.4.yml.example +8 -2
  36. data/lib/kettle/jem/templates/.github/workflows/style.yml.example +5 -2
  37. data/lib/kettle/jem/templates/.github/workflows/templating.yml.example +18 -2
  38. data/lib/kettle/jem/templates/.github/workflows/truffle.yml.example +16 -3
  39. data/lib/kettle/jem/templates/.github/workflows/truffleruby-22.3.yml.example +16 -3
  40. data/lib/kettle/jem/templates/.github/workflows/truffleruby-23.1.yml.example +12 -2
  41. data/lib/kettle/jem/templates/.github/workflows/truffleruby-24.2.yml.example +16 -3
  42. data/lib/kettle/jem/templates/.github/workflows/truffleruby-25.0.yml.example +16 -3
  43. data/lib/kettle/jem/templates/.github/workflows/truffleruby-33.0.yml.example +16 -3
  44. data/lib/kettle/jem/templates/.github/workflows/unlocked_deps.yml.example +6 -2
  45. data/lib/kettle/jem/templates/.structuredmerge/kettle-jem.yml.example +19 -0
  46. data/lib/kettle/jem/templates/Appraisal.root.gemfile.example +2 -1
  47. data/lib/kettle/jem/templates/Appraisals.example +4 -1
  48. data/lib/kettle/jem/templates/CHANGELOG.transfer.md +6 -0
  49. data/lib/kettle/jem/templates/Gemfile.example +12 -3
  50. data/lib/kettle/jem/templates/README.md.example +5 -5
  51. data/lib/kettle/jem/templates/Rakefile.example +2 -0
  52. data/lib/kettle/jem/templates/bin/turbo_tests2.example +14 -0
  53. data/lib/kettle/jem/templates/gem.gemspec.example +6 -6
  54. data/lib/kettle/jem/templates/gemfiles/modular/coverage.gemfile.example +1 -1
  55. data/lib/kettle/jem/templates/gemfiles/modular/coverage_local.gemfile.example +10 -12
  56. data/lib/kettle/jem/templates/gemfiles/modular/documentation.gemfile.example +5 -5
  57. data/lib/kettle/jem/templates/gemfiles/modular/ostruct/r4/v0.6.gemfile.example +2 -0
  58. data/lib/kettle/jem/templates/gemfiles/modular/style.gemfile.example +15 -8
  59. data/lib/kettle/jem/templates/gemfiles/modular/style_local.gemfile.example +7 -1
  60. data/lib/kettle/jem/templates/gemfiles/modular/templating.gemfile.example +3 -2
  61. data/lib/kettle/jem/templates/gemfiles/modular/templating_local.gemfile.example +18 -19
  62. data/lib/kettle/jem/templates/gemfiles/modular/x_std_libs/r4/libs.gemfile.example +1 -0
  63. data/lib/kettle/jem/templates/mise.toml.example +1 -1
  64. data/lib/kettle/jem/templates/mise.toml.no-osc.example +1 -1
  65. data/lib/kettle/jem/templates/readme/partials/configuration.md.example +4 -3
  66. data/lib/kettle/jem/templates/shim/Gemfile.example +9 -3
  67. data/lib/kettle/jem/templates/shim/gem.gemspec.example +3 -3
  68. data/lib/kettle/jem/version.rb +1 -1
  69. data/lib/kettle/jem.rb +1214 -723
  70. data.tar.gz.sig +0 -0
  71. metadata +28 -67
  72. metadata.gz.sig +0 -0
  73. data/lib/kettle/jem/templates/.github/workflows/truffleruby-23.0.yml.example +0 -92
  74. data/lib/kettle/jem/templates/gemfiles/modular/json/truffleruby_23_0.gemfile.example +0 -6
@@ -5,6 +5,15 @@ permissions:
5
5
 
6
6
  env:
7
7
  K_SOUP_COV_DO: false
8
+ # TruffleRuby intermittently stalls the parallel test worker pool; keep
9
+ # this lane serial while maintained runtimes exercise the parallel runner.
10
+ # Two workers: TruffleRuby parallelism is spawn-based like every other
11
+ # engine; serial-only lanes waste CI time and trip the stall watchdog on
12
+ # legitimately long tests.
13
+ TURBO_TESTS2_MAX_PROCESSES: 2
14
+ # Serial lanes can legitimately run one long, silent test; give the stall
15
+ # watchdog a wider berth than the 4.0 default of 900s.
16
+ TURBO_TESTS2_WATCHDOG_SECONDS: 1500
8
17
 
9
18
  on:
10
19
  push:
@@ -27,9 +36,10 @@ concurrency:
27
36
 
28
37
  jobs:
29
38
  test:
30
- if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/') || startsWith(github.head_ref, 'feature/release'))"
39
+ if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/') || startsWith(github.head_ref, 'feature/release') || startsWith(github.event.pull_request.title, 'Release '))"
31
40
  name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
32
41
  runs-on: ubuntu-22.04
42
+ timeout-minutes: 30
33
43
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
34
44
  env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
35
45
  BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/ruby_3_2.gemfile
@@ -54,7 +64,7 @@ jobs:
54
64
 
55
65
  - name: Setup Ruby & RubyGems
56
66
  if: ${{ !env.ACT }}
57
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
67
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
58
68
  with:
59
69
  ruby-version: ${{ matrix.ruby }}
60
70
  rubygems: ${{ matrix.rubygems }}
@@ -5,6 +5,15 @@ permissions:
5
5
 
6
6
  env:
7
7
  K_SOUP_COV_DO: false
8
+ # TruffleRuby intermittently stalls the parallel test worker pool; keep
9
+ # this lane serial while maintained runtimes exercise the parallel runner.
10
+ # Two workers: TruffleRuby parallelism is spawn-based like every other
11
+ # engine; serial-only lanes waste CI time and trip the stall watchdog on
12
+ # legitimately long tests.
13
+ TURBO_TESTS2_MAX_PROCESSES: 2
14
+ # Serial lanes can legitimately run one long, silent test; give the stall
15
+ # watchdog a wider berth than the 4.0 default of 900s.
16
+ TURBO_TESTS2_WATCHDOG_SECONDS: 1500
8
17
 
9
18
  on:
10
19
  push:
@@ -27,9 +36,10 @@ concurrency:
27
36
 
28
37
  jobs:
29
38
  test:
30
- if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/') || startsWith(github.head_ref, 'feature/release'))"
39
+ if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/') || startsWith(github.head_ref, 'feature/release') || startsWith(github.event.pull_request.title, 'Release '))"
31
40
  name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
32
41
  runs-on: ubuntu-22.04
42
+ timeout-minutes: 30
33
43
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
34
44
  env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
35
45
  BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
@@ -53,7 +63,7 @@ jobs:
53
63
 
54
64
  - name: Setup Ruby & RubyGems
55
65
  if: ${{ !env.ACT }}
56
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
66
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
57
67
  with:
58
68
  ruby-version: ${{ matrix.ruby }}
59
69
  rubygems: ${{ matrix.rubygems }}
@@ -74,7 +84,10 @@ jobs:
74
84
  id: bundleAppraisalAttempt2
75
85
  # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
76
86
  if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && !env.ACT }}
77
- run: bundle exec appraisal ${{ matrix.appraisal }} install
87
+ run: |
88
+ rm -f gemfiles/${{ matrix.appraisal }}.gemfile.lock
89
+ rm -rf vendor/bundle "$HOME/.bundle/cache"
90
+ bundle exec appraisal ${{ matrix.appraisal }} install
78
91
 
79
92
  - name: Restore RSpec status log
80
93
  if: "${{!env.ACT}}"
@@ -5,6 +5,15 @@ permissions:
5
5
 
6
6
  env:
7
7
  K_SOUP_COV_DO: false
8
+ # TruffleRuby intermittently stalls the parallel test worker pool; keep
9
+ # this lane serial while maintained runtimes exercise the parallel runner.
10
+ # Two workers: TruffleRuby parallelism is spawn-based like every other
11
+ # engine; serial-only lanes waste CI time and trip the stall watchdog on
12
+ # legitimately long tests.
13
+ TURBO_TESTS2_MAX_PROCESSES: 2
14
+ # Serial lanes can legitimately run one long, silent test; give the stall
15
+ # watchdog a wider berth than the 4.0 default of 900s.
16
+ TURBO_TESTS2_WATCHDOG_SECONDS: 1500
8
17
 
9
18
  on:
10
19
  push:
@@ -27,9 +36,10 @@ concurrency:
27
36
 
28
37
  jobs:
29
38
  test:
30
- if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/') || startsWith(github.head_ref, 'feature/release'))"
39
+ if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/') || startsWith(github.head_ref, 'feature/release') || startsWith(github.event.pull_request.title, 'Release '))"
31
40
  name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
32
41
  runs-on: ubuntu-22.04
42
+ timeout-minutes: 30
33
43
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
34
44
  env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
35
45
  BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
@@ -53,7 +63,7 @@ jobs:
53
63
 
54
64
  - name: Setup Ruby & RubyGems
55
65
  if: ${{ !env.ACT }}
56
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
66
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
57
67
  with:
58
68
  ruby-version: ${{ matrix.ruby }}
59
69
  rubygems: ${{ matrix.rubygems }}
@@ -79,7 +89,10 @@ jobs:
79
89
  id: bundleAppraisalAttempt2
80
90
  # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
81
91
  if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && !env.ACT }}
82
- run: bundle exec appraisal ${{ matrix.appraisal }} install
92
+ run: |
93
+ rm -f gemfiles/${{ matrix.appraisal }}.gemfile.lock
94
+ rm -rf vendor/bundle "$HOME/.bundle/cache"
95
+ bundle exec appraisal ${{ matrix.appraisal }} install
83
96
 
84
97
  - name: Restore RSpec status log
85
98
  if: "${{!env.ACT}}"
@@ -5,6 +5,15 @@ permissions:
5
5
 
6
6
  env:
7
7
  K_SOUP_COV_DO: false
8
+ # TruffleRuby intermittently stalls the parallel test worker pool; keep
9
+ # this lane serial while maintained runtimes exercise the parallel runner.
10
+ # Two workers: TruffleRuby parallelism is spawn-based like every other
11
+ # engine; serial-only lanes waste CI time and trip the stall watchdog on
12
+ # legitimately long tests.
13
+ TURBO_TESTS2_MAX_PROCESSES: 2
14
+ # Serial lanes can legitimately run one long, silent test; give the stall
15
+ # watchdog a wider berth than the 4.0 default of 900s.
16
+ TURBO_TESTS2_WATCHDOG_SECONDS: 1500
8
17
 
9
18
  on:
10
19
  push:
@@ -27,9 +36,10 @@ concurrency:
27
36
 
28
37
  jobs:
29
38
  test:
30
- if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/') || startsWith(github.head_ref, 'feature/release'))"
39
+ if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/') || startsWith(github.head_ref, 'feature/release') || startsWith(github.event.pull_request.title, 'Release '))"
31
40
  name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
32
41
  runs-on: ubuntu-22.04
42
+ timeout-minutes: 30
33
43
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
34
44
  env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
35
45
  BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
@@ -53,7 +63,7 @@ jobs:
53
63
 
54
64
  - name: Setup Ruby & RubyGems
55
65
  if: ${{ !env.ACT }}
56
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
66
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
57
67
  with:
58
68
  ruby-version: ${{ matrix.ruby }}
59
69
  rubygems: ${{ matrix.rubygems }}
@@ -74,7 +84,10 @@ jobs:
74
84
  id: bundleAppraisalAttempt2
75
85
  # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
76
86
  if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && !env.ACT }}
77
- run: bundle exec appraisal ${{ matrix.appraisal }} install
87
+ run: |
88
+ rm -f gemfiles/${{ matrix.appraisal }}.gemfile.lock
89
+ rm -rf vendor/bundle "$HOME/.bundle/cache"
90
+ bundle exec appraisal ${{ matrix.appraisal }} install
78
91
 
79
92
  - name: Restore RSpec status log
80
93
  if: "${{!env.ACT}}"
@@ -47,6 +47,7 @@ jobs:
47
47
  if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
48
48
  name: Default rake task w/ unlocked deps ${{ matrix.name_extra || '' }}
49
49
  runs-on: ubuntu-latest
50
+ timeout-minutes: 30
50
51
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
51
52
  env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
52
53
  BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
@@ -67,7 +68,7 @@ jobs:
67
68
  persist-credentials: false
68
69
 
69
70
  - name: Setup Ruby & RubyGems
70
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
71
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
71
72
  with:
72
73
  ruby-version: ${{ matrix.ruby }}
73
74
  rubygems: ${{ matrix.rubygems }}
@@ -87,7 +88,10 @@ jobs:
87
88
  id: bundleAppraisalAttempt2
88
89
  # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
89
90
  if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
90
- run: bundle exec appraisal ${{ matrix.appraisal }} install
91
+ run: |
92
+ rm -f gemfiles/${{ matrix.appraisal }}.gemfile.lock
93
+ rm -rf vendor/bundle "$HOME/.bundle/cache"
94
+ bundle exec appraisal ${{ matrix.appraisal }} install
91
95
 
92
96
  - name: Run ${{ matrix.exec_cmd }} on ${{ matrix.ruby }}@${{ matrix.appraisal }}
93
97
  run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -101,6 +101,8 @@ author_aliases:
101
101
  # Supported actions (the destination project must explicitly choose one):
102
102
  # remove_modular_gem - remove the modular Gemfile's direct gem call.
103
103
  # remove_x_std_lib_eval - remove x_std_libs eval references for the gem.
104
+ # remove_direct_gem - remove the gemspec's or Gemfile's direct
105
+ # declaration, keeping the modular Gemfile's.
104
106
  # keep_both - retain both declarations when their requirements
105
107
  # overlap. This is intended for a broad direct
106
108
  # requirement narrowed by framework/engine Gemfiles;
@@ -143,6 +145,20 @@ engines:
143
145
  - jruby
144
146
  - truffleruby
145
147
 
148
+ # List the OS platforms this project's CI exercises. kettle-jem uses this to
149
+ # generate the current.yml OS matrix and the README platform tier table.
150
+ # Windows applies only when declared: the `if: matrix.os` guards and the
151
+ # Windows-only test step are emitted solely for destinations that opt in.
152
+ #
153
+ # Supported values: linux, macos, windows
154
+ # Default (when key is absent): linux, macos
155
+ # These are CI OS families, a distinct vocabulary from Gem::Platform strings
156
+ # and Gemfile DSL platform symbols; never reuse them for
157
+ # `bundle lock --add-platform`.
158
+ platforms:
159
+ - linux
160
+ - macos
161
+
146
162
  # Ruby version policy.
147
163
  ruby:
148
164
  # Lowest MRI Ruby version for generated CI workflows, Appraisals, and
@@ -556,6 +572,9 @@ patterns:
556
572
  strategy: raw_copy
557
573
  - path: ".github/workflows/**"
558
574
  strategy: accept_template
575
+ # Signature stub files are fully generated; there is nothing here to hand-edit.
576
+ - path: "sig/**/*.rbs"
577
+ strategy: accept_template
559
578
 
560
579
  # Per-file configuration (nested directory structure)
561
580
  # Only files that need overrides belong here. Everything else defaults to merge.
@@ -15,7 +15,8 @@ source "https://gem.coop"
15
15
 
16
16
  gemspec
17
17
 
18
- if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.2")
18
+ # The style toolchain includes dependencies that require Ruby 3.3 or newer.
19
+ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.3")
19
20
  if respond_to?(:generator_only)
20
21
  generator_only do
21
22
  eval_gemfile "gemfiles/modular/style.gemfile"
@@ -48,6 +48,10 @@ appraise "unlocked_deps" do
48
48
  eval_gemfile "modular/documentation.gemfile"
49
49
  eval_gemfile "modular/optional.gemfile"
50
50
  eval_gemfile "modular/recording/r4/recording.gemfile"
51
+ # Development dependencies shunted out of the gemspec - see
52
+ # gemfiles/modular/shunted.gemfile's own header for exactly which ones
53
+ # and why.
54
+ eval_gemfile "modular/shunted.gemfile"
51
55
  eval_gemfile "modular/style.gemfile"
52
56
  eval_gemfile "modular/x_std_libs.gemfile"
53
57
  end
@@ -99,7 +103,6 @@ end
99
103
 
100
104
  appraise "ruby-3-0" do
101
105
  eval_gemfile "modular/json/truffleruby_22_3.gemfile"
102
- eval_gemfile "modular/json/truffleruby_23_0.gemfile"
103
106
  eval_gemfile "modular/recording/r3/recording.gemfile"
104
107
  eval_gemfile "modular/x_std_libs/r3.1/libs.gemfile"
105
108
  end
@@ -40,6 +40,12 @@ the other fields accept `=` or `!=`.
40
40
  - kettle-jem-template-20260729-005 [if feature.rubyforum_project_tag=true] - Gemspec metadata now publishes this
41
41
  project's RubyForum tag as `mailing_list_uri`, and support docs link to the
42
42
  tagged RubyForum community alongside Discord.
43
+ - kettle-jem-template-20260913-001 - Templating now also surfaces a review
44
+ entry in `dependency_conflicts.resolve` when a direct development
45
+ dependency doesn't support one or more of this project's declared
46
+ `engines:` and has no template-managed modular home (e.g. `sqlite3` on
47
+ `jruby`). Review each entry and pick a resolution per the project's own
48
+ engine support needs.
43
49
 
44
50
  ## Changed
45
51
 
@@ -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.13") # 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.25") # ruby >= {KJ|MIN_TEST_RUBY}
137
+ spec.add_development_dependency("turbo_tests2", "~> 4.0", ">= 4.0.0") # 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.