name: CI
on:
push:
branches: [master, main]
pull_request:
workflow_dispatch:
concurrency:
group: ${{ github.head_ref || github.run_id }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
RUSTFLAGS: -Dwarnings
RUSTDOCFLAGS: -Dwarnings
jobs:
lint:
name: Lints
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: rustup show active-toolchain
- run: rustup component add rustfmt clippy
- uses: Swatinem/rust-cache@v2
- run: cargo fmt --all -- --check
- run: cargo clippy --locked --workspace --all-features --all-targets -- -D clippy::all
- uses: obi1kenobi/cargo-semver-checks-action@v2
doc:
name: Documentation
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: rustup show active-toolchain
- uses: Swatinem/rust-cache@v2
- run: cargo test --locked --workspace --all-features --doc
- run: cargo doc --locked --workspace --all-features --document-private-items --no-deps
test:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest]
name: Tests on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- run: rustup show active-toolchain
- run: rustup component add llvm-tools
- uses: taiki-e/install-action@cargo-llvm-cov
- uses: taiki-e/install-action@nextest
- uses: Swatinem/rust-cache@v2
- run: cargo llvm-cov nextest --locked --workspace --all-features --lib --bins --examples --tests --lcov --output-path lcov.info
- uses: codecov/test-results-action@v1
if: ${{ !cancelled() }}
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: target/nextest/default/junit.xml
disable_search: true
- uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: lcov.info
disable_search: true
benchmark:
name: Benchmarks
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: rustup show active-toolchain
- uses: cargo-bins/cargo-binstall@main
- run: cargo binstall cargo-codspeed
- uses: Swatinem/rust-cache@v2
- run: cargo codspeed build --workspace
- uses: CodSpeedHQ/action@v3
with:
token: ${{ secrets.CODSPEED_TOKEN }}
run: cargo codspeed run
miri:
name: Miri
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: rustup toolchain install nightly --profile minimal --component miri --no-self-update
- run: cargo +nightly miri setup
- uses: taiki-e/install-action@nextest
- run: cargo +nightly miri nextest run --locked --workspace --all-features --lib --bins --examples --tests