name: CI
on:
pull_request:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
rust:
name: Rust (fmt / clippy / test / coverage)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Set up Rust stable
uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt, llvm-tools-preview
- name: Cache Rust build artefacts
uses: Swatinem/rust-cache@v2
- name: cargo fmt
run: cargo fmt --all -- --check
- name: cargo clippy (all targets, all features)
run: cargo clippy --all-targets --all-features -- -D warnings
- name: cargo test (all features)
run: cargo test --all-features
- name: Install cargo-llvm-cov
uses: taiki-e/install-action@cargo-llvm-cov
- name: cargo llvm-cov
run: cargo llvm-cov --all-features --lcov --output-path lcov.info
- name: cargo build --release
run: cargo build --release
audit:
name: Security audit
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Run cargo-audit
uses: rustsec/audit-check@v2.0.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
check-deps:
name: Check dependencies
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Install cargo-deny
uses: taiki-e/install-action@cargo-deny
- name: cargo deny check
run: cargo deny check
- name: Install cargo-hack
uses: taiki-e/install-action@cargo-hack
- name: cargo hack check
run: cargo hack check --feature-powerset --depth 2
typos:
name: Spell check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Run typos
uses: crate-ci/typos@v1.49.0