kettle-dev 1.1.32 → 1.1.34
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/.github/FUNDING.yml.no-osc.example +13 -0
- data/.github/workflows/codeql-analysis.yml +3 -3
- data/.github/workflows/current.yml +8 -8
- data/.github/workflows/current.yml.example +8 -8
- data/.github/workflows/dep-heads.yml +8 -8
- data/.github/workflows/heads.yml +8 -8
- data/.github/workflows/heads.yml.example +8 -8
- data/.github/workflows/truffle.yml +8 -8
- data/.tool-versions +1 -1
- data/Appraisal.root.gemfile +0 -2
- data/CHANGELOG.md +47 -1
- data/FUNDING.md.no-osc.example +66 -0
- data/Gemfile +1 -1
- data/Gemfile.example +1 -1
- data/README.md +8 -7
- data/README.md.example +8 -7
- data/README.md.no-osc.example +522 -0
- data/REEK +0 -2
- data/Rakefile.example +1 -1
- data/exe/kettle-release +7 -2
- data/gemfiles/modular/optional.gemfile.example +4 -0
- data/lib/kettle/dev/gem_spec_reader.rb +20 -19
- data/lib/kettle/dev/git_adapter.rb +30 -0
- data/lib/kettle/dev/rakelib/appraisal.rake +10 -10
- data/lib/kettle/dev/rakelib/bench.rake +1 -1
- data/lib/kettle/dev/rakelib/reek.rake +1 -1
- data/lib/kettle/dev/release_cli.rb +15 -9
- data/lib/kettle/dev/tasks/template_task.rb +14 -2
- data/lib/kettle/dev/template_helpers.rb +45 -0
- data/lib/kettle/dev/version.rb +1 -1
- data/lib/kettle/dev.rb +5 -0
- data/sig/kettle/dev.rbs +1 -0
- data.tar.gz.sig +0 -0
- metadata +9 -4
- metadata.gz.sig +0 -0
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7bed8f3120c4a6e802739f3a9ad89e6c287bf46daddaf60f76d590a19f181655
         | 
| 4 | 
            +
              data.tar.gz: 7a27825799903260664be7e83b9de1bb4ec209c10fe0e485b78262f4acd051b2
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 14da5405b5541fd3df74d20880853bb09d3a5d5c9186c212b6d40a02deb686ac6fb65294a0dd9bc5dec4a2e17678993951cbd22165ad6dd78c7ad6ef48aa6250
         | 
| 7 | 
            +
              data.tar.gz: 951fceacca3fc66a3b607778bb630193ec3853c24d8f3f2d0cd7abdb1f68d6f483171b5b5fe2d0da1b2b8b7a54bdc88094cbb83c42254bf7e1d56609fbd24cc7
         | 
    
        checksums.yaml.gz.sig
    CHANGED
    
    | Binary file | 
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            # These are supported funding model platforms
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            buy_me_a_coffee: pboling
         | 
| 4 | 
            +
            community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
         | 
| 5 | 
            +
            github: [pboling] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
         | 
| 6 | 
            +
            issuehunt: pboling # Replace with a single IssueHunt username
         | 
| 7 | 
            +
            ko_fi: pboling # Replace with a single Ko-fi username
         | 
| 8 | 
            +
            liberapay: pboling # Replace with a single Liberapay username
         | 
| 9 | 
            +
            open_collective: # Replace with a single Open Collective slug e.g., orgs/cloud-foundry
         | 
| 10 | 
            +
            patreon: galtzo # Replace with a single Patreon username
         | 
| 11 | 
            +
            polar: pboling
         | 
| 12 | 
            +
            thanks_dev: u/gh/pboling
         | 
| 13 | 
            +
            tidelift: rubygems/kettle-dev
         | 
| @@ -42,7 +42,7 @@ jobs: | |
| 42 42 |  | 
| 43 43 | 
             
                # Initializes the CodeQL tools for scanning.
         | 
| 44 44 | 
             
                - name: Initialize CodeQL
         | 
| 45 | 
            -
                  uses: github/codeql-action/init@ | 
| 45 | 
            +
                  uses: github/codeql-action/init@v4
         | 
| 46 46 | 
             
                  with:
         | 
| 47 47 | 
             
                    languages: ${{ matrix.language }}
         | 
| 48 48 | 
             
                    # If you wish to specify custom queries, you can do so here or in a config file.
         | 
| @@ -53,7 +53,7 @@ jobs: | |
| 53 53 | 
             
                # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
         | 
| 54 54 | 
             
                # If this step fails, then you should remove it and run the build manually (see below)
         | 
| 55 55 | 
             
                - name: Autobuild
         | 
| 56 | 
            -
                  uses: github/codeql-action/autobuild@ | 
| 56 | 
            +
                  uses: github/codeql-action/autobuild@v4
         | 
| 57 57 |  | 
| 58 58 | 
             
                # ℹ️ Command-line programs to run using the OS shell.
         | 
| 59 59 | 
             
                # 📚 https://git.io/JvXDl
         | 
| @@ -67,4 +67,4 @@ jobs: | |
| 67 67 | 
             
                #   make release
         | 
| 68 68 |  | 
| 69 69 | 
             
                - name: Perform CodeQL Analysis
         | 
| 70 | 
            -
                  uses: github/codeql-action/analyze@ | 
| 70 | 
            +
                  uses: github/codeql-action/analyze@v4
         | 
| @@ -64,11 +64,11 @@ jobs: | |
| 64 64 |  | 
| 65 65 | 
             
                steps:
         | 
| 66 66 | 
             
                  - name: Checkout
         | 
| 67 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 67 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 68 68 | 
             
                    uses: actions/checkout@v5
         | 
| 69 69 |  | 
| 70 70 | 
             
                  - name: Setup Ruby & RubyGems
         | 
| 71 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 71 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 72 72 | 
             
                    uses: ruby/setup-ruby@v1
         | 
| 73 73 | 
             
                    with:
         | 
| 74 74 | 
             
                      ruby-version: ${{ matrix.ruby }}
         | 
| @@ -80,12 +80,12 @@ jobs: | |
| 80 80 | 
             
                  # We need to do this first to get appraisal installed.
         | 
| 81 81 | 
             
                  # NOTE: This does not use the primary Gemfile at all.
         | 
| 82 82 | 
             
                  - name: Install Root Appraisal
         | 
| 83 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 83 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 84 84 | 
             
                    run: bundle
         | 
| 85 85 |  | 
| 86 86 | 
             
                  - name: "[Attempt 1] Install Root Appraisal"
         | 
| 87 87 | 
             
                    id: bundleAttempt1
         | 
| 88 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 88 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 89 89 | 
             
                    run: bundle
         | 
| 90 90 | 
             
                    # Continue to the next step on failure
         | 
| 91 91 | 
             
                    continue-on-error: true
         | 
| @@ -94,12 +94,12 @@ jobs: | |
| 94 94 | 
             
                  - name: "[Attempt 2] Install Root Appraisal"
         | 
| 95 95 | 
             
                    id: bundleAttempt2
         | 
| 96 96 | 
             
                    # If bundleAttempt1 failed, try again here; Otherwise skip.
         | 
| 97 | 
            -
                    if: ${{ steps.bundleAttempt1.outcome == 'failure' && !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 97 | 
            +
                    if: ${{ steps.bundleAttempt1.outcome == 'failure' && (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 98 98 | 
             
                    run: bundle
         | 
| 99 99 |  | 
| 100 100 | 
             
                  - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
         | 
| 101 101 | 
             
                    id: bundleAppraisalAttempt1
         | 
| 102 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 102 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 103 103 | 
             
                    run: bundle exec appraisal ${{ matrix.appraisal }} bundle
         | 
| 104 104 | 
             
                    # Continue to the next step on failure
         | 
| 105 105 | 
             
                    continue-on-error: true
         | 
| @@ -108,9 +108,9 @@ jobs: | |
| 108 108 | 
             
                  - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
         | 
| 109 109 | 
             
                    id: bundleAppraisalAttempt2
         | 
| 110 110 | 
             
                    # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
         | 
| 111 | 
            -
                    if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 111 | 
            +
                    if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 112 112 | 
             
                    run: bundle exec appraisal ${{ matrix.appraisal }} bundle
         | 
| 113 113 |  | 
| 114 114 | 
             
                  - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
         | 
| 115 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 115 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 116 116 | 
             
                    run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
         | 
| @@ -63,11 +63,11 @@ jobs: | |
| 63 63 |  | 
| 64 64 | 
             
                steps:
         | 
| 65 65 | 
             
                  - name: Checkout
         | 
| 66 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 66 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 67 67 | 
             
                    uses: actions/checkout@v5
         | 
| 68 68 |  | 
| 69 69 | 
             
                  - name: Setup Ruby & RubyGems
         | 
| 70 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 70 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 71 71 | 
             
                    uses: ruby/setup-ruby@v1
         | 
| 72 72 | 
             
                    with:
         | 
| 73 73 | 
             
                      ruby-version: ${{ matrix.ruby }}
         | 
| @@ -79,12 +79,12 @@ jobs: | |
| 79 79 | 
             
                  # We need to do this first to get appraisal installed.
         | 
| 80 80 | 
             
                  # NOTE: This does not use the primary Gemfile at all.
         | 
| 81 81 | 
             
                  - name: Install Root Appraisal
         | 
| 82 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 82 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 83 83 | 
             
                    run: bundle
         | 
| 84 84 |  | 
| 85 85 | 
             
                  - name: "[Attempt 1] Install Root Appraisal"
         | 
| 86 86 | 
             
                    id: bundleAttempt1
         | 
| 87 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 87 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 88 88 | 
             
                    run: bundle
         | 
| 89 89 | 
             
                    # Continue to the next step on failure
         | 
| 90 90 | 
             
                    continue-on-error: true
         | 
| @@ -93,12 +93,12 @@ jobs: | |
| 93 93 | 
             
                  - name: "[Attempt 2] Install Root Appraisal"
         | 
| 94 94 | 
             
                    id: bundleAttempt2
         | 
| 95 95 | 
             
                    # If bundleAttempt1 failed, try again here; Otherwise skip.
         | 
| 96 | 
            -
                    if: ${{ steps.bundleAttempt1.outcome == 'failure' && !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 96 | 
            +
                    if: ${{ steps.bundleAttempt1.outcome == 'failure' && (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 97 97 | 
             
                    run: bundle
         | 
| 98 98 |  | 
| 99 99 | 
             
                  - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
         | 
| 100 100 | 
             
                    id: bundleAppraisalAttempt1
         | 
| 101 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 101 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 102 102 | 
             
                    run: bundle exec appraisal ${{ matrix.appraisal }} bundle
         | 
| 103 103 | 
             
                    # Continue to the next step on failure
         | 
| 104 104 | 
             
                    continue-on-error: true
         | 
| @@ -107,9 +107,9 @@ jobs: | |
| 107 107 | 
             
                  - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
         | 
| 108 108 | 
             
                    id: bundleAppraisalAttempt2
         | 
| 109 109 | 
             
                    # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
         | 
| 110 | 
            -
                    if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 110 | 
            +
                    if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 111 111 | 
             
                    run: bundle exec appraisal ${{ matrix.appraisal }} bundle
         | 
| 112 112 |  | 
| 113 113 | 
             
                  - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
         | 
| 114 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 114 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 115 115 | 
             
                    run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
         | 
| @@ -67,11 +67,11 @@ jobs: | |
| 67 67 |  | 
| 68 68 | 
             
                steps:
         | 
| 69 69 | 
             
                  - name: Checkout
         | 
| 70 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 70 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 71 71 | 
             
                    uses: actions/checkout@v5
         | 
| 72 72 |  | 
| 73 73 | 
             
                  - name: Setup Ruby & RubyGems
         | 
| 74 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 74 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 75 75 | 
             
                    uses: ruby/setup-ruby@v1
         | 
| 76 76 | 
             
                    with:
         | 
| 77 77 | 
             
                      ruby-version: ${{ matrix.ruby }}
         | 
| @@ -83,12 +83,12 @@ jobs: | |
| 83 83 | 
             
                  # We need to do this first to get appraisal installed.
         | 
| 84 84 | 
             
                  # NOTE: This does not use the primary Gemfile at all.
         | 
| 85 85 | 
             
                  - name: Install Root Appraisal
         | 
| 86 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 86 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 87 87 | 
             
                    run: bundle
         | 
| 88 88 |  | 
| 89 89 | 
             
                  - name: "[Attempt 1] Install Root Appraisal"
         | 
| 90 90 | 
             
                    id: bundleAttempt1
         | 
| 91 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 91 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 92 92 | 
             
                    run: bundle
         | 
| 93 93 | 
             
                    # Continue to the next step on failure
         | 
| 94 94 | 
             
                    continue-on-error: true
         | 
| @@ -97,12 +97,12 @@ jobs: | |
| 97 97 | 
             
                  - name: "[Attempt 2] Install Root Appraisal"
         | 
| 98 98 | 
             
                    id: bundleAttempt2
         | 
| 99 99 | 
             
                    # If bundleAttempt1 failed, try again here; Otherwise skip.
         | 
| 100 | 
            -
                    if: ${{ steps.bundleAttempt1.outcome == 'failure' && !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 100 | 
            +
                    if: ${{ steps.bundleAttempt1.outcome == 'failure' && (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 101 101 | 
             
                    run: bundle
         | 
| 102 102 |  | 
| 103 103 | 
             
                  - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
         | 
| 104 104 | 
             
                    id: bundleAppraisalAttempt1
         | 
| 105 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 105 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 106 106 | 
             
                    run: bundle exec appraisal ${{ matrix.appraisal }} bundle
         | 
| 107 107 | 
             
                    # Continue to the next step on failure
         | 
| 108 108 | 
             
                    continue-on-error: true
         | 
| @@ -111,9 +111,9 @@ jobs: | |
| 111 111 | 
             
                  - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
         | 
| 112 112 | 
             
                    id: bundleAppraisalAttempt2
         | 
| 113 113 | 
             
                    # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
         | 
| 114 | 
            -
                    if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 114 | 
            +
                    if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 115 115 | 
             
                    run: bundle exec appraisal ${{ matrix.appraisal }} bundle
         | 
| 116 116 |  | 
| 117 117 | 
             
                  - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
         | 
| 118 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 118 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 119 119 | 
             
                    run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
         | 
    
        data/.github/workflows/heads.yml
    CHANGED
    
    | @@ -65,11 +65,11 @@ jobs: | |
| 65 65 |  | 
| 66 66 | 
             
                steps:
         | 
| 67 67 | 
             
                  - name: Checkout
         | 
| 68 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 68 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 69 69 | 
             
                    uses: actions/checkout@v5
         | 
| 70 70 |  | 
| 71 71 | 
             
                  - name: Setup Ruby & RubyGems
         | 
| 72 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 72 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 73 73 | 
             
                    uses: ruby/setup-ruby@v1
         | 
| 74 74 | 
             
                    with:
         | 
| 75 75 | 
             
                      ruby-version: ${{ matrix.ruby }}
         | 
| @@ -81,12 +81,12 @@ jobs: | |
| 81 81 | 
             
                  # We need to do this first to get appraisal installed.
         | 
| 82 82 | 
             
                  # NOTE: This does not use the primary Gemfile at all.
         | 
| 83 83 | 
             
                  - name: Install Root Appraisal
         | 
| 84 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 84 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 85 85 | 
             
                    run: bundle
         | 
| 86 86 |  | 
| 87 87 | 
             
                  - name: "[Attempt 1] Install Root Appraisal"
         | 
| 88 88 | 
             
                    id: bundleAttempt1
         | 
| 89 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 89 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 90 90 | 
             
                    run: bundle
         | 
| 91 91 | 
             
                    # Continue to the next step on failure
         | 
| 92 92 | 
             
                    continue-on-error: true
         | 
| @@ -95,12 +95,12 @@ jobs: | |
| 95 95 | 
             
                  - name: "[Attempt 2] Install Root Appraisal"
         | 
| 96 96 | 
             
                    id: bundleAttempt2
         | 
| 97 97 | 
             
                    # If bundleAttempt1 failed, try again here; Otherwise skip.
         | 
| 98 | 
            -
                    if: ${{ steps.bundleAttempt1.outcome == 'failure' && !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 98 | 
            +
                    if: ${{ steps.bundleAttempt1.outcome == 'failure' && (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 99 99 | 
             
                    run: bundle
         | 
| 100 100 |  | 
| 101 101 | 
             
                  - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
         | 
| 102 102 | 
             
                    id: bundleAppraisalAttempt1
         | 
| 103 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 103 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 104 104 | 
             
                    run: bundle exec appraisal ${{ matrix.appraisal }} bundle
         | 
| 105 105 | 
             
                    # Continue to the next step on failure
         | 
| 106 106 | 
             
                    continue-on-error: true
         | 
| @@ -109,9 +109,9 @@ jobs: | |
| 109 109 | 
             
                  - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
         | 
| 110 110 | 
             
                    id: bundleAppraisalAttempt2
         | 
| 111 111 | 
             
                    # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
         | 
| 112 | 
            -
                    if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 112 | 
            +
                    if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 113 113 | 
             
                    run: bundle exec appraisal ${{ matrix.appraisal }} bundle
         | 
| 114 114 |  | 
| 115 115 | 
             
                  - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
         | 
| 116 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 116 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 117 117 | 
             
                    run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
         | 
| @@ -64,11 +64,11 @@ jobs: | |
| 64 64 |  | 
| 65 65 | 
             
                steps:
         | 
| 66 66 | 
             
                  - name: Checkout
         | 
| 67 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 67 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 68 68 | 
             
                    uses: actions/checkout@v5
         | 
| 69 69 |  | 
| 70 70 | 
             
                  - name: Setup Ruby & RubyGems
         | 
| 71 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 71 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 72 72 | 
             
                    uses: ruby/setup-ruby@v1
         | 
| 73 73 | 
             
                    with:
         | 
| 74 74 | 
             
                      ruby-version: ${{ matrix.ruby }}
         | 
| @@ -80,12 +80,12 @@ jobs: | |
| 80 80 | 
             
                  # We need to do this first to get appraisal installed.
         | 
| 81 81 | 
             
                  # NOTE: This does not use the primary Gemfile at all.
         | 
| 82 82 | 
             
                  - name: Install Root Appraisal
         | 
| 83 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 83 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 84 84 | 
             
                    run: bundle
         | 
| 85 85 |  | 
| 86 86 | 
             
                  - name: "[Attempt 1] Install Root Appraisal"
         | 
| 87 87 | 
             
                    id: bundleAttempt1
         | 
| 88 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 88 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 89 89 | 
             
                    run: bundle
         | 
| 90 90 | 
             
                    # Continue to the next step on failure
         | 
| 91 91 | 
             
                    continue-on-error: true
         | 
| @@ -94,12 +94,12 @@ jobs: | |
| 94 94 | 
             
                  - name: "[Attempt 2] Install Root Appraisal"
         | 
| 95 95 | 
             
                    id: bundleAttempt2
         | 
| 96 96 | 
             
                    # If bundleAttempt1 failed, try again here; Otherwise skip.
         | 
| 97 | 
            -
                    if: ${{ steps.bundleAttempt1.outcome == 'failure' && !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 97 | 
            +
                    if: ${{ steps.bundleAttempt1.outcome == 'failure' && (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 98 98 | 
             
                    run: bundle
         | 
| 99 99 |  | 
| 100 100 | 
             
                  - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
         | 
| 101 101 | 
             
                    id: bundleAppraisalAttempt1
         | 
| 102 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 102 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 103 103 | 
             
                    run: bundle exec appraisal ${{ matrix.appraisal }} bundle
         | 
| 104 104 | 
             
                    # Continue to the next step on failure
         | 
| 105 105 | 
             
                    continue-on-error: true
         | 
| @@ -108,9 +108,9 @@ jobs: | |
| 108 108 | 
             
                  - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
         | 
| 109 109 | 
             
                    id: bundleAppraisalAttempt2
         | 
| 110 110 | 
             
                    # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
         | 
| 111 | 
            -
                    if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 111 | 
            +
                    if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 112 112 | 
             
                    run: bundle exec appraisal ${{ matrix.appraisal }} bundle
         | 
| 113 113 |  | 
| 114 114 | 
             
                  - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
         | 
| 115 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 115 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 116 116 | 
             
                    run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
         | 
| @@ -47,11 +47,11 @@ jobs: | |
| 47 47 |  | 
| 48 48 | 
             
                steps:
         | 
| 49 49 | 
             
                  - name: Checkout
         | 
| 50 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 50 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 51 51 | 
             
                    uses: actions/checkout@v5
         | 
| 52 52 |  | 
| 53 53 | 
             
                  - name: Setup Ruby & RubyGems
         | 
| 54 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 54 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 55 55 | 
             
                    uses: ruby/setup-ruby@v1
         | 
| 56 56 | 
             
                    with:
         | 
| 57 57 | 
             
                      ruby-version: ${{ matrix.ruby }}
         | 
| @@ -63,12 +63,12 @@ jobs: | |
| 63 63 | 
             
                  # We need to do this first to get appraisal installed.
         | 
| 64 64 | 
             
                  # NOTE: This does not use the primary Gemfile at all.
         | 
| 65 65 | 
             
                  - name: Install Root Appraisal
         | 
| 66 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 66 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 67 67 | 
             
                    run: bundle
         | 
| 68 68 |  | 
| 69 69 | 
             
                  - name: "[Attempt 1] Install Root Appraisal"
         | 
| 70 70 | 
             
                    id: bundleAttempt1
         | 
| 71 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 71 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 72 72 | 
             
                    run: bundle
         | 
| 73 73 | 
             
                    # Continue to the next step on failure
         | 
| 74 74 | 
             
                    continue-on-error: true
         | 
| @@ -77,12 +77,12 @@ jobs: | |
| 77 77 | 
             
                  - name: "[Attempt 2] Install Root Appraisal"
         | 
| 78 78 | 
             
                    id: bundleAttempt2
         | 
| 79 79 | 
             
                    # If bundleAttempt1 failed, try again here; Otherwise skip.
         | 
| 80 | 
            -
                    if: ${{ steps.bundleAttempt1.outcome == 'failure' && !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 80 | 
            +
                    if: ${{ steps.bundleAttempt1.outcome == 'failure' && (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 81 81 | 
             
                    run: bundle
         | 
| 82 82 |  | 
| 83 83 | 
             
                  - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
         | 
| 84 84 | 
             
                    id: bundleAppraisalAttempt1
         | 
| 85 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 85 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 86 86 | 
             
                    run: bundle exec appraisal ${{ matrix.appraisal }} bundle
         | 
| 87 87 | 
             
                    # Continue to the next step on failure
         | 
| 88 88 | 
             
                    continue-on-error: true
         | 
| @@ -91,9 +91,9 @@ jobs: | |
| 91 91 | 
             
                  - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
         | 
| 92 92 | 
             
                    id: bundleAppraisalAttempt2
         | 
| 93 93 | 
             
                    # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
         | 
| 94 | 
            -
                    if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 94 | 
            +
                    if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 95 95 | 
             
                    run: bundle exec appraisal ${{ matrix.appraisal }} bundle
         | 
| 96 96 |  | 
| 97 97 | 
             
                  - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
         | 
| 98 | 
            -
                    if: ${{ !(env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 98 | 
            +
                    if: ${{ (env.ACT && !(startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) || (!env.ACT && (startsWith(matrix.ruby, 'jruby')) || startsWith(matrix.ruby, 'truffleruby')) }}
         | 
| 99 99 | 
             
                    run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
         | 
    
        data/.tool-versions
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            ruby 3.4. | 
| 1 | 
            +
            ruby 3.4.7
         | 
    
        data/Appraisal.root.gemfile
    CHANGED
    
    
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -30,6 +30,48 @@ Please file a bug if you notice a violation of semantic versioning. | |
| 30 30 |  | 
| 31 31 | 
             
            ### Security
         | 
| 32 32 |  | 
| 33 | 
            +
            ## [1.1.34] - 2025-10-20
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            - TAG: [v1.1.34][1.1.34t]
         | 
| 36 | 
            +
            - COVERAGE: 96.10% -- 3938/4098 lines in 26 files
         | 
| 37 | 
            +
            - BRANCH COVERAGE: 80.92% -- 1624/2007 branches in 26 files
         | 
| 38 | 
            +
            - 79.68% documented
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            ### Changed
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            - kettle-release: Make step 17 only push the checksum commit; bin/gem_checksums creates the commit internally.
         | 
| 43 | 
            +
            - kettle-release: Ensure a final push of tags occurs after checksums and optional GitHub release; supports an 'all' remote aggregator when configured.
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            ### Fixed
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            - fixed rake task compatibility with BUNDLE_PATH (i.e. vendored bundle)
         | 
| 48 | 
            +
              - appraisal tasks
         | 
| 49 | 
            +
              - bench tasks
         | 
| 50 | 
            +
              - reek tasks
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            ## [1.1.33] - 2025-10-13
         | 
| 53 | 
            +
             | 
| 54 | 
            +
            - TAG: [v1.1.33][1.1.33t]
         | 
| 55 | 
            +
            - COVERAGE: 20.83% -- 245/1176 lines in 9 files
         | 
| 56 | 
            +
            - BRANCH COVERAGE: 7.31% -- 43/588 branches in 9 files
         | 
| 57 | 
            +
            - 79.57% documented
         | 
| 58 | 
            +
             | 
| 59 | 
            +
            ### Added
         | 
| 60 | 
            +
             | 
| 61 | 
            +
            - handling for no open source collective, specified by:
         | 
| 62 | 
            +
              - `ENV["FUNDING_ORG"]` set to "false", or
         | 
| 63 | 
            +
              - `ENV["OPENCOLLECTIVE_HANDLE"]` set to "false"
         | 
| 64 | 
            +
            - added codeberg gem source
         | 
| 65 | 
            +
             | 
| 66 | 
            +
            ### Changed
         | 
| 67 | 
            +
             | 
| 68 | 
            +
            - removed redundant github gem source
         | 
| 69 | 
            +
             | 
| 70 | 
            +
            ### Fixed
         | 
| 71 | 
            +
             | 
| 72 | 
            +
            - added addressable to optional modular gemfile template, as it is required for kettle-pre-release
         | 
| 73 | 
            +
            - handling of env.ACT conditions in workflows
         | 
| 74 | 
            +
             | 
| 33 75 | 
             
            ## [1.1.32] - 2025-10-07
         | 
| 34 76 |  | 
| 35 77 | 
             
            - TAG: [v1.1.32][1.1.32t]
         | 
| @@ -1058,7 +1100,11 @@ Please file a bug if you notice a violation of semantic versioning. | |
| 1058 1100 | 
             
              - Selecting will run the selected workflow via `act`
         | 
| 1059 1101 | 
             
              - This may move to its own gem in the future.
         | 
| 1060 1102 |  | 
| 1061 | 
            -
            [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.1. | 
| 1103 | 
            +
            [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.34...HEAD
         | 
| 1104 | 
            +
            [1.1.34]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.33...v1.1.34
         | 
| 1105 | 
            +
            [1.1.34t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.34
         | 
| 1106 | 
            +
            [1.1.33]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.32...v1.1.33
         | 
| 1107 | 
            +
            [1.1.33t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.33
         | 
| 1062 1108 | 
             
            [1.1.32]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.31...v1.1.32
         | 
| 1063 1109 | 
             
            [1.1.32t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.32
         | 
| 1064 1110 | 
             
            [1.1.31]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.30...v1.1.31
         | 
| @@ -0,0 +1,66 @@ | |
| 1 | 
            +
            <!-- RELEASE-NOTES-FOOTER-START -->
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Official Discord 👉️ [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite]
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Many paths lead to being a sponsor or a backer of this project. Are you on such a path?
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal]
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate to my FLOSS or refugee efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS or refugee efforts using Patreon][🖇patreon-img]][🖇patreon]
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
         | 
| 12 | 
            +
            [⛳liberapay]: https://liberapay.com/pboling/donate
         | 
| 13 | 
            +
            [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
         | 
| 14 | 
            +
            [🖇sponsor]: https://github.com/sponsors/pboling
         | 
| 15 | 
            +
            [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
         | 
| 16 | 
            +
            [🖇polar]: https://polar.sh/pboling
         | 
| 17 | 
            +
            [🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
         | 
| 18 | 
            +
            [🖇kofi]: https://ko-fi.com/O5O86SNP4
         | 
| 19 | 
            +
            [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
         | 
| 20 | 
            +
            [🖇patreon]: https://patreon.com/galtzo
         | 
| 21 | 
            +
            [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
         | 
| 22 | 
            +
            [🖇buyme]: https://www.buymeacoffee.com/pboling
         | 
| 23 | 
            +
            [🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
         | 
| 24 | 
            +
            [🖇paypal]: https://www.paypal.com/paypalme/peterboling
         | 
| 25 | 
            +
            [✉️discord-invite]: https://discord.gg/3qme4XHNKN
         | 
| 26 | 
            +
            [✉️discord-invite-img]: https://img.shields.io/discord/1373797679469170758?style=flat
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            <!-- RELEASE-NOTES-FOOTER-END -->
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            # 🤑 Request for Help
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            Maintainers have teeth and need to pay their dentists.
         | 
| 33 | 
            +
            After getting laid off in an RIF in March and filled with many dozens of rejections,
         | 
| 34 | 
            +
            I'm now spending ~60+ hours a week building open source tools.
         | 
| 35 | 
            +
            I'm hoping to be able to pay for my kids' health insurance this month,
         | 
| 36 | 
            +
            so if you value the work I am doing, I need your support.
         | 
| 37 | 
            +
            Please consider sponsoring me or the project.
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            To join the community or get help 👇️ Join the Discord.
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            To say "thanks for maintaining such a great tool" ☝️ Join the Discord or 👇️ send money.
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay-img] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal-img]
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            # Another Way to Support Open Source Software
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            > How wonderful it is that nobody need wait a single moment before starting to improve the world.<br/>
         | 
| 50 | 
            +
            >—Anne Frank
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            I’m driven by a passion to foster a thriving open-source community – a space where people can tackle complex problems, no matter how small.  Revitalizing libraries that have fallen into disrepair, and building new libraries focused on solving real-world challenges, are my passions — totaling 79 hours of FLOSS coding over just the past seven days, a pretty regular week for me.  I was recently affected by layoffs, and the tech jobs market is unwelcoming. I’m reaching out here because your support would significantly aid my efforts to provide for my family, and my farm (11 🐔 chickens, 2 🐶 dogs, 3 🐰 rabbits, 8 🐈 cats).
         | 
| 53 | 
            +
             | 
| 54 | 
            +
            If you work at a company that uses my work, please encourage them to support me as a corporate sponsor. My work on gems you use might show up in `bundle fund`.
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed to empower open-source developers like myself to get paid for the work we do, in a sustainable way. Please give it a look.
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            **[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            [⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
         | 
| 61 | 
            +
            [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
         | 
| 62 | 
            +
            [🖇buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff
         | 
| 63 | 
            +
            [🖇paypal-bottom-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge&logo=paypal&color=0A0A0A
         | 
| 64 | 
            +
            [🖇floss-funding.dev]: https://floss-funding.dev
         | 
| 65 | 
            +
            [🖇floss-funding-gem]: https://github.com/galtzo-floss/floss_funding
         | 
| 66 | 
            +
            [✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge
         | 
    
        data/Gemfile
    CHANGED
    
    | @@ -2,7 +2,7 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            source "https://gem.coop"
         | 
| 4 4 |  | 
| 5 | 
            -
            git_source(: | 
| 5 | 
            +
            git_source(:codeberg) { |repo_name| "https://codeberg.org/#{repo_name}" }
         | 
| 6 6 | 
             
            git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" }
         | 
| 7 7 |  | 
| 8 8 | 
             
            #### IMPORTANT #######################################################
         | 
    
        data/Gemfile.example
    CHANGED
    
    | @@ -2,7 +2,7 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            source "https://gem.coop"
         | 
| 4 4 |  | 
| 5 | 
            -
            git_source(: | 
| 5 | 
            +
            git_source(:codeberg) { |repo_name| "https://codeberg.org/#{repo_name}" }
         | 
| 6 6 | 
             
            git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" }
         | 
| 7 7 |  | 
| 8 8 | 
             
            #### IMPORTANT #######################################################
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,9 +1,9 @@ | |
| 1 | 
            -
            | 📍 NOTE | 
| 2 | 
            -
             | 
| 3 | 
            -
            | RubyGems.org was [recently compromised][draper-security] in a [hostile takeover][draper-takeover] about which [many lies][draper-lies] have been told. | 
| 4 | 
            -
            | I'm in the process of adding warnings to some important gems because I [don't condone the theft][draper-theft] of the bundler and rubygems-update projects. | 
| 5 | 
            -
            | Once publishing to [gem.coop][gem-coop] is available I will stop publishing to RubyGems.org. | 
| 6 | 
            -
            | Please see [here][gem-coop] and [here][martin-ann] for more info on what comes next. | 
| 1 | 
            +
            | 📍 NOTE                                                                                                                                                                                      |
         | 
| 2 | 
            +
            |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
         | 
| 3 | 
            +
            | RubyGems.org was [recently compromised][draper-security] in a [hostile takeover][draper-takeover] about which [many lies][draper-lies] have been told.                                       |
         | 
| 4 | 
            +
            | I'm in the process of adding warnings to some important gems because I [don't condone the theft][draper-theft] of the bundler and rubygems-update projects.                                  |
         | 
| 5 | 
            +
            | Once publishing to [gem.coop][gem-coop] is available I will stop publishing to RubyGems.org, unless they make amends. I am writing my a new federated gem-server.                            |
         | 
| 6 | 
            +
            | Please see [here][gem-coop] and [here][martin-ann] for more info on what comes next. This ["Technology for Humans" podcast episode][reinteractive-podcast] is the best summary I'm aware of. |
         | 
| 7 7 |  | 
| 8 8 | 
             
            [draper-security]: https://joel.drapper.me/p/ruby-central-security-measures/
         | 
| 9 9 | 
             
            [draper-takeover]: https://joel.drapper.me/p/ruby-central-takeover/
         | 
| @@ -11,6 +11,7 @@ | |
| 11 11 | 
             
            [draper-theft]: https://joel.drapper.me/p/ruby-central/
         | 
| 12 12 | 
             
            [gem-coop]: https://gem.coop
         | 
| 13 13 | 
             
            [martin-ann]: https://martinemde.com/2025/10/05/announcing-gem-coop.html
         | 
| 14 | 
            +
            [reinteractive-podcast]: https://youtu.be/_H4qbtC5qzU?si=BvuBU90R2wAqD2E6
         | 
| 14 15 |  | 
| 15 16 | 
             
            [![Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0][🖼️galtzo-i]][🖼️galtzo-discord] [![ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5][🖼️ruby-lang-i]][🖼️ruby-lang] [![kettle-dev Logo by Aboling0, CC BY-SA 4.0][🖼️kettle-dev-i]][🖼️kettle-dev]
         | 
| 16 17 |  | 
| @@ -939,7 +940,7 @@ Thanks for RTFM. ☺️ | |
| 939 940 | 
             
            [📌gitmoji]:https://gitmoji.dev
         | 
| 940 941 | 
             
            [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
         | 
| 941 942 | 
             
            [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
         | 
| 942 | 
            -
            [🧮kloc-img]: https://img.shields.io/badge/KLOC-4. | 
| 943 | 
            +
            [🧮kloc-img]: https://img.shields.io/badge/KLOC-4.098-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
         | 
| 943 944 | 
             
            [🔐security]: SECURITY.md
         | 
| 944 945 | 
             
            [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
         | 
| 945 946 | 
             
            [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
         |