2.1: delete the legacy namespace trees and the driver abstraction #1470
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 | |
| 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 | |
| - 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 }} | |
| # SCREENSHOT_DRIVER is gone: 2.1 removed the driver abstraction, so every | |
| # cell -- JRuby included -- runs libvips. ruby-vips' FFI path on JRuby is | |
| # now a property of the whole matrix rather than of one variable. | |
| 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 | |
| # Was `matrix-screenshot-driver`, a capybara-driver x screenshot-driver grid. | |
| # 2.1 removed the screenshot-driver axis, so this is a capybara-driver matrix | |
| # and nothing else -- half the cells, same coverage. | |
| matrix-capybara-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 ] | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: ./.github/actions/setup-ruby-and-dependencies | |
| with: | |
| ruby-version: "4.0" | |
| # libvips is required now, not one of two options. | |
| cache-apt-packages: true | |
| - 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 }} | |
| - uses: ./.github/actions/upload-screenshots | |
| if: failure() | |
| with: | |
| name: screenshots-${{ matrix.capybara-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 |