fix: an inherited GIT_DIR silently redirected every baseline lookup (… #1488
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- | |
| name: Test | |
| on: | |
| push: | |
| branches: [ master ] | |
| paths: | |
| - '**.gemfile' | |
| - '**.rb' | |
| - '.github/workflows/**' | |
| - '.github/actions/**' | |
| - 'Gemfile*' | |
| - '!bin/**' | |
| pull_request: | |
| types: [ opened, synchronize, reopened, labeled ] | |
| paths: | |
| - '**.gemfile' | |
| - '**.rb' | |
| - '.github/workflows/**' | |
| - '.github/actions/**' | |
| - 'Gemfile*' | |
| - '!bin/**' | |
| schedule: | |
| # Weekly full-suite drift check on master, quiet slot. | |
| - cron: '0 6 * * 1' | |
| workflow_dispatch: | |
| env: | |
| BUNDLE_GEMFILE: gemfiles/rails81_gems.rb | |
| DEBIAN_FRONTEND: noninteractive | |
| FERRUM_PROCESS_TIMEOUT: 40 | |
| JAVA_OPTS: -Xmn2g -Xms6g -Xmx6g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -Xss1m | |
| -XX:+UseG1GC -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -XX:ReservedCodeCacheSize=256m | |
| -XX:+UseCodeCacheFlushing | |
| JRUBY_OPTS: --dev -J-Djruby.thread.pool.enabled=true | |
| MALLOC_ARENA_MAX: 2 | |
| RUBY_GC_HEAP_FREE_SLOTS: 600000 | |
| RUBY_GC_HEAP_GROWTH_FACTOR: 1.1 | |
| RUBY_YJIT_ENABLE: 1 | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| # Test that new contributors can run the tests directly after checkout. | |
| test-minimal-setup: | |
| name: Test with minimal setup | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 5 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: ./.github/actions/setup-ruby-and-dependencies | |
| with: | |
| ruby-version: "4.0" | |
| - run: bin/rake test | |
| env: | |
| SCREENSHOT_DRIVER: vips | |
| functional-test: | |
| name: Functional Test | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| - uses: ./.github/actions/setup-ruby-and-dependencies | |
| with: | |
| ruby-version: "4.0" | |
| cache-apt-packages: true | |
| - run: bin/rake test | |
| env: | |
| COVERAGE: enabled | |
| DISABLE_SKIP_TESTS: 1 | |
| SCREENSHOT_DRIVER: vips | |
| - uses: ./.github/actions/upload-screenshots | |
| if: failure() | |
| with: | |
| name: base-screenshots | |
| pr-comment: 'true' | |
| - name: Uploading Coverage Report | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: coverage | |
| retention-days: 1 | |
| path: coverage | |
| matrix: | |
| name: Test Ruby & Rails | |
| # Cost-intentional: full matrix stays off PRs by default (free-tier | |
| # Actions minutes). Runs on master pushes, manual dispatch, the weekly | |
| # scheduled drift check, and PRs opted in via the 'full-ci' label. | |
| if: > | |
| github.ref == 'refs/heads/master' || | |
| github.event_name == 'workflow_dispatch' || | |
| github.event_name == 'schedule' || | |
| contains(github.event.pull_request.labels.*.name, 'full-ci') | |
| needs: [ functional-test ] | |
| runs-on: ubuntu-latest | |
| # Must fit `max_attempts * timeout_minutes` below, plus ~1 min of setup, | |
| # or the last attempt gets killed mid-run and the cell reports `cancelled` | |
| # -- a dead gate. JRuby: 1 + 15 + 15 = 31. MRI: 1 + 3 + 3 = 7, under 8. | |
| timeout-minutes: ${{ contains(matrix.ruby-version, 'jruby') && 31 || 8 }} | |
| continue-on-error: ${{ matrix.experimental }} | |
| strategy: | |
| matrix: | |
| ruby-version: [ "4.0", "3.4", "3.3", "jruby-10.0" ] | |
| gemfile: | |
| - rails71_gems.rb | |
| - rails72_gems.rb | |
| - rails80_gems.rb | |
| - rails81_gems.rb | |
| experimental: [ false ] | |
| exclude: | |
| # We already tested last version in the functional-test job | |
| - ruby-version: "4.0" | |
| gemfile: rails81_gems.rb | |
| experimental: false | |
| include: | |
| - ruby-version: "4.0" | |
| gemfile: edge_gems.rb | |
| experimental: true | |
| - ruby-version: jruby-head | |
| gemfile: rails81_gems.rb | |
| experimental: true | |
| env: | |
| BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }} | |
| # The JRuby cells are the only place the vips driver runs on a non-MRI | |
| # engine, and `bin/rake test` otherwise leaves them on chunky_png (the | |
| # default in test/system_test_case.rb) -- so ruby-vips' FFI path was | |
| # only ever loaded there, never driven end to end. Test Drivers covers | |
| # both drivers on CRuby; chunky_png stays covered on JRuby by its own | |
| # unit tests, which do not read this variable. | |
| SCREENSHOT_DRIVER: ${{ contains(matrix.ruby-version, 'jruby') && 'vips' || 'chunky_png' }} | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: ./.github/actions/setup-ruby-and-dependencies | |
| with: | |
| ruby-version: ${{ matrix.ruby-version }} | |
| ruby-cache-version: ${{ matrix.ruby-version }}-${{ matrix.gemfile }}-1 | |
| cache-apt-packages: true | |
| - name: Run tests (with 1 retry) | |
| uses: nick-fields/retry@v4 | |
| with: | |
| # Measured on master run 32643567648: a clean JRuby attempt is | |
| # 545-713s depending on the gemfile, so 15 min is ~26% headroom over | |
| # the slowest. MRI is 128s against 3 min. | |
| timeout_minutes: ${{ contains(matrix.ruby-version, 'jruby') && 15 || 3 }} | |
| # Two, not three. A third attempt never fit inside the job cap on | |
| # either engine (JRuby 3x15=45 > 25; MRI 3x3=9 > 8), so it only ever | |
| # got killed partway and reported the cell as `cancelled`. Keeping | |
| # the retry budget inside the cap is what makes the cell a real gate. | |
| # | |
| # The retry exists solely for the intermittent JRuby teardown hang | |
| # (#244), which strands the process for minutes *after* the suite | |
| # prints `Finished in ...`. Once #244 is fixed, drop this to a single | |
| # attempt and the JRuby cap to 16 -- that halves the JRuby bill. | |
| max_attempts: 2 | |
| command: bin/rake test | |
| matrix-screenshot-driver: | |
| name: Test Drivers | |
| # Cost-intentional: full matrix stays off PRs by default (free-tier | |
| # Actions minutes). Runs on master pushes, manual dispatch, the weekly | |
| # scheduled drift check, and PRs opted in via the 'full-ci' label. | |
| if: > | |
| github.ref == 'refs/heads/master' || | |
| github.event_name == 'workflow_dispatch' || | |
| github.event_name == 'schedule' || | |
| contains(github.event.pull_request.labels.*.name, 'full-ci') | |
| needs: [ 'functional-test' ] | |
| strategy: | |
| matrix: | |
| capybara-driver: [ selenium_headless, selenium_chrome_headless, cuprite ] | |
| screenshot-driver: [ vips, chunky_png ] | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: ./.github/actions/setup-ruby-and-dependencies | |
| with: | |
| ruby-version: "4.0" | |
| cache-apt-packages: ${{ matrix.screenshot-driver == 'vips' }} | |
| - name: Cache Selenium | |
| uses: actions/cache@v6 | |
| with: | |
| path: ~/.cache/selenium | |
| key: ${{ runner.os }}-selenium-${{ matrix.capybara-driver }} | |
| - run: bin/rake test:integration | |
| env: | |
| CAPYBARA_DRIVER: ${{ matrix.capybara-driver }} | |
| SCREENSHOT_DRIVER: ${{ matrix.screenshot-driver }} | |
| - uses: ./.github/actions/upload-screenshots | |
| if: failure() | |
| with: | |
| name: screenshots-${{ matrix.capybara-driver }}-${{ matrix.screenshot-driver }} | |
| test-report-upload: | |
| name: Test Report Upload | |
| if: github.event_name == 'workflow_dispatch' | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 5 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: ./.github/actions/setup-ruby-and-dependencies | |
| with: | |
| ruby-version: "4.0" | |
| cache-apt-packages: true | |
| - name: Generate sample report | |
| run: bin/rake 'report:sample[embed]' | |
| - uses: ./.github/actions/upload-screenshots | |
| with: | |
| name: test-report |