mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
899c90cf8a
We want to make it convenient for people to build YJIT and Rust version 1.58.1 or above is available on Ubuntu Jammy, Debian testing, and Fedora 36 through the usual package manager on those systems. This saves the need to install `rustup` for some people. Our code is already 1.58.1 compatible so this commit simply tweaks CI to make sure that we keep supporting that version. We still test against the latest Rust version in `--enable-yjit=dev` builds through the Rust version available in GitHub's CI image. Rust versions older than 1.58.1 might build YJIT today, but we might make incompatible changes in the future. Co-authored-by: Maxime Chevalier-Boisvert <maxime.chevalierboisvert@shopify.com>
134 lines
4.8 KiB
YAML
134 lines
4.8 KiB
YAML
name: YJIT Ubuntu
|
|
on:
|
|
push:
|
|
paths-ignore:
|
|
- 'doc/**'
|
|
- '**.md'
|
|
- '**.rdoc'
|
|
pull_request:
|
|
paths-ignore:
|
|
- 'doc/**'
|
|
- '**.md'
|
|
- '**.rdoc'
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
|
|
cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
|
|
|
|
jobs:
|
|
cargo:
|
|
name: Rust cargo test
|
|
# GitHub Action's image seems to already contain a Rust 1.58.0.
|
|
runs-on: ubuntu-20.04
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
# For now we can't run cargo test --offline because it complains about the
|
|
# capstone dependency, even though the dependency is optional
|
|
#- run: cargo test --offline
|
|
- run: RUST_BACKTRACE=1 cargo test
|
|
working-directory: yjit
|
|
# Also compile and test with all features enabled
|
|
- run: RUST_BACKTRACE=1 cargo test --all-features
|
|
working-directory: yjit
|
|
# Check that we can build in release mode too
|
|
- run: cargo build --release
|
|
working-directory: yjit
|
|
make:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- test_task: "check-yjit-bindings"
|
|
configure: "--with-gcc=clang-12 --enable-yjit=dev"
|
|
|
|
- test_task: "check"
|
|
configure: "--enable-yjit RUSTC='rustc +1.58.1'" # release build
|
|
rust_version: "1.58.1"
|
|
|
|
- test_task: "check"
|
|
configure: "--enable-yjit=dev"
|
|
|
|
- test_task: "check"
|
|
configure: "--enable-yjit=dev"
|
|
yjit_opts: "--yjit-call-threshold=1"
|
|
|
|
- test_task: "test-all TESTS=--repeat-count=2"
|
|
configure: "--enable-yjit=dev"
|
|
|
|
- test_task: "test-bundled-gems"
|
|
configure: "--enable-yjit=dev"
|
|
env:
|
|
GITPULLOPTIONS: --no-tags origin ${{github.ref}}
|
|
RUN_OPTS: ${{ matrix.yjit_opts }}
|
|
RUBY_DEBUG: ci
|
|
runs-on: ubuntu-20.04
|
|
if: ${{ !startsWith(github.event.head_commit.message, '[DOC]') && !contains(github.event.pull_request.labels.*.name, 'Documentation') }}
|
|
steps:
|
|
- run: mkdir build
|
|
working-directory:
|
|
- name: Install libraries
|
|
run: |
|
|
set -x
|
|
sudo apt-get update -q || :
|
|
sudo apt-get install --no-install-recommends -q -y build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev bison autoconf ruby
|
|
- name: Install Rust
|
|
if: ${{ matrix.rust_version }}
|
|
run: rustup install ${{ matrix.rust_version }} --profile minimal
|
|
- name: git config
|
|
run: |
|
|
git config --global advice.detachedHead 0
|
|
git config --global init.defaultBranch garbage
|
|
- uses: actions/checkout@v3
|
|
with:
|
|
path: src
|
|
- uses: actions/cache@v3
|
|
with:
|
|
path: src/.downloaded-cache
|
|
key: downloaded-cache
|
|
- name: Fixed world writable dirs
|
|
run: |
|
|
chmod -v go-w $HOME $HOME/.config
|
|
sudo chmod -R go-w /usr/share
|
|
sudo bash -c 'IFS=:; for d in '"$PATH"'; do chmod -v go-w $d; done' || :
|
|
- name: Set ENV
|
|
run: |
|
|
echo "GNUMAKEFLAGS=-j$((1 + $(nproc --all)))" >> $GITHUB_ENV
|
|
- run: ./autogen.sh
|
|
working-directory: src
|
|
- name: Run configure
|
|
run: ../src/configure -C --disable-install-doc ${{ matrix.configure }}
|
|
- run: make incs
|
|
- run: make -j
|
|
- run: make leaked-globals
|
|
if: ${{ matrix.test_task == 'check' }}
|
|
- run: make prepare-gems
|
|
if: ${{ matrix.test_task == 'check' }}
|
|
- name: Create dummy files in build dir
|
|
run: |
|
|
./miniruby -e '(("a".."z").to_a+("A".."Z").to_a+("0".."9").to_a+%w[foo bar test zzz]).each{|basename|File.write("#{basename}.rb", "raise %(do not load #{basename}.rb)")}'
|
|
if: ${{ matrix.test_task == 'check' }}
|
|
- name: Enable YJIT through ENV
|
|
run: echo "RUBY_YJIT_ENABLE=1" >> $GITHUB_ENV
|
|
- run: make -s ${{ matrix.test_task }} RUN_OPTS="$RUN_OPTS"
|
|
timeout-minutes: 60
|
|
env:
|
|
RUBY_TESTOPTS: "-q --tty=no"
|
|
TEST_BUNDLED_GEMS_ALLOW_FAILURES: ""
|
|
PRECHECK_BUNDLED_GEMS: "no"
|
|
- uses: k0kubun/action-slack@v2.0.0
|
|
with:
|
|
payload: |
|
|
{
|
|
"ci": "GitHub Actions",
|
|
"env": "${{ matrix.os }} / ${{ matrix.test_task }}${{ matrix.configure }}",
|
|
"url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}",
|
|
"commit": "${{ github.sha }}",
|
|
"branch": "${{ github.ref }}".split('/').reverse()[0]
|
|
}
|
|
env:
|
|
SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
|
|
if: ${{ failure() && github.event_name == 'push' }}
|
|
|
|
defaults:
|
|
run:
|
|
working-directory: build
|