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,92 @@
1
+ name: TruffleRuby 22.3
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-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
+ # NOTE: truffleruby does not support upgrading rubygems.
40
+ # truffleruby-22.3 (targets Ruby 3.0 compatibility)
41
+ - ruby: "truffleruby-22.3"
42
+ appraisal: "ruby-3-0"
43
+ exec_cmd: "{KJ|CI:EXEC_CMD}"
44
+ rubygems: default
45
+ bundler: default
46
+ experimental: true
47
+
48
+ steps:
49
+ - name: Checkout
50
+ if: ${{ !env.ACT }}
51
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
52
+ with:
53
+ persist-credentials: false
54
+
55
+ - name: Setup Ruby & RubyGems
56
+ if: ${{ !env.ACT }}
57
+ uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
58
+ with:
59
+ ruby-version: ${{ matrix.ruby }}
60
+ rubygems: ${{ matrix.rubygems }}
61
+ bundler: ${{ matrix.bundler }}
62
+ bundler-cache: true
63
+ manual-compatibility-bundle: true
64
+ gem-install-retries: 7
65
+
66
+ - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
67
+ id: bundleAppraisalAttempt1
68
+ if: ${{ !env.ACT }}
69
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
70
+ # Continue to the next step on failure
71
+ continue-on-error: true
72
+
73
+ # Effectively an automatic retry of the previous step.
74
+ - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
75
+ id: bundleAppraisalAttempt2
76
+ # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
77
+ if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && !env.ACT }}
78
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
79
+
80
+ - name: Restore RSpec status log
81
+ if: "${{!env.ACT}}"
82
+ uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
83
+ with:
84
+ path: .rspec_status
85
+ key: rspec-status-truffleruby-22.3-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-${{github.run_id}}-${{github.run_attempt}}
86
+ restore-keys: |
87
+ rspec-status-truffleruby-22.3-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-
88
+ rspec-status-truffleruby-22.3-${{matrix.ruby}}-${{matrix.appraisal}}-
89
+
90
+ - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
91
+ if: ${{ !env.ACT }}
92
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,92 @@
1
+ name: TruffleRuby 23.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]'))) && (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-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
+ # NOTE: truffleruby does not support upgrading rubygems.
40
+ # truffleruby-23.0 (targets Ruby 3.0 compatibility)
41
+ - ruby: "truffleruby-23.0"
42
+ appraisal: "ruby-3-0"
43
+ exec_cmd: "{KJ|CI:EXEC_CMD}"
44
+ rubygems: default
45
+ bundler: default
46
+ experimental: true
47
+
48
+ steps:
49
+ - name: Checkout
50
+ if: ${{ !env.ACT }}
51
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
52
+ with:
53
+ persist-credentials: false
54
+
55
+ - name: Setup Ruby & RubyGems
56
+ if: ${{ !env.ACT }}
57
+ uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
58
+ with:
59
+ ruby-version: ${{ matrix.ruby }}
60
+ rubygems: ${{ matrix.rubygems }}
61
+ bundler: ${{ matrix.bundler }}
62
+ bundler-cache: true
63
+ manual-compatibility-bundle: true
64
+ gem-install-retries: 7
65
+
66
+ - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
67
+ id: bundleAppraisalAttempt1
68
+ if: ${{ !env.ACT }}
69
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
70
+ # Continue to the next step on failure
71
+ continue-on-error: true
72
+
73
+ # Effectively an automatic retry of the previous step.
74
+ - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
75
+ id: bundleAppraisalAttempt2
76
+ # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
77
+ if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && !env.ACT }}
78
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
79
+
80
+ - name: Restore RSpec status log
81
+ if: "${{!env.ACT}}"
82
+ uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
83
+ with:
84
+ path: .rspec_status
85
+ key: rspec-status-truffleruby-23.0-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-${{github.run_id}}-${{github.run_attempt}}
86
+ restore-keys: |
87
+ rspec-status-truffleruby-23.0-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-
88
+ rspec-status-truffleruby-23.0-${{matrix.ruby}}-${{matrix.appraisal}}-
89
+
90
+ - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
91
+ if: ${{ !env.ACT }}
92
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,78 @@
1
+ name: TruffleRuby 23.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]'))) && (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-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 }}/gemfiles/ruby_3_2.gemfile
36
+ strategy:
37
+ matrix:
38
+ include:
39
+ # NOTE: truffleruby does not support upgrading rubygems.
40
+ # truffleruby-23.1 (targets Ruby 3.2 compatibility)
41
+ - ruby: "truffleruby-23.1"
42
+ appraisal: "ruby-3-2"
43
+ exec_cmd: "{KJ|CI:EXEC_CMD}"
44
+ rubygems: default
45
+ bundler: default
46
+ experimental: true
47
+
48
+ steps:
49
+ - name: Checkout
50
+ if: ${{ !env.ACT }}
51
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
52
+ with:
53
+ persist-credentials: false
54
+
55
+ - name: Setup Ruby & RubyGems
56
+ if: ${{ !env.ACT }}
57
+ uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
58
+ with:
59
+ ruby-version: ${{ matrix.ruby }}
60
+ rubygems: ${{ matrix.rubygems }}
61
+ bundler: ${{ matrix.bundler }}
62
+ bundler-cache: true
63
+ manual-compatibility-bundle: true
64
+ gem-install-retries: 7
65
+
66
+ - name: Restore RSpec status log
67
+ if: "${{!env.ACT}}"
68
+ uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
69
+ with:
70
+ path: .rspec_status
71
+ key: rspec-status-truffleruby-23.1-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-${{github.run_id}}-${{github.run_attempt}}
72
+ restore-keys: |
73
+ rspec-status-truffleruby-23.1-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-
74
+ rspec-status-truffleruby-23.1-${{matrix.ruby}}-${{matrix.appraisal}}-
75
+
76
+ - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
77
+ if: ${{ !env.ACT }}
78
+ run: bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,91 @@
1
+ name: TruffleRuby 24.2
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-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
+ # NOTE: truffleruby does not support upgrading rubygems.
40
+ # truffleruby-24.2 (targets Ruby 3.3 compatibility)
41
+ - ruby: "truffleruby-24.2"
42
+ appraisal: "ruby-3-3"
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-truffleruby-24.2-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-${{github.run_id}}-${{github.run_attempt}}
85
+ restore-keys: |
86
+ rspec-status-truffleruby-24.2-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-
87
+ rspec-status-truffleruby-24.2-${{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 }}
@@ -0,0 +1,96 @@
1
+ name: TruffleRuby 25.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]'))) && (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-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
+ # NOTE: truffleruby does not support upgrading rubygems.
40
+ # truffleruby-25.0 (targets Ruby 3.3 compatibility)
41
+ - ruby: "truffleruby-25.0"
42
+ appraisal: "ruby-3-3"
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: false
62
+
63
+ - name: Bundle install for TruffleRuby 25.0
64
+ if: ${{ !env.ACT }}
65
+ run: |
66
+ bundle config set --local path "${RUNNER_TEMP}/bundle"
67
+ bundle config set --local mirror.https://gem.coop https://rubygems.org
68
+ bundle install --jobs 1
69
+
70
+ - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
71
+ id: bundleAppraisalAttempt1
72
+ if: ${{ !env.ACT }}
73
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
74
+ # Continue to the next step on failure
75
+ continue-on-error: true
76
+
77
+ # Effectively an automatic retry of the previous step.
78
+ - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
79
+ id: bundleAppraisalAttempt2
80
+ # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
81
+ if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && !env.ACT }}
82
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
83
+
84
+ - name: Restore RSpec status log
85
+ if: "${{!env.ACT}}"
86
+ uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
87
+ with:
88
+ path: .rspec_status
89
+ key: rspec-status-truffleruby-25.0-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-${{github.run_id}}-${{github.run_attempt}}
90
+ restore-keys: |
91
+ rspec-status-truffleruby-25.0-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-
92
+ rspec-status-truffleruby-25.0-${{matrix.ruby}}-${{matrix.appraisal}}-
93
+
94
+ - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
95
+ if: ${{ !env.ACT }}
96
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,91 @@
1
+ name: TruffleRuby 33.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]'))) && (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-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
+ # NOTE: truffleruby does not support upgrading rubygems.
40
+ # truffleruby-33.0 (targets Ruby 3.3 compatibility)
41
+ - ruby: "truffleruby-33.0"
42
+ appraisal: "ruby-3-3"
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-truffleruby-33.0-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-${{github.run_id}}-${{github.run_attempt}}
85
+ restore-keys: |
86
+ rspec-status-truffleruby-33.0-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-
87
+ rspec-status-truffleruby-33.0-${{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 }}
@@ -0,0 +1,93 @@
1
+ ---
2
+ # Lock/Unlock Deps Pattern
3
+ #
4
+ # Two often conflicting goals resolved!
5
+ #
6
+ # - unlocked_deps.yml
7
+ # - All runtime & dev dependencies, but does not have a `gemfiles/*.gemfile.lock` committed
8
+ # - Uses an Appraisal2 "unlocked_deps" gemfile, and the current MRI Ruby release
9
+ # - Know when new dependency releases will break local dev with unlocked dependencies
10
+ # - Broken workflow indicates that new releases of dependencies may not work
11
+ #
12
+ # - locked_deps.yml
13
+ # - All runtime & dev dependencies, and has a `Gemfile.lock` committed
14
+ # - Uses the project's main Gemfile, and the current MRI Ruby release
15
+ # - Matches what contributors and maintainers use locally for development
16
+ # - Broken workflow indicates that a new contributor will have a bad time
17
+ #
18
+ name: Deps Unlocked
19
+
20
+ permissions:
21
+ contents: read
22
+
23
+ env:
24
+ K_SOUP_COV_DO: false
25
+
26
+ on:
27
+ push:
28
+ branches:
29
+ - 'main'
30
+ - '*-stable'
31
+ tags:
32
+ - '!*' # Do not execute on tags
33
+ pull_request:
34
+ branches:
35
+ - '*'
36
+ # Allow manually triggering the workflow.
37
+ workflow_dispatch:
38
+
39
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
40
+ concurrency:
41
+ # The concurrency group contains the workflow name and the branch name.
42
+ group: "${{ github.workflow }}-${{ github.ref }}"
43
+ cancel-in-progress: true
44
+
45
+ jobs:
46
+ test:
47
+ if: "github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))"
48
+ name: Default rake task w/ unlocked deps ${{ matrix.name_extra || '' }}
49
+ runs-on: ubuntu-latest
50
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
51
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
52
+ BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
53
+ strategy:
54
+ matrix:
55
+ include:
56
+ # Ruby <whichever version is current, e.g., 3.4 as of 2025-07-12>
57
+ - ruby: "ruby"
58
+ appraisal: "unlocked_deps"
59
+ exec_cmd: "rake"
60
+ rubygems: latest
61
+ bundler: latest
62
+
63
+ steps:
64
+ - name: Checkout
65
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
66
+ with:
67
+ persist-credentials: false
68
+
69
+ - name: Setup Ruby & RubyGems
70
+ uses: appraisal-rb/setup-ruby-flash@925395edf973d2dc0a629919f407f3547a03d4b5 # v2.1 compatibility bundle installation
71
+ with:
72
+ ruby-version: ${{ matrix.ruby }}
73
+ rubygems: ${{ matrix.rubygems }}
74
+ bundler: ${{ matrix.bundler }}
75
+ bundler-cache: true
76
+ manual-compatibility-bundle: true
77
+ gem-install-retries: 7
78
+
79
+ - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
80
+ id: bundleAppraisalAttempt1
81
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
82
+ # Continue to the next step on failure
83
+ continue-on-error: true
84
+
85
+ # Effectively an automatic retry of the previous step.
86
+ - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
87
+ id: bundleAppraisalAttempt2
88
+ # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
89
+ if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' }}
90
+ run: bundle exec appraisal ${{ matrix.appraisal }} install
91
+
92
+ - name: Run ${{ matrix.exec_cmd }} on ${{ matrix.ruby }}@${{ matrix.appraisal }}
93
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}