Skip to content

Prepend project bin/ to PATH in bundle exec for load-relative Ruby #12072

Prepend project bin/ to PATH in bundle exec for load-relative Ruby

Prepend project bin/ to PATH in bundle exec for load-relative Ruby #12072

Workflow file for this run

name: bundler
on:
pull_request:
push:
branches:
- master
concurrency:
group: ci-${{ github.ref }}-${{ github.workflow }}
cancel-in-progress: true
permissions: # added using https://github.com/step-security/secure-workflows
contents: read
defaults:
run:
shell: bash
jobs:
bundler:
name: Bundler on ${{ matrix.os.name }} (${{ matrix.ruby.name }})
runs-on: ${{ matrix.os.value }}
strategy:
fail-fast: false
matrix:
os:
- { name: Ubuntu, value: ubuntu-24.04 }
ruby:
- { name: ruby-3.2, value: 3.2.9 }
- { name: ruby-3.3, value: 3.3.10 }
- { name: ruby-3.4, value: 3.4.8 }
- { name: ruby-4.0, value: 4.0.0 }
include:
- { os: { name: macOS, value: macos-15 }, ruby: { name: ruby-3.2, value: 3.2.9 }, timeout: 90 }
- { os: { name: macOS, value: macos-15 }, ruby: { name: ruby-3.3, value: 3.3.10 }, timeout: 90 }
- { os: { name: macOS, value: macos-15 }, ruby: { name: ruby-3.4, value: 3.4.8 }, timeout: 90 }
- { os: { name: macOS, value: macos-15 }, ruby: { name: ruby-4.0, value: 4.0.0 }, timeout: 90 }
# Ruby 3.2 is about 20 minutes slower than 3.3/3.4, so it will be excluded from testing.
- { os: { name: Windows, value: windows-2025 }, ruby: { name: ruby-3.3, value: 3.3.10 }, timeout: 150, group: a }
- { os: { name: Windows, value: windows-2025 }, ruby: { name: ruby-3.3, value: 3.3.10 }, timeout: 150, group: b }
- { os: { name: Windows, value: windows-2025 }, ruby: { name: ruby-3.3, value: 3.3.10 }, timeout: 150, group: c }
- { os: { name: Windows, value: windows-2025 }, ruby: { name: ruby-3.3, value: 3.3.10 }, timeout: 150, group: d }
- { os: { name: Windows, value: windows-2025 }, ruby: { name: ruby-3.4, value: 3.4.8 }, timeout: 150, group: a }
- { os: { name: Windows, value: windows-2025 }, ruby: { name: ruby-3.4, value: 3.4.8 }, timeout: 150, group: b }
- { os: { name: Windows, value: windows-2025 }, ruby: { name: ruby-3.4, value: 3.4.8 }, timeout: 150, group: c }
- { os: { name: Windows, value: windows-2025 }, ruby: { name: ruby-3.4, value: 3.4.8 }, timeout: 150, group: d }
# - { os: { name: Windows, value: windows-2025 }, ruby: { name: ruby-4.0, value: 4.0.0 }, timeout: 150, group: a }
# - { os: { name: Windows, value: windows-2025 }, ruby: { name: ruby-4.0, value: 4.0.0 }, timeout: 150, group: b }
# - { os: { name: Windows, value: windows-2025 }, ruby: { name: ruby-4.0, value: 4.0.0 }, timeout: 150, group: c }
# - { os: { name: Windows, value: windows-2025 }, ruby: { name: ruby-4.0, value: 4.0.0 }, timeout: 150, group: d }
- { os: { name: Ubuntu, value: ubuntu-24.04 }, ruby: { name: jruby, value: jruby-10.0.2.0 } }
- { os: { name: Windows, value: windows-2025 }, ruby: { name: jruby, value: jruby-10.0.2.0 } }
- { os: { name: Ubuntu, value: ubuntu-24.04 }, ruby: { name: ruby-4.0 (psych), value: 4.0.0 }, use_psych: true }
env:
RGV: .
RUBYOPT: --disable-gems
RUBYGEMS_USE_PSYCH: ${{ matrix.use_psych || 'false' }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Setup ruby
uses: ruby/setup-ruby@3ff19f5e2baf30647122352b96108b1fbe250c64 # v1.299.0
with:
ruby-version: ${{ matrix.ruby.value }}
bundler: none
- name: Restore gem caches
uses: actions/cache/restore@v5
id: restore-cache
with:
path: |
tmp/gems/base
tmp/gems/standard
tmp/gems/rubocop
key: gem-cache-${{ hashFiles('tool/bundler/test_gems.rb.lock', 'tool/bundler/standard_gems.rb.lock', 'tool/bundler/rubocop_gems.rb.lock') }}-${{ matrix.ruby.value }}-${{ matrix.os.name }}
- name: Install test dependencies
if: steps.restore-cache.outputs.cache-hit != 'true'
run: bundle install
env:
BUNDLE_PATH: ../../tmp/gems/base
BUNDLE_GEMFILE: tool/bundler/test_gems.rb
BUNDLE_CLEAN: 1
- name: Install standard dependencies
if: steps.restore-cache.outputs.cache-hit != 'true'
run: bundle install
env:
BUNDLE_PATH: ../../tmp/gems/standard
BUNDLE_GEMFILE: tool/bundler/standard_gems.rb
BUNDLE_CLEAN: 1
- name: Install rubocop dependencies
if: steps.restore-cache.outputs.cache-hit != 'true'
run: bundle install
env:
BUNDLE_PATH: ../../tmp/gems/rubocop
BUNDLE_GEMFILE: tool/bundler/rubocop_gems.rb
BUNDLE_CLEAN: 1
- name: Save gems cache
if: steps.restore-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v5
with:
path: |
tmp/gems/base
tmp/gems/standard
tmp/gems/rubocop
key: ${{ steps.restore-cache.outputs.cache-primary-key }}
- name: Setup java
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: temurin
java-version: 21.0.7
if: matrix.ruby.name == 'jruby'
- name: Prepare dependencies
run: |
bin/rake dev:deps
- name: Run Test (CRuby)
run: |
bin/parallel_rspec
if: matrix.ruby.name != 'jruby' && matrix.os.name != 'Windows'
- name: Run Test (CRuby on Windows - Group ${{ matrix.group }})
run: |
bin/parallel_rspec --tag windows_${{ matrix.group }}
if: matrix.ruby.name != 'jruby' && matrix.os.name == 'Windows'
- name: Run Test (JRuby)
run: |
bin/parallel_rspec --tag jruby_only --tag jruby
if: matrix.ruby.name == 'jruby' && matrix.os.name == 'Ubuntu'
- name: Run a warbler project
run: |
bin/rake bundler:install:local
cd spec/realworld/fixtures/warbler
bundle install
bundle exec warble
java -jar warbler.jar
if: matrix.ruby.name == 'jruby' && matrix.os.name == 'Ubuntu'
timeout-minutes: ${{ matrix.timeout || 60 }}
all-pass:
name: All bundler jobs pass
if: always()
needs:
- bundler
runs-on: ubuntu-latest
steps:
- name: check dependent jobs
uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe # v1.2.2
with:
jobs: ${{ toJSON(needs) }}