Run abi-cafe tests for pull requests too #3515
This file contains 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: CI | |
on: | |
- push | |
- pull_request | |
defaults: | |
run: | |
shell: bash | |
permissions: {} | |
env: | |
# Disabling incr comp reduces cache size and incr comp doesn't save as much | |
# on CI anyway. | |
CARGO_BUILD_INCREMENTAL: false | |
# Rust's CI denies warnings. Deny them here too to ensure subtree syncs don't | |
# fail because of warnings. | |
RUSTFLAGS: "-Dwarnings" | |
jobs: | |
rustfmt: | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Avoid installing rustc-dev | |
run: | | |
sed -i 's/components.*/components = ["rustfmt"]/' rust-toolchain | |
rustfmt -v | |
- name: Rustfmt | |
run: | | |
cargo fmt --check | |
rustfmt --check build_system/main.rs | |
rustfmt --check example/* | |
rustfmt --check scripts/*.rs | |
test: | |
runs-on: ${{ matrix.os }} | |
timeout-minutes: 60 | |
env: | |
CG_CLIF_EXPENSIVE_CHECKS: 1 | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: ubuntu-latest | |
env: | |
TARGET_TRIPLE: x86_64-unknown-linux-gnu | |
- os: macos-latest | |
env: | |
TARGET_TRIPLE: x86_64-apple-darwin | |
# cross-compile from Linux to Windows using mingw | |
- os: ubuntu-latest | |
env: | |
TARGET_TRIPLE: x86_64-pc-windows-gnu | |
apt_deps: gcc-mingw-w64-x86-64 wine-stable | |
- os: ubuntu-latest | |
env: | |
TARGET_TRIPLE: aarch64-unknown-linux-gnu | |
apt_deps: gcc-aarch64-linux-gnu qemu-user | |
- os: macos-latest | |
env: | |
TARGET_TRIPLE: aarch64-apple-darwin | |
- os: ubuntu-latest | |
env: | |
TARGET_TRIPLE: s390x-unknown-linux-gnu | |
apt_deps: gcc-s390x-linux-gnu qemu-user | |
- os: ubuntu-latest | |
env: | |
TARGET_TRIPLE: riscv64gc-unknown-linux-gnu | |
apt_deps: gcc-riscv64-linux-gnu qemu-user | |
- os: windows-latest | |
env: | |
TARGET_TRIPLE: x86_64-pc-windows-msvc | |
- os: windows-latest | |
env: | |
TARGET_TRIPLE: x86_64-pc-windows-gnu | |
steps: | |
- uses: actions/checkout@v4 | |
- name: CPU features | |
if: matrix.os == 'ubuntu-latest' | |
run: cat /proc/cpuinfo | |
- name: Cache cargo target dir | |
uses: actions/cache@v4 | |
with: | |
path: build/cg_clif | |
key: ${{ runner.os }}-${{ matrix.env.TARGET_TRIPLE }}-cargo-build-target-${{ hashFiles('rust-toolchain', '**/Cargo.lock') }} | |
- name: Set MinGW as the default toolchain | |
if: matrix.os == 'windows-latest' && matrix.env.TARGET_TRIPLE == 'x86_64-pc-windows-gnu' | |
run: rustup set default-host x86_64-pc-windows-gnu | |
- name: Use x86_64 compiler on macOS | |
if: matrix.os == 'macos-latest' && matrix.env.TARGET_TRIPLE == 'x86_64-apple-darwin' | |
run: rustup set default-host x86_64-apple-darwin | |
- name: Install toolchain and emulator | |
if: matrix.apt_deps != null | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y ${{ matrix.apt_deps }} | |
- name: Prepare dependencies | |
run: ./y.sh prepare | |
# The Wine version shipped with Ubuntu 22.04 doesn't implement bcryptprimitives.dll | |
- name: Build bcryptprimitives.dll shim for Wine | |
if: matrix.os == 'ubuntu-latest' && matrix.env.TARGET_TRIPLE == 'x86_64-pc-windows-gnu' | |
run: | | |
rustup target add x86_64-pc-windows-gnu | |
mkdir wine_shims | |
rustc patches/bcryptprimitives.rs -Copt-level=3 -Clto=fat --out-dir wine_shims --target x86_64-pc-windows-gnu | |
echo "WINEPATH=$(pwd)/wine_shims" >> $GITHUB_ENV | |
- name: Build | |
run: ./y.sh build --sysroot none | |
- name: Test | |
env: | |
TARGET_TRIPLE: ${{ matrix.env.TARGET_TRIPLE }} | |
run: ./y.sh test | |
- name: Install LLVM standard library | |
run: rustup target add ${{ matrix.env.TARGET_TRIPLE }} | |
# This is roughly config rust-lang/rust uses for testing | |
- name: Test with LLVM sysroot | |
# Skip native x86_64-pc-windows-gnu. It is way too slow and cross-compiled | |
# x86_64-pc-windows-gnu covers at least part of the tests. | |
if: matrix.os != 'windows-latest' || matrix.env.TARGET_TRIPLE != 'x86_64-pc-windows-gnu' | |
env: | |
TARGET_TRIPLE: ${{ matrix.env.TARGET_TRIPLE }} | |
run: ./y.sh test --sysroot llvm --no-unstable-features | |
# This job doesn't use cg_clif in any way. It checks that all cg_clif tests work with cg_llvm too. | |
test_llvm: | |
runs-on: ubuntu-latest | |
timeout-minutes: 60 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: CPU features | |
run: cat /proc/cpuinfo | |
- name: Prepare dependencies | |
run: ./y.sh prepare | |
- name: Disable JIT tests | |
run: | | |
sed -i 's/jit./#jit./' config.txt | |
- name: Test | |
env: | |
TARGET_TRIPLE: x86_64-unknown-linux-gnu | |
run: ./y.sh test --use-backend llvm | |
bench: | |
runs-on: ubuntu-latest | |
timeout-minutes: 60 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: CPU features | |
run: cat /proc/cpuinfo | |
- name: Cache cargo target dir | |
uses: actions/cache@v4 | |
with: | |
path: build/cg_clif | |
key: ${{ runner.os }}-x86_64-unknown-linux-gnu-cargo-build-target-${{ hashFiles('rust-toolchain', '**/Cargo.lock') }} | |
- name: Install hyperfine | |
run: | | |
sudo apt update | |
sudo apt install -y hyperfine | |
- name: Prepare dependencies | |
run: ./y.sh prepare | |
- name: Build | |
run: ./y.sh build --sysroot none | |
- name: Benchmark | |
run: ./y.sh bench | |
dist: | |
runs-on: ${{ matrix.os }} | |
timeout-minutes: 60 | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
# FIXME update at some point in the future once most distros use a newer glibc | |
- os: ubuntu-20.04 | |
env: | |
TARGET_TRIPLE: x86_64-unknown-linux-gnu | |
- os: macos-latest | |
env: | |
TARGET_TRIPLE: x86_64-apple-darwin | |
- os: macos-latest | |
env: | |
TARGET_TRIPLE: aarch64-apple-darwin | |
# cross-compile from Linux to Windows using mingw | |
- os: ubuntu-latest | |
env: | |
TARGET_TRIPLE: x86_64-pc-windows-gnu | |
- os: windows-latest | |
env: | |
TARGET_TRIPLE: x86_64-pc-windows-msvc | |
- os: windows-latest | |
env: | |
TARGET_TRIPLE: x86_64-pc-windows-gnu | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Cache cargo target dir | |
uses: actions/cache@v4 | |
with: | |
path: build/cg_clif | |
key: ${{ runner.os }}-${{ matrix.env.TARGET_TRIPLE }}-dist-cargo-build-target-${{ hashFiles('rust-toolchain', '**/Cargo.lock') }} | |
- name: Set MinGW as the default toolchain | |
if: matrix.os == 'windows-latest' && matrix.env.TARGET_TRIPLE == 'x86_64-pc-windows-gnu' | |
run: rustup set default-host x86_64-pc-windows-gnu | |
- name: Use x86_64 compiler on macOS | |
if: matrix.os == 'macos-latest' && matrix.env.TARGET_TRIPLE == 'x86_64-apple-darwin' | |
run: rustup set default-host x86_64-apple-darwin | |
- name: Install MinGW toolchain | |
if: matrix.os == 'ubuntu-latest' && matrix.env.TARGET_TRIPLE == 'x86_64-pc-windows-gnu' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y gcc-mingw-w64-x86-64 | |
- name: Prepare dependencies | |
run: ./y.sh prepare | |
- name: Build backend | |
run: ./y.sh build --sysroot none | |
- name: Build sysroot | |
run: ./y.sh build | |
- name: Package prebuilt cg_clif | |
run: tar cvfJ cg_clif.tar.xz dist | |
- name: Upload prebuilt cg_clif | |
if: matrix.os == 'windows-latest' || matrix.env.TARGET_TRIPLE != 'x86_64-pc-windows-gnu' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: cg_clif-${{ matrix.env.TARGET_TRIPLE }} | |
path: cg_clif.tar.xz | |
- name: Upload prebuilt cg_clif (cross compile) | |
if: matrix.os != 'windows-latest' && matrix.env.TARGET_TRIPLE == 'x86_64-pc-windows-gnu' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: cg_clif-${{ runner.os }}-cross-x86_64-mingw | |
path: cg_clif.tar.xz | |
release: | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
if: ${{ github.ref == 'refs/heads/master' }} | |
# FIXME add the bench job back to the dependency list once rust-lang/rust#125493 gets merged | |
needs: [rustfmt, test, dist] | |
permissions: | |
contents: write # for creating the dev tag and release | |
concurrency: | |
group: release-dev | |
cancel-in-progress: true | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Download all built artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: artifacts/ | |
- run: | | |
ls -R artifacts/ | |
mkdir release/ | |
pushd artifacts/ | |
for dir in *; do | |
mv $dir/cg_clif.tar.xz ../release/$dir.tar.xz | |
rmdir $dir/ # verify $dir is empty | |
done | |
popd | |
rmdir artifacts/ # verify all artifacts are represented in release/ | |
ls -R release/ | |
- run: npm install --production | |
working-directory: .github/actions/github-release | |
- name: Publish Release | |
uses: ./.github/actions/github-release | |
with: | |
files: "release/*" | |
token: ${{ github.token }} | |
continue-on-error: true |