name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
env:
CARGO_TERM_COLOR: always
jobs:
test:
name: Test (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest, macos-26-intel, ubuntu-24.04-arm, windows-11-arm]
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Build (all features)
run: cargo build --all-features
- name: Run tests (all features)
run: cargo test --all-features --release
feature-combos:
name: Features (${{ matrix.features }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
features:
- "" - "std" - "std,avx512" - "std,transfer" - "std,iec" - "std,avx512,transfer" - "std,avx512,transfer,alt,iec"
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Build
run: cargo build --no-default-features --features "${{ matrix.features }}"
- name: Test
run: cargo test --no-default-features --features "${{ matrix.features }}" --release
if: matrix.features != ''
- name: Check (no_std build only)
run: cargo check --no-default-features
if: matrix.features == ''
wasm:
name: WASM SIMD128
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown,wasm32-wasip1
- name: Install wasmtime
run: curl https://wasmtime.dev/install.sh -sSf | bash && echo "$HOME/.wasmtime/bin" >> $GITHUB_PATH
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Check WASM (wasm32-unknown-unknown)
run: cargo check --target wasm32-unknown-unknown --all-features
env:
RUSTFLAGS: -C target-feature=+simd128
- name: Test WASM (wasm32-wasip1)
run: cargo test --target wasm32-wasip1 --features "std,transfer" --release --lib
env:
RUSTFLAGS: -C target-feature=+simd128
CARGO_TARGET_WASM32_WASIP1_RUNNER: wasmtime --dir=.
cross-check:
name: Cross-check (${{ matrix.target }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target: [aarch64-unknown-linux-gnu, aarch64-unknown-linux-musl]
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Check (all features)
run: cargo check --target ${{ matrix.target }} --all-features
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Check formatting
run: cargo fmt --check
- name: Clippy (all features)
run: cargo clippy --all-targets --all-features -- -D warnings
bench:
name: Benchmarks
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Build benchmarks
run: cargo build --release --benches --all-features
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 --release
- uses: codecov/codecov-action@v5
with:
files: codecov.json
fail_ci_if_error: false
msrv:
name: MSRV
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- uses: taiki-e/install-action@cargo-hack
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Check MSRV
run: cargo hack check --rust-version
docs:
name: Documentation
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Build docs
run: cargo doc --no-deps --all-features
env:
RUSTDOCFLAGS: -D warnings