name: CI
on:
push:
branches: [main]
pull_request:
env:
CARGO_TERM_COLOR: always
CI: "1"
jobs:
test:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
name: Linux x86_64
- os: ubuntu-24.04-arm
name: Linux aarch64
- os: macos-latest
name: macOS aarch64
- os: macos-26-intel
name: macOS x86_64
- os: windows-latest
name: Windows x86_64
- os: windows-11-arm
name: Windows aarch64
name: test (${{ matrix.name }})
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- run: cargo test --all-features -- --test-threads=1
- run: cargo test --no-default-features -- --test-threads=1
test-win32:
name: test (Windows i686)
runs-on: windows-latest
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
with:
targets: i686-pc-windows-msvc
- uses: Swatinem/rust-cache@v2
- run: cargo test --all-features --target i686-pc-windows-msvc -- --test-threads=1
- run: cargo test --no-default-features --target i686-pc-windows-msvc -- --test-threads=1
wasm:
name: test (wasm32-wasip1)
runs-on: ubuntu-latest
env:
CARGO_TARGET_WASM32_WASIP1_RUNNER: "wasmtime run --dir . --"
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-wasip1, wasm32-unknown-unknown
- name: Install wasmtime
run: |
curl https://wasmtime.dev/install.sh -sSf | bash
echo "$HOME/.wasmtime/bin" >> $GITHUB_PATH
- uses: Swatinem/rust-cache@v2
- name: Check wasm32-unknown-unknown (no SIMD)
run: cargo check --target wasm32-unknown-unknown --no-default-features
- name: Test wasm32-wasip1 (no SIMD)
run: cargo test --target wasm32-wasip1 --no-default-features -- --test-threads=1
- name: Test wasm32-wasip1 (simd128)
run: cargo test --target wasm32-wasip1 --no-default-features -- --test-threads=1
env:
RUSTFLAGS: "-C target-feature=+simd128"
lint:
name: clippy + fmt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
- uses: Swatinem/rust-cache@v2
- run: cargo fmt --check
- run: cargo clippy --all-features -- -D warnings
- run: cargo clippy --no-default-features -- -D warnings
- name: Doc build (warnings as errors)
run: cargo doc --all-features --no-deps
env:
RUSTDOCFLAGS: "-D warnings"
coverage:
name: coverage
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
with:
components: llvm-tools-preview
- uses: Swatinem/rust-cache@v2
- uses: taiki-e/install-action@cargo-llvm-cov
- run: cargo llvm-cov --all-features --codecov --output-path codecov.json -- --test-threads=1
- uses: codecov/codecov-action@v5
with:
files: codecov.json
fail_ci_if_error: false
msrv:
name: MSRV (1.89)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@master
with:
toolchain: "1.89"
- uses: Swatinem/rust-cache@v2
- run: cargo check --all-features
- run: cargo check --no-default-features