kettle-dev 1.0.0 → 1.0.2

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 (69) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/.devcontainer/devcontainer.json +26 -0
  4. data/.envrc +42 -0
  5. data/.git-hooks/commit-msg +41 -0
  6. data/.git-hooks/commit-subjects-goalie.txt +8 -0
  7. data/.git-hooks/footer-template.erb.txt +16 -0
  8. data/.git-hooks/prepare-commit-msg +20 -0
  9. data/.github/FUNDING.yml +13 -0
  10. data/.github/dependabot.yml +11 -0
  11. data/.github/workflows/ancient.yml +80 -0
  12. data/.github/workflows/auto-assign.yml +21 -0
  13. data/.github/workflows/codeql-analysis.yml +70 -0
  14. data/.github/workflows/coverage.yml +130 -0
  15. data/.github/workflows/current.yml +88 -0
  16. data/.github/workflows/dependency-review.yml +20 -0
  17. data/.github/workflows/discord-notifier.yml +38 -0
  18. data/.github/workflows/heads.yml +87 -0
  19. data/.github/workflows/jruby.yml +79 -0
  20. data/.github/workflows/legacy.yml +70 -0
  21. data/.github/workflows/locked_deps.yml +88 -0
  22. data/.github/workflows/opencollective.yml +40 -0
  23. data/.github/workflows/style.yml +67 -0
  24. data/.github/workflows/supported.yml +85 -0
  25. data/.github/workflows/truffle.yml +78 -0
  26. data/.github/workflows/unlocked_deps.yml +87 -0
  27. data/.github/workflows/unsupported.yml +78 -0
  28. data/.gitignore +48 -0
  29. data/.gitlab-ci.yml +45 -0
  30. data/.junie/guidelines-rbs.md +49 -0
  31. data/.junie/guidelines.md +132 -0
  32. data/.opencollective.yml +3 -0
  33. data/.qlty/qlty.toml +79 -0
  34. data/.rspec +8 -0
  35. data/.rubocop.yml +13 -0
  36. data/.simplecov +7 -0
  37. data/.tool-versions +1 -0
  38. data/.yard_gfm_support.rb +22 -0
  39. data/.yardopts +11 -0
  40. data/Appraisal.root.gemfile +12 -0
  41. data/Appraisals +120 -0
  42. data/CHANGELOG.md +26 -5
  43. data/Gemfile +32 -0
  44. data/Rakefile +99 -0
  45. data/checksums/kettle-dev-1.0.1.gem.sha256 +1 -0
  46. data/checksums/kettle-dev-1.0.1.gem.sha512 +1 -0
  47. data/checksums/kettle-dev-1.0.2.gem.sha256 +1 -0
  48. data/checksums/kettle-dev-1.0.2.gem.sha512 +1 -0
  49. data/exe/kettle-commit-msg +185 -0
  50. data/exe/kettle-readme-backers +355 -0
  51. data/exe/kettle-release +327 -0
  52. data/gemfiles/modular/coverage.gemfile +6 -0
  53. data/gemfiles/modular/documentation.gemfile +11 -0
  54. data/gemfiles/modular/style.gemfile +16 -0
  55. data/lib/kettle/dev/rakelib/appraisal.rake +40 -0
  56. data/lib/kettle/dev/rakelib/bench.rake +58 -0
  57. data/lib/kettle/dev/rakelib/bundle_audit.rake +18 -0
  58. data/lib/kettle/dev/rakelib/ci.rake +348 -0
  59. data/lib/kettle/dev/rakelib/install.rake +304 -0
  60. data/lib/kettle/dev/rakelib/reek.rake +34 -0
  61. data/lib/kettle/dev/rakelib/require_bench.rake +7 -0
  62. data/lib/kettle/dev/rakelib/rubocop_gradual.rake +9 -0
  63. data/lib/kettle/dev/rakelib/spec_test.rake +42 -0
  64. data/lib/kettle/dev/rakelib/template.rake +413 -0
  65. data/lib/kettle/dev/rakelib/yard.rake +33 -0
  66. data/lib/kettle/dev/version.rb +1 -1
  67. data.tar.gz.sig +0 -0
  68. metadata +74 -5
  69. metadata.gz.sig +0 -0
@@ -0,0 +1,87 @@
1
+ name: Heads
2
+
3
+ env:
4
+ K_SOUP_COV_DO: false
5
+
6
+ on:
7
+ push:
8
+ branches:
9
+ - 'main'
10
+ tags:
11
+ - '!*' # Do not execute on tags
12
+ pull_request:
13
+ # types specification prevents double build on push & pull request
14
+ # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
15
+ types: [opened, synchronize]
16
+ branches:
17
+ - '*'
18
+ # Allow manually triggering the workflow.
19
+ workflow_dispatch:
20
+
21
+ permissions:
22
+ contents: read
23
+
24
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
25
+ concurrency:
26
+ # The concurrency group contains the workflow name and the branch name.
27
+ group: "${{ github.workflow }}-${{ github.ref }}"
28
+ cancel-in-progress: true
29
+
30
+ jobs:
31
+ test:
32
+ if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
33
+ name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}${{ matrix.name_extra || '' }}
34
+ runs-on: ubuntu-latest
35
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
36
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
37
+ BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile
38
+ strategy:
39
+ fail-fast: true
40
+ matrix:
41
+ include:
42
+ # NOTE: Heads use default rubygems / bundler; their defaults are custom, unreleased, and from the future!
43
+ # ruby-head
44
+ - ruby: "ruby-head"
45
+ appraisal: "head"
46
+ exec_cmd: "rake test"
47
+ gemfile: "Appraisal.root"
48
+ rubygems: default
49
+ bundler: default
50
+
51
+ # # truffleruby-head
52
+ # - ruby: "truffleruby-head"
53
+ # appraisal: "head"
54
+ # exec_cmd: "rake test"
55
+ # gemfile: "Appraisal.root"
56
+ # rubygems: default
57
+ # bundler: default
58
+
59
+ # jruby-head
60
+ - ruby: "jruby-head"
61
+ appraisal: "head"
62
+ exec_cmd: "rake test"
63
+ gemfile: "Appraisal.root"
64
+ rubygems: default
65
+ bundler: default
66
+
67
+ steps:
68
+ - name: Checkout
69
+ uses: actions/checkout@v5
70
+
71
+ - name: Setup Ruby & RubyGems
72
+ uses: ruby/setup-ruby@v1
73
+ with:
74
+ ruby-version: ${{ matrix.ruby }}
75
+ rubygems: ${{ matrix.rubygems }}
76
+ bundler: ${{ matrix.bundler }}
77
+ bundler-cache: false
78
+
79
+ # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
80
+ # We need to do this first to get appraisal installed.
81
+ # NOTE: This does not use the main Gemfile at all.
82
+ - name: Install Root Appraisal
83
+ run: bundle
84
+ - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}
85
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle
86
+ - name: Tests for ${{ matrix.ruby }}@${{ matrix.appraisal }} via ${{ matrix.exec_cmd }}
87
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,79 @@
1
+ name: JRuby
2
+
3
+ env:
4
+ K_SOUP_COV_DO: false
5
+
6
+ on:
7
+ push:
8
+ branches:
9
+ - 'main'
10
+ tags:
11
+ - '!*' # Do not execute on tags
12
+ pull_request:
13
+ # types specification prevents double build on push & pull request
14
+ # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
15
+ types: [opened, synchronize]
16
+ branches:
17
+ - '*'
18
+ # Allow manually triggering the workflow.
19
+ workflow_dispatch:
20
+
21
+ permissions:
22
+ contents: read
23
+
24
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
25
+ concurrency:
26
+ # The concurrency group contains the workflow name and the branch name.
27
+ group: "${{ github.workflow }}-${{ github.ref }}"
28
+ cancel-in-progress: true
29
+
30
+ jobs:
31
+ test:
32
+ if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
33
+ name: Specs ${{ matrix.ruby }} ${{ matrix.appraisal }}${{ matrix.name_extra || '' }}
34
+ runs-on: ubuntu-22.04
35
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
36
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
37
+ BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile
38
+ strategy:
39
+ matrix:
40
+ include:
41
+ # # NoMethodError: undefined method `resolve_feature_path' for #<Array:0x566f4659>
42
+ # # <main> at /home/runner/.rubies/jruby-9.3.15.0/lib/ruby/gems/shared/gems/erb-4.0.4-java/lib/erb/util.rb:9
43
+ # # jruby-9.3 (targets Ruby 2.6 compatibility)
44
+ # - ruby: "jruby-9.3"
45
+ # appraisal: "ruby-2-6"
46
+ # exec_cmd: "rake test"
47
+ # gemfile: "Appraisal.root"
48
+ # rubygems: default
49
+ # bundler: default
50
+
51
+ # jruby-9.4 (targets Ruby 3.1 compatibility)
52
+ - ruby: "jruby-9.4"
53
+ appraisal: "ruby-3-1"
54
+ exec_cmd: "rake test"
55
+ gemfile: "Appraisal.root"
56
+ rubygems: default
57
+ bundler: default
58
+
59
+ steps:
60
+ - name: Checkout
61
+ uses: actions/checkout@v5
62
+
63
+ - name: Setup Ruby & RubyGems
64
+ uses: ruby/setup-ruby@v1
65
+ with:
66
+ ruby-version: ${{ matrix.ruby }}
67
+ rubygems: ${{ matrix.rubygems }}
68
+ bundler: ${{ matrix.bundler }}
69
+ bundler-cache: false
70
+
71
+ # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
72
+ # We need to do this first to get appraisal installed.
73
+ # NOTE: This does not use the main Gemfile at all.
74
+ - name: Install Root Appraisal
75
+ run: bundle
76
+ - name: Appraisal for ${{ matrix.appraisal }}
77
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle
78
+ - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
79
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,70 @@
1
+ name: MRI 3.0 (EOL)
2
+
3
+ env:
4
+ K_SOUP_COV_DO: false
5
+
6
+ on:
7
+ push:
8
+ branches:
9
+ - 'main'
10
+ tags:
11
+ - '!*' # Do not execute on tags
12
+ pull_request:
13
+ # types specification prevents double build on push & pull request
14
+ # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
15
+ types: [opened, synchronize]
16
+ branches:
17
+ - '*'
18
+ # Allow manually triggering the workflow.
19
+ workflow_dispatch:
20
+
21
+ permissions:
22
+ contents: read
23
+
24
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
25
+ concurrency:
26
+ # The concurrency group contains the workflow name and the branch name.
27
+ group: "${{ github.workflow }}-${{ github.ref }}"
28
+ cancel-in-progress: true
29
+
30
+ jobs:
31
+ test:
32
+ if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
33
+ name: Specs ${{ matrix.ruby }} ${{ matrix.appraisal }}${{ matrix.name_extra || '' }}
34
+ runs-on: ubuntu-22.04
35
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
36
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
37
+ BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile
38
+ strategy:
39
+ fail-fast: false
40
+ matrix:
41
+ include:
42
+ # Ruby 3.0
43
+ - ruby: "ruby-3.0"
44
+ appraisal: "ruby-3-0"
45
+ exec_cmd: "rake test"
46
+ gemfile: "Appraisal.root"
47
+ rubygems: '3.5.23'
48
+ bundler: '2.5.23'
49
+
50
+ steps:
51
+ - name: Checkout
52
+ uses: actions/checkout@v5
53
+
54
+ - name: Setup Ruby & RubyGems
55
+ uses: ruby/setup-ruby@v1
56
+ with:
57
+ ruby-version: ${{ matrix.ruby }}
58
+ rubygems: ${{ matrix.rubygems }}
59
+ bundler: ${{ matrix.bundler }}
60
+ bundler-cache: false
61
+
62
+ # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
63
+ # We need to do this first to get appraisal installed.
64
+ # NOTE: This does not use the main Gemfile at all.
65
+ - name: Install Root Appraisal
66
+ run: bundle
67
+ - name: Appraisal for ${{ matrix.appraisal }}
68
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle
69
+ - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
70
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,88 @@
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 Locked
19
+
20
+ permissions:
21
+ contents: read
22
+
23
+ env:
24
+ # Running coverage, but not validating minimum coverage,
25
+ # because it would be redundant with the coverage workflow.
26
+ # Also we can validate all output formats without breaking CodeCov,
27
+ # since we aren't submitting these reports anywhere.
28
+ K_SOUP_COV_MIN_BRANCH: 71
29
+ K_SOUP_COV_MIN_LINE: 86
30
+ K_SOUP_COV_MIN_HARD: false
31
+ K_SOUP_COV_FORMATTERS: "html,xml,rcov,lcov,json,tty"
32
+ K_SOUP_COV_DO: true
33
+ K_SOUP_COV_MULTI_FORMATTERS: true
34
+ K_SOUP_COV_COMMAND_NAME: "Test Coverage"
35
+
36
+ on:
37
+ push:
38
+ branches:
39
+ - 'main'
40
+ - '*-stable'
41
+ tags:
42
+ - '!*' # Do not execute on tags
43
+ pull_request:
44
+ # types specification prevents double build on push & pull request
45
+ # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
46
+ types: [opened, synchronize]
47
+ branches:
48
+ - '*'
49
+ # Allow manually triggering the workflow.
50
+ workflow_dispatch:
51
+
52
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
53
+ concurrency:
54
+ # The concurrency group contains the workflow name and the branch name.
55
+ group: "${{ github.workflow }}-${{ github.ref }}"
56
+ cancel-in-progress: true
57
+
58
+ jobs:
59
+ test:
60
+ if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
61
+ name: Default rake task w/ main Gemfile.lock ${{ matrix.name_extra || '' }}
62
+ runs-on: ubuntu-latest
63
+ continue-on-error: ${{ matrix.experimental }}
64
+ strategy:
65
+ fail-fast: false
66
+ matrix:
67
+ include:
68
+ # Ruby <whichever version is current, e.g., 3.4 as of 2025-07-12>
69
+ - ruby: "ruby"
70
+ exec_cmd: "rake"
71
+ rubygems: latest
72
+ bundler: latest
73
+ experimental: false
74
+
75
+ steps:
76
+ - name: Checkout
77
+ uses: actions/checkout@v5
78
+
79
+ - name: Setup Ruby & RubyGems
80
+ uses: ruby/setup-ruby@v1
81
+ with:
82
+ ruby-version: ${{ matrix.ruby }}
83
+ rubygems: ${{ matrix.rubygems }}
84
+ bundler: ${{ matrix.bundler }}
85
+ bundler-cache: true
86
+
87
+ - name: Checks the kitchen sink via ${{ matrix.exec_cmd }}
88
+ run: bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,40 @@
1
+ name: Open Collective Backers
2
+
3
+ on:
4
+ schedule:
5
+ # Run once a week on Sunday at 12:00 AM UTC
6
+ - cron: '0 0 * * 0'
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: write
11
+
12
+ jobs:
13
+ update-backers:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@v5
17
+ with:
18
+ persist-credentials: false
19
+ - name: Setup Ruby & RubyGems
20
+ uses: ruby/setup-ruby@v1
21
+ with:
22
+ ruby-version: ruby
23
+ rubygems: default
24
+ bundler: default
25
+ bundler-cache: true
26
+
27
+ - name: README Update
28
+ env:
29
+ # Keep GITHUB_TOKEN for any tools/scripts expecting it, mapped to the same secret
30
+ GITHUB_TOKEN: ${{ secrets.README_UPDATER_TOKEN }}
31
+ README_UPDATER_TOKEN: ${{ secrets.README_UPDATER_TOKEN }}
32
+ REPO: ${{ github.repository }}
33
+ run: |
34
+ git config user.name 'autobolt'
35
+ git config user.email 'autobots@9thbit.net'
36
+ # Use the configured token for authenticated pushes
37
+ git remote set-url origin "https://x-access-token:${README_UPDATER_TOKEN}@github.com/${REPO}.git"
38
+ bin/kettle-readme-backers
39
+ # Push back to the same branch/ref that triggered the workflow (default branch for schedule)
40
+ git push origin HEAD
@@ -0,0 +1,67 @@
1
+ name: Style
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - 'main'
7
+ tags:
8
+ - '!*' # Do not execute on tags
9
+ pull_request:
10
+ # types specification prevents double build on push & pull request
11
+ # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
12
+ types: [opened, synchronize]
13
+ branches:
14
+ - '*'
15
+ # Allow manually triggering the workflow.
16
+ workflow_dispatch:
17
+
18
+ permissions:
19
+ contents: read
20
+
21
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
22
+ concurrency:
23
+ # The concurrency group contains the workflow name and the branch name.
24
+ group: "${{ github.workflow }}-${{ github.ref }}"
25
+ cancel-in-progress: true
26
+
27
+ jobs:
28
+ rubocop:
29
+ if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
30
+ name: Style on ${{ matrix.ruby }}@current
31
+ runs-on: ubuntu-latest
32
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
33
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
34
+ BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile
35
+ strategy:
36
+ fail-fast: false
37
+ matrix:
38
+ include:
39
+ # Style
40
+ - ruby: "ruby"
41
+ appraisal: "style"
42
+ exec_cmd: "rake rubocop_gradual:check"
43
+ gemfile: "Appraisal.root"
44
+ rubygems: latest
45
+ bundler: latest
46
+
47
+ steps:
48
+ - name: Checkout
49
+ uses: actions/checkout@v5
50
+
51
+ - name: Setup Ruby & RubyGems
52
+ uses: ruby/setup-ruby@v1
53
+ with:
54
+ ruby-version: ${{ matrix.ruby }}
55
+ rubygems: ${{ matrix.rubygems }}
56
+ bundler: ${{ matrix.bundler }}
57
+ bundler-cache: false
58
+
59
+ # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
60
+ # We need to do this first to get appraisal installed.
61
+ # NOTE: This does not use the main Gemfile at all.
62
+ - name: Install Root Appraisal
63
+ run: bundle
64
+ - name: Appraisal for ${{ matrix.appraisal }}
65
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle
66
+ - name: Run ${{ matrix.appraisal }} checks via ${{ matrix.exec_cmd }}
67
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,85 @@
1
+ name: MRI Non-EOL
2
+
3
+ env:
4
+ K_SOUP_COV_DO: false
5
+
6
+ on:
7
+ push:
8
+ branches:
9
+ - 'main'
10
+ tags:
11
+ - '!*' # Do not execute on tags
12
+ pull_request:
13
+ # types specification prevents double build on push & pull request
14
+ # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
15
+ types: [opened, synchronize]
16
+ branches:
17
+ - '*'
18
+ # Allow manually triggering the workflow.
19
+ workflow_dispatch:
20
+
21
+ permissions:
22
+ contents: read
23
+
24
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
25
+ concurrency:
26
+ # The concurrency group contains the workflow name and the branch name.
27
+ group: "${{ github.workflow }}-${{ github.ref }}"
28
+ cancel-in-progress: true
29
+
30
+ jobs:
31
+ test:
32
+ if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
33
+ name: Specs ${{ matrix.ruby }} ${{ matrix.appraisal }}${{ matrix.name_extra || '' }}
34
+ runs-on: ubuntu-latest
35
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
36
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
37
+ BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile
38
+ strategy:
39
+ matrix:
40
+ include:
41
+ # Ruby 3.1
42
+ - ruby: "ruby-3.1"
43
+ appraisal: "ruby-3-1"
44
+ exec_cmd: "rake test"
45
+ gemfile: "Appraisal.root"
46
+ rubygems: latest
47
+ bundler: latest
48
+
49
+ # Ruby 3.2
50
+ - ruby: "ruby-3.2"
51
+ appraisal: "ruby-3-2"
52
+ exec_cmd: "rake test"
53
+ gemfile: "Appraisal.root"
54
+ rubygems: latest
55
+ bundler: latest
56
+
57
+ # Ruby 3.3
58
+ - ruby: "ruby-3.3"
59
+ appraisal: "ruby-3-3"
60
+ exec_cmd: "rake test"
61
+ gemfile: "Appraisal.root"
62
+ rubygems: latest
63
+ bundler: latest
64
+
65
+ steps:
66
+ - name: Checkout
67
+ uses: actions/checkout@v5
68
+
69
+ - name: Setup Ruby & RubyGems
70
+ uses: ruby/setup-ruby@v1
71
+ with:
72
+ ruby-version: ${{ matrix.ruby }}
73
+ rubygems: ${{ matrix.rubygems }}
74
+ bundler: ${{ matrix.bundler }}
75
+ bundler-cache: false
76
+
77
+ # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
78
+ # We need to do this first to get appraisal installed.
79
+ # NOTE: This does not use the main Gemfile at all.
80
+ - name: Install Root Appraisal
81
+ run: bundle
82
+ - name: Appraisal for ${{ matrix.ruby }} ${{ matrix.appraisal }}
83
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle
84
+ - name: Tests for ${{ matrix.ruby }} ${{ matrix.appraisal }} via ${{ matrix.exec_cmd }}
85
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,78 @@
1
+ name: Truffle
2
+
3
+ env:
4
+ K_SOUP_COV_DO: false
5
+
6
+ on:
7
+ push:
8
+ branches:
9
+ - 'main'
10
+ tags:
11
+ - '!*' # Do not execute on tags
12
+ pull_request:
13
+ # types specification prevents double build on push & pull request
14
+ # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
15
+ types: [opened, synchronize]
16
+ branches:
17
+ - '*'
18
+ # Allow manually triggering the workflow.
19
+ workflow_dispatch:
20
+
21
+ permissions:
22
+ contents: read
23
+
24
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
25
+ concurrency:
26
+ # The concurrency group contains the workflow name and the branch name.
27
+ group: "${{ github.workflow }}-${{ github.ref }}"
28
+ cancel-in-progress: true
29
+
30
+ jobs:
31
+ test:
32
+ if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
33
+ name: Specs ${{ matrix.ruby }} ${{ matrix.appraisal }}${{ matrix.name_extra || '' }}
34
+ runs-on: ubuntu-22.04
35
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
36
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
37
+ BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile
38
+ strategy:
39
+ matrix:
40
+ include:
41
+ # NOTE: truffleruby does not support upgrading rubygems.
42
+ # truffleruby-23.0 (targets Ruby 3.1 compatibility)
43
+ - ruby: "truffleruby-23.0"
44
+ appraisal: "ruby-3-1"
45
+ exec_cmd: "rake test"
46
+ gemfile: "Appraisal.root"
47
+ rubygems: default
48
+ bundler: default
49
+
50
+ # truffleruby-23.1 (targets Ruby 3.2 compatibility)
51
+ - ruby: "truffleruby-23.1"
52
+ appraisal: "ruby-3-2"
53
+ exec_cmd: "rake test"
54
+ gemfile: "Appraisal.root"
55
+ rubygems: default
56
+ bundler: default
57
+
58
+ steps:
59
+ - name: Checkout
60
+ uses: actions/checkout@v5
61
+
62
+ - name: Setup Ruby & RubyGems
63
+ uses: ruby/setup-ruby@v1
64
+ with:
65
+ ruby-version: ${{ matrix.ruby }}
66
+ rubygems: ${{ matrix.rubygems }}
67
+ bundler: ${{ matrix.bundler }}
68
+ bundler-cache: false
69
+
70
+ # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
71
+ # We need to do this first to get appraisal installed.
72
+ # NOTE: This does not use the main Gemfile at all.
73
+ - name: Install Root Appraisal
74
+ run: bundle
75
+ - name: Appraisal for ${{ matrix.appraisal }}
76
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle
77
+ - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
78
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -0,0 +1,87 @@
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
+ # types specification prevents double build on push & pull request
35
+ # See: https://github.com/Shopify/ruby-style-guide/pull/235#issuecomment-777623642
36
+ types: [opened, synchronize]
37
+ branches:
38
+ - '*'
39
+ # Allow manually triggering the workflow.
40
+ workflow_dispatch:
41
+
42
+ # Cancels all previous workflow runs for the same branch that have not yet completed.
43
+ concurrency:
44
+ # The concurrency group contains the workflow name and the branch name.
45
+ group: "${{ github.workflow }}-${{ github.ref }}"
46
+ cancel-in-progress: true
47
+
48
+ jobs:
49
+ test:
50
+ if: (github.event_name == 'push' || github.event.pull_request.head.repo.owner.login != 'kettle-rb') && !contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')
51
+ name: Default rake task w/ unlocked deps ${{ matrix.name_extra || '' }}
52
+ runs-on: ubuntu-latest
53
+ continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
54
+ env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps
55
+ BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile
56
+ strategy:
57
+ matrix:
58
+ include:
59
+ # Ruby <whichever version is current, e.g., 3.4 as of 2025-07-12>
60
+ - ruby: "ruby"
61
+ appraisal_name: "unlocked_deps"
62
+ exec_cmd: "rake"
63
+ gemfile: "Appraisal.root"
64
+ rubygems: latest
65
+ bundler: latest
66
+
67
+ steps:
68
+ - name: Checkout
69
+ uses: actions/checkout@v5
70
+
71
+ - name: Setup Ruby & RubyGems
72
+ uses: ruby/setup-ruby@v1
73
+ with:
74
+ ruby-version: ${{ matrix.ruby }}
75
+ rubygems: ${{ matrix.rubygems }}
76
+ bundler: ${{ matrix.bundler }}
77
+ bundler-cache: false
78
+
79
+ # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
80
+ # We need to do this first to get appraisal installed.
81
+ # NOTE: This does not use the main Gemfile at all.
82
+ - name: Install Root Appraisal
83
+ run: bundle
84
+ - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal_name }}
85
+ run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle
86
+ - name: Run ${{ matrix.exec_cmd }} on ${{ matrix.ruby }}@${{ matrix.appraisal_name }}
87
+ run: bundle exec appraisal ${{ matrix.appraisal_name }} bundle exec ${{ matrix.exec_cmd }}