name: Continuous Integration
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
merge_group:
types: [checks_requested]
env:
RUSTFLAGS: "-Dwarnings"
RUSTDOCFLAGS: "-D warnings"
permissions:
contents: read
jobs:
test:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - run: rustup toolchain install
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 with:
save-if: ${{ github.ref == 'refs/heads/main' }}
- run: cargo test
clippy:
name: clippy (${{ matrix.target || matrix.os }})
strategy:
matrix:
include:
- os: ubuntu-latest
- os: macos-latest
- os: windows-latest
- os: ubuntu-latest
target: aarch64-linux-android
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - run: rustup toolchain install
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 with:
key: ${{ matrix.target }}
save-if: ${{ github.ref == 'refs/heads/main' }}
- if: matrix.target == 'aarch64-linux-android'
name: Use the Android NDK's C toolchain
run: |
rustup target add aarch64-linux-android
bin="$ANDROID_NDK_LATEST_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin"
echo "CC_aarch64_linux_android=$bin/aarch64-linux-android21-clang" >> "$GITHUB_ENV"
echo "AR_aarch64_linux_android=$bin/llvm-ar" >> "$GITHUB_ENV"
- run: cargo clippy --all-targets ${{ matrix.target && format('--target {0}', matrix.target) || '' }}
msrv:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - id: msrv
run: echo "version=$(cargo +stable metadata --no-deps --format-version 1 | jq -r '.packages[0].rust_version')" >> "$GITHUB_OUTPUT"
- run: rustup toolchain install ${{ steps.msrv.outputs.version }} --profile minimal
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 with:
key: ${{ steps.msrv.outputs.version }}
save-if: ${{ github.ref == 'refs/heads/main' }}
- run: cargo +${{ steps.msrv.outputs.version }} check --all-targets
rustfmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - run: rustup toolchain install
- run: cargo fmt --check
cargo-deny:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - run: rustup toolchain install
- uses: taiki-e/install-action@f7e5d7c961414b23f5b25b2da9294395d08513ad with:
tool: cargo-deny
- run: cargo deny --all-features check
actionlint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: jdx/mise-action@2d8d4cafcbd33be2ea37d2b6f5ad595363d1f1ca with:
version: 2026.9.17
cache_save: ${{ github.ref == 'refs/heads/main' }}
- run: actionlint
coverage:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - run: rustup toolchain install
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 with:
save-if: ${{ github.ref == 'refs/heads/main' }}
- uses: taiki-e/install-action@f7e5d7c961414b23f5b25b2da9294395d08513ad with:
tool: cargo-llvm-cov
- run: cargo llvm-cov --all-features --lcov --output-path lcov.info
- uses: coverallsapp/github-action@8d6379e14d29928660c4ba802d8e85393440b329 with:
github-token: ${{ secrets.GITHUB_TOKEN }}
file: lcov.info
format: lcov
fail-on-error: false