mirror of
https://github.com/ruby/ruby.git
synced 2026-10-28 16:36:20 +08:00
Bumps the github-actions group with 1 update in the / directory: [ruby/setup-ruby](https://github.com/ruby/setup-ruby). Updates `ruby/setup-ruby` from 1.334.0 to 1.335.0 - [Release notes](https://github.com/ruby/setup-ruby/releases) - [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb) - [Commits](https://github.com/ruby/setup-ruby/compare/26e5b7d197ebf60545ee9667bcbace0be11ccaec...7f797815d8adceb1c412e7abefdd1ab4abc47a5f) --- updated-dependencies: - dependency-name: ruby/setup-ruby dependency-version: 1.335.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions ... Signed-off-by: dependabot[bot] <support@github.com>
345 lines
12 KiB
YAML
345 lines
12 KiB
YAML
name: ZJIT Ubuntu
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
paths-ignore:
|
|
- 'doc/**'
|
|
- '**/man/*'
|
|
- '**.md'
|
|
- '**.rdoc'
|
|
- '**/.document'
|
|
- '.*.yml'
|
|
pull_request:
|
|
types:
|
|
- opened
|
|
- synchronize
|
|
- reopened
|
|
# Do not use paths-ignore for required status checks
|
|
# https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks
|
|
merge_group:
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
|
|
cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
env:
|
|
# Work around transient crates.io download failures (curl HTTP/2 framing / partial transfer)
|
|
CARGO_NET_RETRY: 10
|
|
CARGO_HTTP_MULTIPLEXING: false
|
|
RUST_BACKTRACE: 1
|
|
ZJIT_RB_BUG: 1
|
|
|
|
jobs:
|
|
lint:
|
|
name: cargo clippy
|
|
|
|
runs-on: ubuntu-22.04
|
|
|
|
if: >-
|
|
${{!(false
|
|
|| contains(github.event.head_commit.message, '[DOC]')
|
|
|| contains(github.event.pull_request.title, '[DOC]')
|
|
|| contains(github.event.pull_request.labels.*.name, 'Documentation')
|
|
|| (github.event.pull_request.user.login == 'dependabot[bot]' && !startsWith(github.head_ref, 'dependabot/cargo'))
|
|
)}}
|
|
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- run: cargo clippy --all-targets --all-features
|
|
working-directory: zjit
|
|
|
|
doc-test:
|
|
name: cargo test --doc
|
|
runs-on: ubuntu-22.04
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- run: cargo test --doc
|
|
working-directory: zjit
|
|
|
|
make:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- test_task: 'check'
|
|
run_opts: '--zjit-disable-hir-opt --zjit-call-threshold=1'
|
|
specopts: '-T --zjit-disable-hir-opt -T --zjit-call-threshold=1'
|
|
configure: '--enable-zjit=dev'
|
|
|
|
## Run with default options (inliner enabled) ##
|
|
- test_task: 'check'
|
|
run_opts: '--zjit-call-threshold=1'
|
|
specopts: '-T --zjit-call-threshold=1'
|
|
configure: '--enable-zjit=dev'
|
|
|
|
# The optimizer benefits from at least 1 iteration of profiling. Also, many
|
|
# regression tests in bootstraptest/test_yjit.rb assume call-threshold=2.
|
|
- test_task: 'btest'
|
|
run_opts: '--zjit-call-threshold=2'
|
|
configure: '--enable-zjit=dev'
|
|
|
|
- test_task: 'test-bundled-gems'
|
|
configure: '--enable-zjit=dev'
|
|
run_opts: '--zjit-call-threshold=1'
|
|
|
|
## Run with inliner disabled ##
|
|
- test_task: 'check'
|
|
run_opts: '--zjit-inline-threshold=0 --zjit-call-threshold=1'
|
|
specopts: '-T --zjit-inline-threshold=0 -T --zjit-call-threshold=1'
|
|
configure: '--enable-zjit=dev'
|
|
|
|
# The optimizer benefits from at least 1 iteration of profiling. Also, many
|
|
# regression tests in bootstraptest/test_yjit.rb assume call-threshold=2.
|
|
- test_task: 'btest'
|
|
run_opts: '--zjit-inline-threshold=0 --zjit-call-threshold=2'
|
|
configure: '--enable-zjit=dev'
|
|
|
|
- test_task: 'test-bundled-gems'
|
|
configure: '--enable-zjit=dev'
|
|
run_opts: '--zjit-inline-threshold=0 --zjit-call-threshold=1'
|
|
|
|
- test_task: 'zjit-check' # zjit-test + quick feedback of test_zjit_cli.rb
|
|
configure: '--enable-yjit --enable-zjit=dev'
|
|
rust_version: '1.85.0'
|
|
|
|
- test_task: 'zjit-bindgen'
|
|
hint: 'To fix: use patch in logs'
|
|
# Build with YJIT+ZJIT for output that works in the most number of configurations
|
|
configure: '--enable-zjit=dev --enable-yjit --with-gcc=clang-16'
|
|
clang_path: '/usr/bin/clang-16'
|
|
runs-on: 'ubuntu-24.04' # for clang-16
|
|
|
|
env:
|
|
GITPULLOPTIONS: --no-tags origin ${{ github.ref }}
|
|
RUN_OPTS: ${{ matrix.run_opts }}
|
|
YJIT_BENCH_OPTS: ${{ matrix.yjit_bench_opts }}
|
|
SPECOPTS: ${{ matrix.specopts }} -B../src/spec/zjit.mspec
|
|
TESTOPTS: ${{ matrix.testopts }}
|
|
RUBY_DEBUG: ci
|
|
BUNDLE_JOBS: 8 # for yjit-bench
|
|
|
|
runs-on: ${{ matrix.runs-on || 'ubuntu-22.04' }}
|
|
|
|
if: >-
|
|
${{!(false
|
|
|| contains(github.event.head_commit.message, '[DOC]')
|
|
|| contains(github.event.pull_request.title, '[DOC]')
|
|
|| contains(github.event.pull_request.labels.*.name, 'Documentation')
|
|
|| (github.event.pull_request.user.login == 'dependabot[bot]' && !startsWith(github.head_ref, 'dependabot/cargo'))
|
|
)}}
|
|
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
with:
|
|
sparse-checkout-cone-mode: false
|
|
sparse-checkout: /.github
|
|
persist-credentials: false
|
|
|
|
- uses: ./.github/actions/setup/ubuntu
|
|
|
|
- uses: ruby/setup-ruby@7f797815d8adceb1c412e7abefdd1ab4abc47a5f # v1.335.0
|
|
with:
|
|
ruby-version: '3.1'
|
|
bundler: none
|
|
|
|
- uses: taiki-e/install-action@1e29709c0ec63babbe8f266397a465f29a825f91 # v2.87.31
|
|
with:
|
|
tool: nextest@0.9
|
|
if: ${{ matrix.test_task == 'zjit-check' }}
|
|
|
|
- uses: ./.github/actions/setup/directories
|
|
with:
|
|
srcdir: src
|
|
builddir: build
|
|
makeup: true
|
|
dummy-files: ${{ matrix.test_task == 'check' }}
|
|
bundled-gems-src-cache: ${{ matrix.test_task == 'test-bundled-gems' }}
|
|
# Set fetch-depth: 10 so that Launchable can receive commits information.
|
|
fetch-depth: 10
|
|
|
|
- name: Install Rust
|
|
if: ${{ matrix.rust_version }}
|
|
run: |
|
|
rustup install ${{ matrix.rust_version }} --profile minimal
|
|
rustup default ${{ matrix.rust_version }}
|
|
|
|
- name: Install rustfmt
|
|
if: ${{ matrix.test_task == 'zjit-bindgen' }}
|
|
run: rustup component add rustfmt
|
|
|
|
- name: Run configure
|
|
run: ../src/configure -C --disable-install-doc --prefix=$(pwd)/install ${{ matrix.configure }}
|
|
|
|
- run: make incs
|
|
|
|
- run: make prepare-gems
|
|
if: ${{ matrix.test_task == 'test-bundled-gems' }}
|
|
|
|
- run: make
|
|
|
|
- name: Verify that --zjit-dump-disasm works
|
|
run: |
|
|
./miniruby --zjit-call-threshold=1 --zjit-dump-disasm -e0 | \
|
|
wc -l | \
|
|
ruby -ne 'raise "Disassembly seems broken in dev build (output has too few lines)" unless $_.to_i > 10'
|
|
if: ${{ contains(matrix.configure, 'jit=dev') }}
|
|
|
|
# Check that the binary was built with ZJIT
|
|
- name: Check ZJIT enabled
|
|
run: ./miniruby --zjit -v | grep "+ZJIT"
|
|
if: ${{ matrix.configure != '--disable-zjit' }}
|
|
|
|
- name: Set ENV for ZJIT
|
|
run: |
|
|
echo "RUBY_CRASH_REPORT=$(pwd)/rb_crash_%p.txt" >> $GITHUB_ENV
|
|
|
|
- name: Set up Launchable
|
|
id: launchable
|
|
uses: ./.github/actions/launchable/setup
|
|
with:
|
|
os: ${{ matrix.runs-on || 'ubuntu-22.04' }}
|
|
test-opts: ${{ matrix.configure }}
|
|
launchable-token: ${{ secrets.LAUNCHABLE_TOKEN }}
|
|
builddir: build
|
|
srcdir: src
|
|
is-zjit: true
|
|
continue-on-error: true
|
|
timeout-minutes: 3
|
|
|
|
- name: Set up crash dumps
|
|
run: |
|
|
mkdir "${GITHUB_WORKSPACE}/crashdumps"
|
|
echo "${GITHUB_WORKSPACE}/crashdumps/core.%p" | sudo tee /proc/sys/kernel/core_pattern
|
|
|
|
- name: make ${{ matrix.test_task }}
|
|
run: |
|
|
test -n "${LAUNCHABLE_STDOUT}" && exec 1> >(tee "${LAUNCHABLE_STDOUT}")
|
|
test -n "${LAUNCHABLE_STDERR}" && exec 2> >(tee "${LAUNCHABLE_STDERR}")
|
|
ulimit -c unlimited
|
|
|
|
set -x
|
|
make -s ${{ matrix.test_task }} ${TESTS:+TESTS="$TESTS"} \
|
|
RUN_OPTS="$RUN_OPTS" MSPECOPT=--debug SPECOPTS="$SPECOPTS" \
|
|
TESTOPTS="$TESTOPTS" \
|
|
ZJIT_BINDGEN_DIFF_OPTS="$ZJIT_BINDGEN_DIFF_OPTS"
|
|
timeout-minutes: 90
|
|
env:
|
|
RUBY_TESTOPTS: '-q --tty=no'
|
|
TESTS: ${{ matrix.tests }}
|
|
EXCLUDES: '../src/test/.excludes-zjit'
|
|
TEST_BUNDLED_GEMS_ALLOW_FAILURES: ''
|
|
PRECHECK_BUNDLED_GEMS: 'no'
|
|
SYNTAX_SUGGEST_TIMEOUT: '30'
|
|
ZJIT_BINDGEN_DIFF_OPTS: '--exit-code'
|
|
CLANG_PATH: ${{ matrix.clang_path }}
|
|
LAUNCHABLE_STDOUT: ${{ steps.launchable.outputs.stdout_report_path }}
|
|
LAUNCHABLE_STDERR: ${{ steps.launchable.outputs.stderr_report_path }}
|
|
LAUNCHABLE_TOKEN: '' # see .github/actions/crashdumps
|
|
continue-on-error: ${{ matrix.continue-on-test_task || false }}
|
|
|
|
- name: Dump crash logs
|
|
if: ${{ failure() }}
|
|
continue-on-error: true
|
|
run: |
|
|
tail --verbose --lines=+1 rb_crash_*.txt
|
|
exit 1
|
|
|
|
- name: Upload crash dumps
|
|
uses: ./.github/actions/crashdumps
|
|
with:
|
|
name: crashdumps-${{ github.job }}-${{ strategy.job-index }}
|
|
if: ${{ always() && hashFiles('crashdumps/core.*') != '' }}
|
|
|
|
- uses: ./.github/actions/slack
|
|
with:
|
|
label: ${{ matrix.test_task }} ${{ matrix.configure }}
|
|
SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
|
|
if: ${{ failure() }}
|
|
|
|
result:
|
|
if: ${{ always() }}
|
|
name: ${{ github.workflow }} result
|
|
runs-on: ubuntu-22.04
|
|
needs: [make]
|
|
steps:
|
|
- name: ${{ github.workflow }} jobs have failed
|
|
run: exit 1
|
|
working-directory:
|
|
if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
|
|
|
|
# Separated from `make` job to avoid making it a required status check for now
|
|
ruby-bench:
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
# Test --call-threshold=2 with 2 iterations in total (inlining enabled)
|
|
- ruby_opts: '--zjit-call-threshold=2'
|
|
bench_opts: '--warmup=1 --bench=1 --excludes=shipit'
|
|
configure: '--enable-zjit=dev_nodebug' # --enable-zjit=dev is too slow
|
|
# Test --call-threshold=2 with 2 iterations in total (inlining disabled)
|
|
- ruby_opts: '--zjit-inline-threshold=0 --zjit-call-threshold=2'
|
|
bench_opts: '--warmup=1 --bench=1 --excludes=shipit'
|
|
configure: '--enable-zjit=dev_nodebug' # --enable-zjit=dev is too slow
|
|
runs-on: ubuntu-24.04
|
|
|
|
if: >-
|
|
${{!(false
|
|
|| contains(github.event.head_commit.message, '[DOC]')
|
|
|| contains(github.event.pull_request.title, '[DOC]')
|
|
|| contains(github.event.pull_request.labels.*.name, 'Documentation')
|
|
|| (github.event.pull_request.user.login == 'dependabot[bot]' && !startsWith(github.head_ref, 'dependabot/cargo'))
|
|
)}}
|
|
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- uses: ./.github/actions/setup/ubuntu
|
|
|
|
- uses: ./.github/actions/setup/directories
|
|
with:
|
|
srcdir: src
|
|
builddir: build
|
|
makeup: true
|
|
|
|
- name: Run configure
|
|
run: ../src/configure -C --disable-install-doc --prefix="$(pwd)/install" ${{ matrix.configure }}
|
|
|
|
- run: make install
|
|
|
|
- name: Checkout ruby-bench
|
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
with:
|
|
repository: ruby/ruby-bench
|
|
persist-credentials: false
|
|
path: ruby-bench
|
|
|
|
# If you want to skip failing benchmark, consider using `--excludes`.
|
|
# e.g. `bench_opts: '--warmup=1 --bench=1 --excludes=railsbench,lobsters'`
|
|
- name: Run ruby-bench
|
|
run: ruby run_benchmarks.rb -e "zjit::../build/install/bin/ruby ${{ matrix.ruby_opts }}" ${{ matrix.bench_opts }}
|
|
working-directory: ruby-bench
|
|
env:
|
|
BUNDLER_VERSION: 0
|
|
|
|
- uses: ./.github/actions/slack
|
|
with:
|
|
label: ruby-bench ${{ matrix.bench_opts }} ${{ matrix.ruby_opts }}
|
|
SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
|
|
if: ${{ failure() }}
|
|
|
|
defaults:
|
|
run:
|
|
working-directory: build
|