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,85 @@
1
+ name: Ruby 3.0
2
+
3
+ permissions:
4
+ contents: read
5
+
6
+ env:
7
+ K_SOUP_COV_DO: false
8
+
9
+ on:
10
+ push:
11
+ branches:
12
+ - 'main'
13
+ - '*-stable'
14
+ tags:
15
+ - '!*' # Do not execute on tags
16
+ pull_request:
17
+ branches:
18
+ - '*'
19
+ # Allow manually triggering the workflow.
20
+ workflow_dispatch:
21
+
22
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
23
+ concurrency:
24
+ # The concurrency group contains the workflow name and the branch name.
25
+ group: "${{ github.workflow }}-${{ github.ref }}"
26
+ cancel-in-progress: true
27
+
28
+ jobs:
29
+ test:
30
+ if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
31
+ name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
32
+ runs-on: ubuntu-22.04
33
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
34
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
35
+ BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
36
+ strategy:
37
+ matrix:
38
+ include:
39
+ # Ruby 3.0
40
+ - ruby: "ruby-3.0"
41
+ appraisal: "ruby-3-0"
42
+ exec_cmd: "{KJ|CI:EXEC_CMD}"
43
+ rubygems: '3.5.23'
44
+ bundler: '2.5.23'
45
+
46
+ steps:
47
+ - name: Checkout
48
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
49
+ with:
50
+ persist-credentials: false
51
+
52
+ - name: Setup Ruby & RubyGems
53
+ uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
54
+ with:
55
+ ruby-version: ${{ matrix.ruby }}
56
+ rubygems: ${{ matrix.rubygems }}
57
+ bundler: ${{ matrix.bundler }}
58
+ bundler-cache: true
59
+ manual-compatibility-bundle: true
60
+ gem-install-retries: 7
61
+
62
+ - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
63
+ id: bundleAppraisalAttempt1
64
+ if: ${{ !env.ACT }}
65
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
66
+ continue-on-error: true
67
+
68
+ - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
69
+ id: bundleAppraisalAttempt2
70
+ if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && !env.ACT }}
71
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
72
+
73
+ - name: Restore RSpec status log
74
+ if: "${{!env.ACT}}"
75
+ uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
76
+ with:
77
+ path: .rspec_status
78
+ key: rspec-status-ruby-3.0-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-${{github.run_id}}-${{github.run_attempt}}
79
+ restore-keys: |
80
+ rspec-status-ruby-3.0-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-
81
+ rspec-status-ruby-3.0-${{matrix.ruby}}-${{matrix.appraisal}}-
82
+
83
+ - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
84
+ if: ${{ !env.ACT }}
85
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,83 @@
1
+ name: Ruby 3.1
2
+
3
+ permissions:
4
+ contents: read
5
+
6
+ env:
7
+ K_SOUP_COV_DO: false
8
+
9
+ on:
10
+ push:
11
+ branches:
12
+ - 'main'
13
+ - '*-stable'
14
+ tags:
15
+ - '!*' # Do not execute on tags
16
+ pull_request:
17
+ branches:
18
+ - '*'
19
+ # Allow manually triggering the workflow.
20
+ workflow_dispatch:
21
+
22
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
23
+ concurrency:
24
+ # The concurrency group contains the workflow name and the branch name.
25
+ group: "${{ github.workflow }}-${{ github.ref }}"
26
+ cancel-in-progress: true
27
+
28
+ jobs:
29
+ test:
30
+ if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
31
+ name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
32
+ runs-on: ubuntu-22.04
33
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
34
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
35
+ BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
36
+ strategy:
37
+ matrix:
38
+ include:
39
+ # Ruby 3.1
40
+ - ruby: "ruby-3.1"
41
+ appraisal: "ruby-3-1"
42
+ exec_cmd: "{KJ|CI:EXEC_CMD}"
43
+ rubygems: '3.6.9'
44
+ bundler: '2.6.9'
45
+
46
+ steps:
47
+ - name: Checkout
48
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
49
+ with:
50
+ persist-credentials: false
51
+
52
+ - name: Setup Ruby & RubyGems
53
+ uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
54
+ with:
55
+ ruby-version: ${{ matrix.ruby }}
56
+ rubygems: ${{ matrix.rubygems }}
57
+ bundler: ${{ matrix.bundler }}
58
+ bundler-cache: true
59
+ manual-compatibility-bundle: true
60
+ gem-install-retries: 7
61
+
62
+ - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
63
+ id: bundleAppraisalAttempt1
64
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
65
+ continue-on-error: true
66
+
67
+ - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
68
+ id: bundleAppraisalAttempt2
69
+ if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
70
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
71
+
72
+ - name: Restore RSpec status log
73
+ if: "${{!env.ACT}}"
74
+ uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
75
+ with:
76
+ path: .rspec_status
77
+ key: rspec-status-ruby-3.1-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-${{github.run_id}}-${{github.run_attempt}}
78
+ restore-keys: |
79
+ rspec-status-ruby-3.1-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-
80
+ rspec-status-ruby-3.1-${{matrix.ruby}}-${{matrix.appraisal}}-
81
+
82
+ - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
83
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,80 @@
1
+ name: Ruby 3.2
2
+
3
+ permissions:
4
+ contents: read
5
+
6
+ on:
7
+ push:
8
+ branches:
9
+ - 'main'
10
+ - '*-stable'
11
+ tags:
12
+ - '!*' # Do not execute on tags
13
+ pull_request:
14
+ branches:
15
+ - '*'
16
+ # Allow manually triggering the workflow.
17
+ workflow_dispatch:
18
+
19
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
20
+ concurrency:
21
+ # The concurrency group contains the workflow name and the branch name.
22
+ group: "${{ github.workflow }}-${{ github.ref }}"
23
+ cancel-in-progress: true
24
+
25
+ jobs:
26
+ test:
27
+ if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
28
+ name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
29
+ runs-on: ubuntu-latest
30
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
31
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
32
+ BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
33
+ strategy:
34
+ matrix:
35
+ include:
36
+ # Ruby 3.2
37
+ - ruby: "ruby-3.2"
38
+ appraisal: "ruby-3-2"
39
+ exec_cmd: "{KJ|CI:EXEC_CMD}"
40
+ rubygems: latest
41
+ bundler: latest
42
+
43
+ steps:
44
+ - name: Checkout
45
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
46
+ with:
47
+ persist-credentials: false
48
+
49
+ - name: Setup Ruby & RubyGems
50
+ uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
51
+ with:
52
+ ruby-version: ${{ matrix.ruby }}
53
+ rubygems: ${{ matrix.rubygems }}
54
+ bundler: ${{ matrix.bundler }}
55
+ bundler-cache: true
56
+ manual-compatibility-bundle: true
57
+ gem-install-retries: 7
58
+
59
+ - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
60
+ id: bundleAppraisalAttempt1
61
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
62
+ continue-on-error: true
63
+
64
+ - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
65
+ id: bundleAppraisalAttempt2
66
+ if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
67
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
68
+
69
+ - name: Restore RSpec status log
70
+ if: "${{!env.ACT}}"
71
+ uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
72
+ with:
73
+ path: .rspec_status
74
+ key: rspec-status-ruby-3.2-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-${{github.run_id}}-${{github.run_attempt}}
75
+ restore-keys: |
76
+ rspec-status-ruby-3.2-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-
77
+ rspec-status-ruby-3.2-${{matrix.ruby}}-${{matrix.appraisal}}-
78
+
79
+ - name: Tests for ${{ matrix.ruby }} ${{ matrix.appraisal }} via ${{ matrix.exec_cmd }}
80
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,80 @@
1
+ name: Ruby 3.3
2
+
3
+ permissions:
4
+ contents: read
5
+
6
+ on:
7
+ push:
8
+ branches:
9
+ - 'main'
10
+ - '*-stable'
11
+ tags:
12
+ - '!*' # Do not execute on tags
13
+ pull_request:
14
+ branches:
15
+ - '*'
16
+ # Allow manually triggering the workflow.
17
+ workflow_dispatch:
18
+
19
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
20
+ concurrency:
21
+ # The concurrency group contains the workflow name and the branch name.
22
+ group: "${{ github.workflow }}-${{ github.ref }}"
23
+ cancel-in-progress: true
24
+
25
+ jobs:
26
+ test:
27
+ if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
28
+ name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
29
+ runs-on: ubuntu-latest
30
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
31
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
32
+ BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
33
+ strategy:
34
+ matrix:
35
+ include:
36
+ # Ruby 3.3
37
+ - ruby: "ruby-3.3"
38
+ appraisal: "ruby-3-3"
39
+ exec_cmd: "{KJ|CI:EXEC_CMD}"
40
+ rubygems: latest
41
+ bundler: latest
42
+
43
+ steps:
44
+ - name: Checkout
45
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
46
+ with:
47
+ persist-credentials: false
48
+
49
+ - name: Setup Ruby & RubyGems
50
+ uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
51
+ with:
52
+ ruby-version: ${{ matrix.ruby }}
53
+ rubygems: ${{ matrix.rubygems }}
54
+ bundler: ${{ matrix.bundler }}
55
+ bundler-cache: true
56
+ manual-compatibility-bundle: true
57
+ gem-install-retries: 7
58
+
59
+ - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
60
+ id: bundleAppraisalAttempt1
61
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
62
+ continue-on-error: true
63
+
64
+ - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
65
+ id: bundleAppraisalAttempt2
66
+ if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
67
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
68
+
69
+ - name: Restore RSpec status log
70
+ if: "${{!env.ACT}}"
71
+ uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
72
+ with:
73
+ path: .rspec_status
74
+ key: rspec-status-ruby-3.3-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-${{github.run_id}}-${{github.run_attempt}}
75
+ restore-keys: |
76
+ rspec-status-ruby-3.3-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-
77
+ rspec-status-ruby-3.3-${{matrix.ruby}}-${{matrix.appraisal}}-
78
+
79
+ - name: Tests for ${{ matrix.ruby }} ${{ matrix.appraisal }} via ${{ matrix.exec_cmd }}
80
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,80 @@
1
+ name: Ruby 3.4
2
+
3
+ permissions:
4
+ contents: read
5
+
6
+ on:
7
+ push:
8
+ branches:
9
+ - 'main'
10
+ - '*-stable'
11
+ tags:
12
+ - '!*' # Do not execute on tags
13
+ pull_request:
14
+ branches:
15
+ - '*'
16
+ # Allow manually triggering the workflow.
17
+ workflow_dispatch:
18
+
19
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
20
+ concurrency:
21
+ # The concurrency group contains the workflow name and the branch name.
22
+ group: "${{ github.workflow }}-${{ github.ref }}"
23
+ cancel-in-progress: true
24
+
25
+ jobs:
26
+ test:
27
+ if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
28
+ name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
29
+ runs-on: ubuntu-latest
30
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
31
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
32
+ BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
33
+ strategy:
34
+ matrix:
35
+ include:
36
+ # Ruby 3.4
37
+ - ruby: "ruby-3.4"
38
+ appraisal: "ruby-3-4"
39
+ exec_cmd: "{KJ|CI:EXEC_CMD}"
40
+ rubygems: latest
41
+ bundler: latest
42
+
43
+ steps:
44
+ - name: Checkout
45
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
46
+ with:
47
+ persist-credentials: false
48
+
49
+ - name: Setup Ruby & RubyGems
50
+ uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
51
+ with:
52
+ ruby-version: ${{ matrix.ruby }}
53
+ rubygems: ${{ matrix.rubygems }}
54
+ bundler: ${{ matrix.bundler }}
55
+ bundler-cache: true
56
+ manual-compatibility-bundle: true
57
+ gem-install-retries: 7
58
+
59
+ - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
60
+ id: bundleAppraisalAttempt1
61
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
62
+ continue-on-error: true
63
+
64
+ - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
65
+ id: bundleAppraisalAttempt2
66
+ if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
67
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
68
+
69
+ - name: Restore RSpec status log
70
+ if: "${{!env.ACT}}"
71
+ uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
72
+ with:
73
+ path: .rspec_status
74
+ key: rspec-status-ruby-3.4-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-${{github.run_id}}-${{github.run_attempt}}
75
+ restore-keys: |
76
+ rspec-status-ruby-3.4-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-
77
+ rspec-status-ruby-3.4-${{matrix.ruby}}-${{matrix.appraisal}}-
78
+
79
+ - name: Tests for ${{ matrix.ruby }} ${{ matrix.appraisal }} via ${{ matrix.exec_cmd }}
80
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,78 @@
1
+ name: Style
2
+
3
+ permissions:
4
+ contents: read
5
+
6
+ on:
7
+ push:
8
+ branches:
9
+ - 'main'
10
+ - '*-stable'
11
+ tags:
12
+ - '!*' # Do not execute on tags
13
+ pull_request:
14
+ branches:
15
+ - '*'
16
+ # Allow manually triggering the workflow.
17
+ workflow_dispatch:
18
+
19
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
20
+ concurrency:
21
+ # The concurrency group contains the workflow name and the branch name.
22
+ group: "${{ github.workflow }}-${{ github.ref }}"
23
+ cancel-in-progress: true
24
+
25
+ jobs:
26
+ rubocop:
27
+ if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
28
+ name: Style on ${{ matrix.ruby }}@current
29
+ runs-on: ubuntu-latest
30
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
31
+ BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ include:
36
+ # Style
37
+ - ruby: "ruby"
38
+ appraisal: "style"
39
+ exec_cmd: "rake rubocop_gradual:check"
40
+ rubygems: latest
41
+ bundler: latest
42
+
43
+ steps:
44
+ - name: Checkout
45
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
46
+ with:
47
+ persist-credentials: false
48
+
49
+ - name: Setup Ruby & RubyGems
50
+ uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
51
+ with:
52
+ ruby-version: ${{ matrix.ruby }}
53
+ rubygems: ${{ matrix.rubygems }}
54
+ bundler: ${{ matrix.bundler }}
55
+ bundler-cache: true
56
+ manual-compatibility-bundle: true
57
+ gem-install-retries: 7
58
+
59
+ - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
60
+ id: bundleAppraisalAttempt1
61
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
62
+ # Continue to the next step on failure
63
+ continue-on-error: true
64
+
65
+ # Effectively an automatic retry of the previous step.
66
+ - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
67
+ id: bundleAppraisalAttempt2
68
+ # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
69
+ if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
70
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
71
+
72
+ - name: Run ${{ matrix.appraisal }} checks via ${{ matrix.exec_cmd }}
73
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
74
+
75
+ - name: Validate RBS Environment
76
+ run: >-
77
+ bundle exec appraisal ${{ matrix.appraisal }} bundle exec ruby -rrbs -rpathname -e
78
+ 'loader = RBS::EnvironmentLoader.new; loader.add(path: Pathname("sig")); RBS::Environment.from_loader(loader).resolve_type_names'
@@ -0,0 +1,86 @@
1
+ # Targets the evergreen latest release of ruby
2
+ name: Templating
3
+
4
+ permissions:
5
+ contents: read
6
+
7
+ env:
8
+ K_SOUP_COV_DO: false
9
+
10
+ on:
11
+ push:
12
+ branches:
13
+ - 'main'
14
+ - '*-stable'
15
+ tags:
16
+ - '!*' # Do not execute on tags
17
+ pull_request:
18
+ branches:
19
+ - '*'
20
+ # Allow manually triggering the workflow.
21
+ workflow_dispatch:
22
+
23
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
24
+ concurrency:
25
+ # The concurrency group contains the workflow name and the branch name.
26
+ group: "${{ github.workflow }}-${{ github.ref }}"
27
+ cancel-in-progress: true
28
+
29
+ jobs:
30
+ test:
31
+ if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
32
+ name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
33
+ runs-on: ubuntu-latest
34
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
35
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
36
+ BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
37
+ strategy:
38
+ matrix:
39
+ include:
40
+ # Latest Ruby
41
+ - ruby: "ruby"
42
+ appraisal: "templating"
43
+ exec_cmd: "rake kettle:jem:selftest"
44
+ rubygems: latest
45
+ bundler: latest
46
+ experimental: false
47
+
48
+ steps:
49
+ - name: Checkout
50
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
51
+ with:
52
+ persist-credentials: false
53
+
54
+ - name: Setup Ruby & RubyGems
55
+ uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
56
+ with:
57
+ ruby-version: ${{ matrix.ruby }}
58
+ rubygems: ${{ matrix.rubygems }}
59
+ bundler: ${{ matrix.bundler }}
60
+ bundler-cache: true
61
+ manual-compatibility-bundle: true
62
+ gem-install-retries: 7
63
+
64
+ - name: Update templating bootstrap dependencies
65
+ env:
66
+ BUNDLE_GEMFILE: ${{ github.workspace }}/Gemfile
67
+ # Refresh kettle-family with nomono. A just-released kettle-family can
68
+ # briefly be absent from the gem.coop index while the lockfile already
69
+ # points at it; keeping it locked makes Bundler fail before appraisal.
70
+ run: bundle update nomono kettle-family
71
+
72
+ - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
73
+ id: bundleAppraisalAttempt1
74
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
75
+ # Continue to the next step on failure
76
+ continue-on-error: true
77
+
78
+ # Effectively an automatic retry of the previous step.
79
+ - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
80
+ id: bundleAppraisalAttempt2
81
+ # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
82
+ if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
83
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
84
+
85
+ - name: Templating self-test for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
86
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,91 @@
1
+ name: Current TruffleRuby
2
+
3
+ permissions:
4
+ contents: read
5
+
6
+ env:
7
+ K_SOUP_COV_DO: false
8
+
9
+ on:
10
+ push:
11
+ branches:
12
+ - 'main'
13
+ - '*-stable'
14
+ tags:
15
+ - '!*' # Do not execute on tags
16
+ pull_request:
17
+ branches:
18
+ - '*'
19
+ # Allow manually triggering the workflow.
20
+ workflow_dispatch:
21
+
22
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
23
+ concurrency:
24
+ # The concurrency group contains the workflow name and the branch name.
25
+ group: "${{ github.workflow }}-${{ github.ref }}"
26
+ cancel-in-progress: true
27
+
28
+ jobs:
29
+ 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'))"
31
+ name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}
32
+ runs-on: ubuntu-latest
33
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
34
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
35
+ BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
36
+ strategy:
37
+ matrix:
38
+ include:
39
+ # NOTE: truffleruby does not support upgrading rubygems.
40
+ # truffleruby-34.0 (targets Ruby 3.4 compatibility)
41
+ - ruby: "truffleruby"
42
+ appraisal: "current"
43
+ exec_cmd: "{KJ|CI:EXEC_CMD}"
44
+ rubygems: default
45
+ bundler: default
46
+
47
+ steps:
48
+ - name: Checkout
49
+ if: ${{ !env.ACT }}
50
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
51
+ with:
52
+ persist-credentials: false
53
+
54
+ - name: Setup Ruby & RubyGems
55
+ if: ${{ !env.ACT }}
56
+ uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
57
+ with:
58
+ ruby-version: ${{ matrix.ruby }}
59
+ rubygems: ${{ matrix.rubygems }}
60
+ bundler: ${{ matrix.bundler }}
61
+ bundler-cache: true
62
+ manual-compatibility-bundle: true
63
+ gem-install-retries: 7
64
+
65
+ - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
66
+ id: bundleAppraisalAttempt1
67
+ if: ${{ !env.ACT }}
68
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
69
+ # Continue to the next step on failure
70
+ continue-on-error: true
71
+
72
+ # Effectively an automatic retry of the previous step.
73
+ - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
74
+ id: bundleAppraisalAttempt2
75
+ # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
76
+ if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && !env.ACT }}
77
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
78
+
79
+ - name: Restore RSpec status log
80
+ if: "${{!env.ACT}}"
81
+ uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
82
+ with:
83
+ path: .rspec_status
84
+ key: rspec-status-truffle-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-${{github.run_id}}-${{github.run_attempt}}
85
+ restore-keys: |
86
+ rspec-status-truffle-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-
87
+ rspec-status-truffle-${{matrix.ruby}}-${{matrix.appraisal}}-
88
+
89
+ - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
90
+ if: ${{ !env.ACT }}
91
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}