name: Build, Lint & Test
on:
pull_request:
branches: [ "main" ]
paths-ignore:
- '**.md'
- 'docs/**'
- 'LICENSE'
workflow_dispatch:
env:
CARGO_TERM_COLOR: always
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
security-audit:
name: Security Audit
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Setup Rust toolchain with caching
uses: brndnmtthws/rust-action@v1
with:
toolchain: stable
cargo-packages: cargo-audit
- name: Run security audit
run: cargo audit
msrv:
name: Check MSRV
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Setup 1.85.0 Rust toolchain with caching
uses: brndnmtthws/rust-action@v1
with:
toolchain: 1.85.0
- name: Check MSRV
run: cargo check --all-features
build:
strategy:
matrix:
rust-toolchain:
- stable
- beta
- nightly
os:
- ubuntu-latest
- ubuntu-24.04-arm
- macos-latest
- windows-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- name: Setup ${{ matrix.rust-toolchain }} Rust toolchain with caching
uses: brndnmtthws/rust-action@v1
with:
toolchain: ${{ matrix.rust-toolchain }}
- run: cargo build --locked
- run: cargo test --locked
env:
RUST_BACKTRACE: 1
- run: cargo fmt --all -- --check
- run: cargo clippy -- -D warnings
coverage:
name: Code Coverage
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Setup nightly Rust toolchain with caching
uses: brndnmtthws/rust-action@v1
with:
toolchain: nightly
- run: cargo tarpaulin --locked --out Xml
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_ORG_TOKEN }}
fail_ci_if_error: true