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
@@ -4,6 +4,15 @@ permissions:
4
4
  contents: read
5
5
 
6
6
  env:
7
+ # Kill stalled test workers instead of hanging until the CI job timeout.
8
+ TURBO_TESTS2_WATCHDOG_SECONDS: 1500
9
+ # Each turbo_tests2 worker is a full JVM subprocess; without a heap cap
10
+ # JRuby defaults to 1/4 of runner RAM per worker, and concurrent workers
11
+ # get OOM-killed silently mid-run (watchdog then reports total silence).
12
+ JRUBY_OPTS: "-J-Xmx1280m"
13
+ # Fewer, smaller JVM workers: bound workers x per-worker heap under the
14
+ # runner RAM so the kernel OOM killer never silences workers mid-run.
15
+ TURBO_TESTS2_MAX_PROCESSES: 2
7
16
  K_SOUP_COV_DO: false
8
17
 
9
18
  on:
@@ -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, 'jruby/') || 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, 'jruby/') || 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-latest
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}}"
@@ -32,7 +32,18 @@ jobs:
32
32
  with:
33
33
  persist-credentials: false
34
34
 
35
- - name: Check Dependencies' License
35
+ # This action is a composite that builds license-eye from source on every
36
+ # run, and its own cache is broken upstream: dependency/action.yml passes
37
+ # cache-dependency-path ${{ github.action_path }}/go.sum, but go.sum lives
38
+ # at the action's repository root, not in dependency/ (404 vs 200). So
39
+ # setup-go logs "Restore cache failed: Some specified paths were not
40
+ # resolved" and the module cache never restores, making each run
41
+ # re-download ~35 Go modules and re-run make. That leaves every run
42
+ # exposed to a transient proxy.golang.org error such as
43
+ # "stream error: INTERNAL_ERROR; received from peer", which fails the job
44
+ # on an otherwise healthy repository. Retry once before failing.
45
+ - name: "[Attempt 1] Check Dependencies' License"
46
+ id: licenseEyeAttempt1
36
47
  uses: apache/skywalking-eyes/dependency@a196742f472feaffafea537ce5a2a4c3c53a8de4 # v0.9.0
37
48
  with:
38
49
  config: .licenserc.yaml
@@ -41,3 +52,13 @@ jobs:
41
52
  # only when License-Eye has a usable main-license matrix; otherwise
42
53
  # resolve mode records dependency licenses without false failures.
43
54
  flags: "{KJ|LICENSE_EYE:FLAGS}"
55
+ continue-on-error: true
56
+
57
+ - name: "[Attempt 2] Check Dependencies' License"
58
+ id: licenseEyeAttempt2
59
+ if: ${{ steps.licenseEyeAttempt1.outcome == 'failure' }}
60
+ uses: apache/skywalking-eyes/dependency@a196742f472feaffafea537ce5a2a4c3c53a8de4 # v0.9.0
61
+ with:
62
+ config: .licenserc.yaml
63
+ mode: "{KJ|LICENSE_EYE:MODE}"
64
+ flags: "{KJ|LICENSE_EYE:FLAGS}"
@@ -57,6 +57,7 @@ jobs:
57
57
  if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
58
58
  name: Default rake task w/ main Gemfile.lock ${{ matrix.name_extra || '' }}
59
59
  runs-on: ubuntu-latest
60
+ timeout-minutes: 30
60
61
  continue-on-error: ${{ matrix.experimental }}
61
62
  strategy:
62
63
  fail-fast: false
@@ -76,7 +77,7 @@ jobs:
76
77
  persist-credentials: false
77
78
 
78
79
  - name: Setup Ruby & RubyGems
79
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
80
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
80
81
  with:
81
82
  ruby-version: ${{ matrix.ruby }}
82
83
  rubygems: ${{ matrix.rubygems }}
@@ -20,7 +20,7 @@ jobs:
20
20
  with:
21
21
  persist-credentials: false
22
22
  - name: Setup Ruby & RubyGems
23
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
23
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
24
24
  with:
25
25
  ruby-version: ruby
26
26
  rubygems: default
@@ -27,9 +27,12 @@ jobs:
27
27
  if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
28
28
  name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
29
29
  runs-on: ubuntu-22.04
30
+ timeout-minutes: 30
30
31
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
31
32
  env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
32
33
  BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
34
+ # Kill stalled test workers instead of hanging until the CI job timeout.
35
+ TURBO_TESTS2_WATCHDOG_SECONDS: 900
33
36
  strategy:
34
37
  matrix:
35
38
  include:
@@ -47,7 +50,7 @@ jobs:
47
50
  persist-credentials: false
48
51
 
49
52
  - name: Setup Ruby & RubyGems
50
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
53
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
51
54
  with:
52
55
  ruby-version: ${{ matrix.ruby }}
53
56
  rubygems: ${{ matrix.rubygems }}
@@ -64,7 +67,10 @@ jobs:
64
67
  - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
65
68
  id: bundleAppraisalAttempt2
66
69
  if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
67
- run: bundle exec appraisal ${{ matrix.appraisal }} install
70
+ run: |
71
+ rm -f gemfiles/${{ matrix.appraisal }}.gemfile.lock
72
+ rm -rf vendor/bundle "$HOME/.bundle/cache"
73
+ bundle exec appraisal ${{ matrix.appraisal }} install
68
74
 
69
75
  - name: Restore RSpec status log
70
76
  if: "${{!env.ACT}}"
@@ -27,9 +27,12 @@ jobs:
27
27
  if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
28
28
  name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
29
29
  runs-on: ubuntu-22.04
30
+ timeout-minutes: 30
30
31
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
31
32
  env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
32
33
  BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
34
+ # Kill stalled test workers instead of hanging until the CI job timeout.
35
+ TURBO_TESTS2_WATCHDOG_SECONDS: 900
33
36
  strategy:
34
37
  matrix:
35
38
  include:
@@ -47,7 +50,7 @@ jobs:
47
50
  persist-credentials: false
48
51
 
49
52
  - name: Setup Ruby & RubyGems
50
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
53
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
51
54
  with:
52
55
  ruby-version: ${{ matrix.ruby }}
53
56
  rubygems: ${{ matrix.rubygems }}
@@ -68,7 +71,10 @@ jobs:
68
71
  - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
69
72
  id: bundleAppraisalAttempt2
70
73
  if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
71
- run: bundle exec appraisal ${{ matrix.appraisal }} install
74
+ run: |
75
+ rm -f gemfiles/${{ matrix.appraisal }}.gemfile.lock
76
+ rm -rf vendor/bundle "$HOME/.bundle/cache"
77
+ bundle exec appraisal ${{ matrix.appraisal }} install
72
78
 
73
79
  - name: Restore RSpec status log
74
80
  if: "${{!env.ACT}}"
@@ -27,9 +27,12 @@ jobs:
27
27
  if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
28
28
  name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
29
29
  runs-on: ubuntu-22.04
30
+ timeout-minutes: 30
30
31
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
31
32
  env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
32
33
  BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
34
+ # Kill stalled test workers instead of hanging until the CI job timeout.
35
+ TURBO_TESTS2_WATCHDOG_SECONDS: 900
33
36
  strategy:
34
37
  matrix:
35
38
  include:
@@ -47,7 +50,7 @@ jobs:
47
50
  persist-credentials: false
48
51
 
49
52
  - name: Setup Ruby & RubyGems
50
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
53
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
51
54
  with:
52
55
  ruby-version: ${{ matrix.ruby }}
53
56
  rubygems: ${{ matrix.rubygems }}
@@ -68,7 +71,10 @@ jobs:
68
71
  - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
69
72
  id: bundleAppraisalAttempt2
70
73
  if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
71
- run: bundle exec appraisal ${{ matrix.appraisal }} install
74
+ run: |
75
+ rm -f gemfiles/${{ matrix.appraisal }}.gemfile.lock
76
+ rm -rf vendor/bundle "$HOME/.bundle/cache"
77
+ bundle exec appraisal ${{ matrix.appraisal }} install
72
78
 
73
79
  - name: Restore RSpec status log
74
80
  if: "${{!env.ACT}}"
@@ -27,9 +27,12 @@ jobs:
27
27
  if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
28
28
  name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
29
29
  runs-on: ubuntu-22.04
30
+ timeout-minutes: 30
30
31
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
31
32
  env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
32
33
  BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
34
+ # Kill stalled test workers instead of hanging until the CI job timeout.
35
+ TURBO_TESTS2_WATCHDOG_SECONDS: 900
33
36
  strategy:
34
37
  matrix:
35
38
  include:
@@ -47,7 +50,7 @@ jobs:
47
50
  persist-credentials: false
48
51
 
49
52
  - name: Setup Ruby & RubyGems
50
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
53
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
51
54
  with:
52
55
  ruby-version: ${{ matrix.ruby }}
53
56
  rubygems: ${{ matrix.rubygems }}
@@ -68,7 +71,10 @@ jobs:
68
71
  - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
69
72
  id: bundleAppraisalAttempt2
70
73
  if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
71
- run: bundle exec appraisal ${{ matrix.appraisal }} install
74
+ run: |
75
+ rm -f gemfiles/${{ matrix.appraisal }}.gemfile.lock
76
+ rm -rf vendor/bundle "$HOME/.bundle/cache"
77
+ bundle exec appraisal ${{ matrix.appraisal }} install
72
78
 
73
79
  - name: Restore RSpec status log
74
80
  if: "${{!env.ACT}}"
@@ -27,9 +27,12 @@ jobs:
27
27
  if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
28
28
  name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
29
29
  runs-on: ubuntu-22.04
30
+ timeout-minutes: 30
30
31
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
31
32
  env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
32
33
  BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
34
+ # Kill stalled test workers instead of hanging until the CI job timeout.
35
+ TURBO_TESTS2_WATCHDOG_SECONDS: 900
33
36
  strategy:
34
37
  matrix:
35
38
  include:
@@ -47,7 +50,7 @@ jobs:
47
50
  persist-credentials: false
48
51
 
49
52
  - name: Setup Ruby & RubyGems
50
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
53
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
51
54
  with:
52
55
  ruby-version: ${{ matrix.ruby }}
53
56
  rubygems: ${{ matrix.rubygems }}
@@ -68,7 +71,10 @@ jobs:
68
71
  - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
69
72
  id: bundleAppraisalAttempt2
70
73
  if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
71
- run: bundle exec appraisal ${{ matrix.appraisal }} install
74
+ run: |
75
+ rm -f gemfiles/${{ matrix.appraisal }}.gemfile.lock
76
+ rm -rf vendor/bundle "$HOME/.bundle/cache"
77
+ bundle exec appraisal ${{ matrix.appraisal }} install
72
78
 
73
79
  - name: Restore RSpec status log
74
80
  if: "${{!env.ACT}}"
@@ -4,6 +4,8 @@ permissions:
4
4
  contents: read
5
5
 
6
6
  env:
7
+ # Kill stalled test workers instead of hanging until the CI job timeout.
8
+ TURBO_TESTS2_WATCHDOG_SECONDS: 900
7
9
  K_SOUP_COV_DO: false
8
10
 
9
11
  on:
@@ -30,6 +32,7 @@ jobs:
30
32
  if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
31
33
  name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
32
34
  runs-on: ubuntu-22.04
35
+ timeout-minutes: 30
33
36
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
34
37
  env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
35
38
  BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
@@ -50,7 +53,7 @@ jobs:
50
53
  persist-credentials: false
51
54
 
52
55
  - name: Setup Ruby & RubyGems
53
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
56
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
54
57
  with:
55
58
  ruby-version: ${{ matrix.ruby }}
56
59
  rubygems: ${{ matrix.rubygems }}
@@ -67,8 +70,11 @@ jobs:
67
70
 
68
71
  - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
69
72
  id: bundleAppraisalAttempt2
70
- if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && !env.ACT }}
71
- run: bundle exec appraisal ${{ matrix.appraisal }} install
73
+ if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
74
+ run: |
75
+ rm -f gemfiles/${{ matrix.appraisal }}.gemfile.lock
76
+ rm -rf vendor/bundle "$HOME/.bundle/cache"
77
+ bundle exec appraisal ${{ matrix.appraisal }} install
72
78
 
73
79
  - name: Restore RSpec status log
74
80
  if: "${{!env.ACT}}"
@@ -4,6 +4,8 @@ permissions:
4
4
  contents: read
5
5
 
6
6
  env:
7
+ # Kill stalled test workers instead of hanging until the CI job timeout.
8
+ TURBO_TESTS2_WATCHDOG_SECONDS: 900
7
9
  K_SOUP_COV_DO: false
8
10
 
9
11
  on:
@@ -30,6 +32,7 @@ jobs:
30
32
  if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
31
33
  name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
32
34
  runs-on: ubuntu-22.04
35
+ timeout-minutes: 30
33
36
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
34
37
  env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
35
38
  BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
@@ -50,7 +53,7 @@ jobs:
50
53
  persist-credentials: false
51
54
 
52
55
  - name: Setup Ruby & RubyGems
53
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
56
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
54
57
  with:
55
58
  ruby-version: ${{ matrix.ruby }}
56
59
  rubygems: ${{ matrix.rubygems }}
@@ -67,7 +70,10 @@ jobs:
67
70
  - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
68
71
  id: bundleAppraisalAttempt2
69
72
  if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
70
- run: bundle exec appraisal ${{ matrix.appraisal }} install
73
+ run: |
74
+ rm -f gemfiles/${{ matrix.appraisal }}.gemfile.lock
75
+ rm -rf vendor/bundle "$HOME/.bundle/cache"
76
+ bundle exec appraisal ${{ matrix.appraisal }} install
71
77
 
72
78
  - name: Restore RSpec status log
73
79
  if: "${{!env.ACT}}"
@@ -27,9 +27,12 @@ jobs:
27
27
  if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
28
28
  name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
29
29
  runs-on: ubuntu-latest
30
+ timeout-minutes: 30
30
31
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
31
32
  env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
32
33
  BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
34
+ # Kill stalled test workers instead of hanging until the CI job timeout.
35
+ TURBO_TESTS2_WATCHDOG_SECONDS: 900
33
36
  strategy:
34
37
  matrix:
35
38
  include:
@@ -47,7 +50,7 @@ jobs:
47
50
  persist-credentials: false
48
51
 
49
52
  - name: Setup Ruby & RubyGems
50
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
53
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
51
54
  with:
52
55
  ruby-version: ${{ matrix.ruby }}
53
56
  rubygems: ${{ matrix.rubygems }}
@@ -64,7 +67,10 @@ jobs:
64
67
  - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
65
68
  id: bundleAppraisalAttempt2
66
69
  if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
67
- run: bundle exec appraisal ${{ matrix.appraisal }} install
70
+ run: |
71
+ rm -f gemfiles/${{ matrix.appraisal }}.gemfile.lock
72
+ rm -rf vendor/bundle "$HOME/.bundle/cache"
73
+ bundle exec appraisal ${{ matrix.appraisal }} install
68
74
 
69
75
  - name: Restore RSpec status log
70
76
  if: "${{!env.ACT}}"
@@ -27,9 +27,12 @@ jobs:
27
27
  if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
28
28
  name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
29
29
  runs-on: ubuntu-latest
30
+ timeout-minutes: 30
30
31
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
31
32
  env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
32
33
  BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
34
+ # Kill stalled test workers instead of hanging until the CI job timeout.
35
+ TURBO_TESTS2_WATCHDOG_SECONDS: 900
33
36
  strategy:
34
37
  matrix:
35
38
  include:
@@ -47,7 +50,7 @@ jobs:
47
50
  persist-credentials: false
48
51
 
49
52
  - name: Setup Ruby & RubyGems
50
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
53
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
51
54
  with:
52
55
  ruby-version: ${{ matrix.ruby }}
53
56
  rubygems: ${{ matrix.rubygems }}
@@ -64,7 +67,10 @@ jobs:
64
67
  - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
65
68
  id: bundleAppraisalAttempt2
66
69
  if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
67
- run: bundle exec appraisal ${{ matrix.appraisal }} install
70
+ run: |
71
+ rm -f gemfiles/${{ matrix.appraisal }}.gemfile.lock
72
+ rm -rf vendor/bundle "$HOME/.bundle/cache"
73
+ bundle exec appraisal ${{ matrix.appraisal }} install
68
74
 
69
75
  - name: Restore RSpec status log
70
76
  if: "${{!env.ACT}}"
@@ -27,9 +27,12 @@ jobs:
27
27
  if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
28
28
  name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
29
29
  runs-on: ubuntu-latest
30
+ timeout-minutes: 30
30
31
  continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
31
32
  env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
32
33
  BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
34
+ # Kill stalled test workers instead of hanging until the CI job timeout.
35
+ TURBO_TESTS2_WATCHDOG_SECONDS: 900
33
36
  strategy:
34
37
  matrix:
35
38
  include:
@@ -47,7 +50,7 @@ jobs:
47
50
  persist-credentials: false
48
51
 
49
52
  - name: Setup Ruby & RubyGems
50
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
53
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
51
54
  with:
52
55
  ruby-version: ${{ matrix.ruby }}
53
56
  rubygems: ${{ matrix.rubygems }}
@@ -64,7 +67,10 @@ jobs:
64
67
  - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
65
68
  id: bundleAppraisalAttempt2
66
69
  if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
67
- run: bundle exec appraisal ${{ matrix.appraisal }} install
70
+ run: |
71
+ rm -f gemfiles/${{ matrix.appraisal }}.gemfile.lock
72
+ rm -rf vendor/bundle "$HOME/.bundle/cache"
73
+ bundle exec appraisal ${{ matrix.appraisal }} install
68
74
 
69
75
  - name: Restore RSpec status log
70
76
  if: "${{!env.ACT}}"
@@ -47,7 +47,7 @@ jobs:
47
47
  persist-credentials: false
48
48
 
49
49
  - name: Setup Ruby & RubyGems
50
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
50
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
51
51
  with:
52
52
  ruby-version: ${{ matrix.ruby }}
53
53
  rubygems: ${{ matrix.rubygems }}
@@ -67,7 +67,10 @@ jobs:
67
67
  id: bundleAppraisalAttempt2
68
68
  # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
69
69
  if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
70
- run: bundle exec appraisal ${{ matrix.appraisal }} install
70
+ run: |
71
+ rm -f gemfiles/${{ matrix.appraisal }}.gemfile.lock
72
+ rm -rf vendor/bundle "$HOME/.bundle/cache"
73
+ bundle exec appraisal ${{ matrix.appraisal }} install
71
74
 
72
75
  - name: Run ${{ matrix.appraisal }} checks via ${{ matrix.exec_cmd }}
73
76
  run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -52,7 +52,7 @@ jobs:
52
52
  persist-credentials: false
53
53
 
54
54
  - name: Setup Ruby & RubyGems
55
- uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
55
+ uses: appraisal-rb/setup-ruby-flash@6f8ad36ba7488db591541483afb5464d01e8861b # v2.14 compatibility bundle installation
56
56
  with:
57
57
  ruby-version: ${{ matrix.ruby }}
58
58
  rubygems: ${{ matrix.rubygems }}
@@ -80,7 +80,23 @@ jobs:
80
80
  id: bundleAppraisalAttempt2
81
81
  # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
82
82
  if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
83
- run: bundle exec appraisal ${{ matrix.appraisal }} install
83
+ run: |
84
+ rm -f gemfiles/${{ matrix.appraisal }}.gemfile.lock
85
+ rm -rf vendor/bundle "$HOME/.bundle/cache"
86
+ bundle exec appraisal ${{ matrix.appraisal }} install
87
+
88
+ - name: Cache tree-sitter-language-pack grammars
89
+ if: "${{!env.ACT}}"
90
+ uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
91
+ with:
92
+ # TSLP hot-loads grammars on demand into a versioned cache dir.
93
+ # Caching it keeps the self-test off the network in the common case;
94
+ # a miss falls back to the in-run prefetch (kettle-jem tslp_prefetch
95
+ # phase) with retries and attributable diagnostics.
96
+ path: ~/.cache/tree-sitter-language-pack
97
+ key: tslp-grammars-${{runner.os}}-${{hashFiles('gemfiles/templating.gemfile.lock','Gemfile.lock')}}
98
+ restore-keys: |
99
+ tslp-grammars-${{runner.os}}-
84
100
 
85
101
  - name: Templating self-test for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
86
102
  run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -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-latest
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
@@ -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 }}
@@ -75,7 +85,10 @@ jobs:
75
85
  id: bundleAppraisalAttempt2
76
86
  # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
77
87
  if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && !env.ACT }}
78
- run: bundle exec appraisal ${{ matrix.appraisal }} install
88
+ run: |
89
+ rm -f gemfiles/${{ matrix.appraisal }}.gemfile.lock
90
+ rm -rf vendor/bundle "$HOME/.bundle/cache"
91
+ bundle exec appraisal ${{ matrix.appraisal }} install
79
92
 
80
93
  - name: Restore RSpec status log
81
94
  if: "${{!env.ACT}}"