name: CI
on:
pull_request:
branches: [main]
push:
branches: [main]
permissions:
contents: read
checks: write
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
jobs:
test:
name: build + test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 - name: cargo test
run: cargo test --release --all-targets
fmt:
name: cargo fmt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 with:
components: rustfmt
- run: cargo fmt --all --check
clippy:
name: cargo clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 with:
components: clippy
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 - run: cargo clippy --release --all-targets -- -D warnings
version:
name: version sync
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd - name: Cargo.toml version matches newest CHANGELOG heading
run: |
crate=$(grep -m1 '^version = ' Cargo.toml | sed -E 's/.*"(.*)".*/\1/')
entry=$(grep -m1 -E '^## \[' CHANGELOG.md | sed -E 's/^## \[([^]]*)\].*/\1/')
echo "Cargo.toml: $crate"
echo "CHANGELOG newest: $entry"
if [ "$crate" != "$entry" ]; then
echo "::error::Cargo.toml is $crate but the newest CHANGELOG heading is [$entry]."
echo "The Release workflow publishes a rolling 'latest' tag on every push to main,"
echo "so anything merged here is already released. There is no [Unreleased] state."
echo "Fix: bump Cargo.toml and add a dated '## [$crate] - YYYY-MM-DD' section,"
echo "or correct the heading to match the version being shipped."
exit 1
fi
audit:
name: cargo audit
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: rustsec/audit-check@69366f33c96575abad1ee0dba8212993eecbe998 with:
token: ${{ secrets.GITHUB_TOKEN }}
cli-docs:
name: CLI reference sync
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd - uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 - run: cargo run --release -- cli-reference --check