Skip to content

build: optimize jruby #848

build: optimize jruby

build: optimize jruby #848

Workflow file for this run

---
name: Test
on:
push:
branches: [ master ]
pull_request:
type: [ opened, synchronize, reopened, review_requested ]
paths:
- '**.gemfile'
- '**.rb'
- '.github/workflows/**'
- '!bin/**'
workflow_dispatch:
env:
BUNDLE_GEMFILE: gemfiles/rails71_gems.rb
DEBIAN_FRONTEND: noninteractive
FERRUM_PROCESS_TIMEOUT: 40
JAVA_OPTS: -Xms4g -Xmx6g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -Xss1m
-XX:+UseG1GC -XX:+TieredCompilation -XX:TieredStopAtLevel=1
JRUBY_OPTS: --dev -J-Djruby.jit.threshold=50 -J-Djruby.jit.max=5000 -J-Djruby.jit.maxsize=1000
-J-Djruby.objectspace.enabled=false -J-Djruby.compile.mode=OFF -J-Djruby.compile.invokedynamic=true
MALLOC_ARENA_MAX: 2
RUBY_GC_HEAP_FREE_SLOTS: 600000
RUBY_GC_HEAP_GROWTH_FACTOR: 1.1
RUBY_GC_HEAP_INIT_SLOTS: 600000
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:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Ruby
uses: ./.github/actions/setup-ruby-and-dependencies
with:
ruby-version: 3.3
- run: bin/rake test
test:
name: Functional Testing
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Ruby and Cache Apt Packages
uses: ./.github/actions/setup-ruby-and-dependencies
with:
ruby-version: 3.3
cache-apt-packages: true
- name: Run Tests with coverage
env:
COVERAGE: enabled
DISABLE_SKIP_TESTS: 1
SCREENSHOT_DRIVER: vips
run: bin/rake test
- name: Setup Ruby and Cache Apt Packages
uses: ./.github/actions/upload-screenshots
with:
name: base-screenshots
- name: Upload Coverage
uses: actions/upload-artifact@v4
with:
name: coverage
retention-days: 1
path: coverage
test-signature:
name: Testing Signatures
needs: [ 'test' ]
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Ruby and Cache Apt Packages
uses: ./.github/actions/setup-ruby-and-dependencies
with:
ruby-version: 3.3
cache-apt-packages: true
- name: Tests Signatures
env:
SCREENSHOT_DRIVER: vips
run: bin/rake test:signatures
matrix:
name: Test Integration Rails & Ruby
if: >
github.ref == 'refs/heads/master' ||
github.event_name == 'workflow_dispatch' ||
github.event.pull_request.requested_reviewers.length > 0
needs: [ test ]
runs-on: ubuntu-latest
timeout-minutes: ${{ matrix.experimental && 12 || 8}}
continue-on-error: ${{ matrix.experimental }}
strategy:
matrix:
ruby-version: [ 3.3, 3.2, 3.1, jruby ]
gemfile:
- rails61_gems.rb
- rails70_gems.rb
- rails71_gems.rb
experimental: [ false ]
exclude:
# We already tested last version
- ruby-version: 3.3
gemfile: rails71_gems.rb
experimental: false
# Tests for Rails 6.1 cannot exit properly on JRuby
- ruby-version: jruby
gemfile: rails61_gems.rb
experimental: false
include:
- ruby-version: 3.3
gemfile: edge_gems.rb
experimental: true
- ruby-version: 3.4.0-preview1
gemfile: edge_gems.rb
experimental: true
- ruby-version: jruby-head
gemfile: rails71_gems.rb
experimental: true
env:
BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Ruby
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
uses: nick-fields/retry@v3
with:
timeout_minutes: ${{ matrix.experimental && 5 || 3 }}
max_attempts: 2
command: bin/rake test
matrix-screenshot-driver:
name: Test Integration Capybara & Image Drivers
if: >
github.ref == 'refs/heads/master' ||
github.event.inputs ||
github.event_name == 'workflow_dispatch' ||
github.event.pull_request.requested_reviewers.length > 0
needs: [ 'test' ]
strategy:
matrix:
screenshot-driver: [ vips, chunky_png ]
capybara-driver: [ selenium_headless, selenium_chrome_headless, cuprite ]
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Ruby and Cache Apt Packages
uses: ./.github/actions/setup-ruby-and-dependencies
with:
ruby-version: 3.3
cache-apt-packages: ${{ matrix.screenshot-driver == 'vips' }}
- name: Cache Selenium
uses: actions/cache@v4
with:
path: ~/.cache/selenium
key: ${{ runner.os }}-selenium-${{ matrix.capybara-driver }}
- name: Run tests
run: bin/rake test:integration
env:
SCREENSHOT_DRIVER: ${{ matrix.screenshot-driver }}
CAPYBARA_DRIVER: ${{ matrix.capybara-driver }}
- name: Setup Ruby and Cache Apt Packages
uses: ./.github/actions/upload-screenshots
with:
name: screenshots-${{ matrix.screenshot-driver }}-${{ matrix.capybara-driver }}