Skip to content

2.1: delete the legacy namespace trees and the driver abstraction #1470

2.1: delete the legacy namespace trees and the driver abstraction

2.1: delete the legacy namespace trees and the driver abstraction #1470

Workflow file for this run

---
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