Introduce generators that respect function domains #807
Workflow file for this run
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] | |
env: | |
CARGO_TERM_VERBOSE: true | |
RUSTDOCFLAGS: -Dwarnings | |
RUSTFLAGS: -Dwarnings | |
RUST_BACKTRACE: full | |
jobs: | |
test: | |
name: Build and test | |
timeout-minutes: 20 | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- target: aarch64-apple-darwin | |
os: macos-latest | |
- target: aarch64-unknown-linux-gnu | |
os: ubuntu-latest | |
- target: aarch64-pc-windows-msvc | |
os: windows-latest | |
build_only: 1 # Can't run on x86 hosts | |
- target: arm-unknown-linux-gnueabi | |
os: ubuntu-latest | |
- target: arm-unknown-linux-gnueabihf | |
os: ubuntu-latest | |
- target: armv7-unknown-linux-gnueabihf | |
os: ubuntu-latest | |
- target: i586-unknown-linux-gnu | |
os: ubuntu-latest | |
- target: i686-unknown-linux-gnu | |
os: ubuntu-latest | |
- target: loongarch64-unknown-linux-gnu | |
os: ubuntu-latest | |
- target: powerpc-unknown-linux-gnu | |
os: ubuntu-latest | |
- target: powerpc64-unknown-linux-gnu | |
os: ubuntu-latest | |
- target: powerpc64le-unknown-linux-gnu | |
os: ubuntu-latest | |
- target: riscv64gc-unknown-linux-gnu | |
os: ubuntu-latest | |
- target: thumbv6m-none-eabi | |
os: ubuntu-latest | |
- target: thumbv7em-none-eabi | |
os: ubuntu-latest | |
- target: thumbv7em-none-eabihf | |
os: ubuntu-latest | |
- target: thumbv7m-none-eabi | |
os: ubuntu-latest | |
- target: x86_64-unknown-linux-gnu | |
os: ubuntu-latest | |
- target: x86_64-apple-darwin | |
os: macos-13 | |
- target: wasm32-unknown-unknown | |
os: ubuntu-latest | |
build_only: 1 | |
- target: i686-pc-windows-msvc | |
os: windows-latest | |
- target: x86_64-pc-windows-msvc | |
os: windows-latest | |
- target: i686-pc-windows-gnu | |
os: windows-latest | |
channel: nightly-i686-gnu | |
- target: x86_64-pc-windows-gnu | |
os: windows-latest | |
channel: nightly-x86_64-gnu | |
runs-on: ${{ matrix.os }} | |
env: | |
BUILD_ONLY: ${{ matrix.build_only }} | |
steps: | |
- name: Print runner information | |
run: uname -a | |
- uses: actions/checkout@v4 | |
- name: Install Rust (rustup) | |
shell: bash | |
run: | | |
channel="nightly" | |
# Account for channels that have required components (MinGW) | |
[ -n "${{ matrix.channel }}" ] && channel="${{ matrix.channel }}" | |
rustup update "$channel" --no-self-update | |
rustup default "$channel" | |
rustup target add "${{ matrix.target }}" | |
rustup component add clippy llvm-tools-preview | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
key: ${{ matrix.target }} | |
- name: Download musl source | |
run: ./ci/download-musl.sh | |
shell: bash | |
# Non-linux tests just use our raw script | |
- name: Run locally | |
if: matrix.os != 'ubuntu-latest' || contains(matrix.target, 'wasm') | |
shell: bash | |
run: ./ci/run.sh ${{ matrix.target }} | |
# Otherwise we use our docker containers to run builds | |
- name: Run in Docker | |
if: matrix.os == 'ubuntu-latest' && !contains(matrix.target, 'wasm') | |
run: | | |
rustup target add x86_64-unknown-linux-musl | |
cargo generate-lockfile && ./ci/run-docker.sh ${{ matrix.target }} | |
- name: Clippy | |
run: | | |
# Run clippy on `libm` | |
cargo clippy --target "${{ matrix.target }}" --package libm | |
builtins: | |
name: Check use with compiler-builtins | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@master | |
- name: Install Rust | |
run: rustup update nightly --no-self-update && rustup default nightly | |
- uses: Swatinem/rust-cache@v2 | |
- run: cargo build -p cb | |
benchmarks: | |
name: Benchmarks | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@master | |
- name: Install Rust | |
run: rustup update nightly --no-self-update && rustup default nightly | |
- uses: Swatinem/rust-cache@v2 | |
- name: Download musl source | |
run: ./ci/download-musl.sh | |
- run: cargo bench --all --features libm-test/short-benchmarks,libm-test/build-musl | |
msrv: | |
name: Check MSRV | |
runs-on: ubuntu-latest | |
env: | |
RUSTFLAGS: # No need to check warnings on old MSRV, unset `-Dwarnings` | |
steps: | |
- uses: actions/checkout@master | |
- run: | | |
msrv="$(perl -ne 'print if s/rust-version\s*=\s*"(.*)"/\1/g' Cargo.toml)" | |
echo "MSRV: $msrv" | |
echo "MSRV=$msrv" >> "$GITHUB_ENV" | |
- name: Install Rust | |
run: rustup update "$MSRV" --no-self-update && rustup default "$MSRV" | |
- uses: Swatinem/rust-cache@v2 | |
- run: cargo build -p libm | |
rustfmt: | |
name: Rustfmt | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@master | |
- name: Install Rust | |
run: | | |
rustup update nightly --no-self-update | |
rustup default nightly | |
rustup component add rustfmt | |
- run: cargo fmt -- --check | |
success: | |
needs: | |
- test | |
- builtins | |
- benchmarks | |
- msrv | |
- rustfmt | |
runs-on: ubuntu-latest | |
# GitHub branch protection is exceedingly silly and treats "jobs skipped because a dependency | |
# failed" as success. So we have to do some contortions to ensure the job fails if any of its | |
# dependencies fails. | |
if: always() # make sure this is never "skipped" | |
steps: | |
# Manually check the status of all dependencies. `if: failure()` does not work. | |
- name: check if any dependency failed | |
run: jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}' |