actions/checkout v6 persists creds under $RUNNER_TEMP (needs runner ≥2.329.0 — GitHub-hosted has it). codecov-action v6 ships on node24.
124 lines
3.9 KiB
YAML
124 lines
3.9 KiB
YAML
name: CI
|
||
|
||
on:
|
||
push:
|
||
branches: [main]
|
||
pull_request:
|
||
branches: [main]
|
||
|
||
concurrency:
|
||
group: ${{ github.workflow }}-${{ github.ref }}
|
||
cancel-in-progress: true
|
||
|
||
env:
|
||
CARGO_TERM_COLOR: always
|
||
RUSTFLAGS: -D warnings
|
||
|
||
jobs:
|
||
# ── Fast lane: OS × toolchain matrix ──────────────────────────────
|
||
check:
|
||
name: check (${{ matrix.os }}, ${{ matrix.toolchain }})
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||
toolchain: [stable, "1.93.0"] # MSRV
|
||
runs-on: ${{ matrix.os }}
|
||
steps:
|
||
- uses: actions/checkout@v6
|
||
- uses: dtolnay/rust-toolchain@master
|
||
with:
|
||
toolchain: ${{ matrix.toolchain }}
|
||
components: rustfmt, clippy
|
||
- uses: Swatinem/rust-cache@v2
|
||
- uses: taiki-e/install-action@v2
|
||
with:
|
||
tool: cargo-nextest
|
||
- name: fmt
|
||
run: cargo fmt --check
|
||
- name: clippy
|
||
run: cargo clippy --all-targets --all-features -- -D warnings
|
||
- name: nextest
|
||
run: cargo nextest run --all-features --profile ci
|
||
- name: doctests
|
||
run: cargo test --doc --all-features
|
||
|
||
# ── Supply-chain hygiene ──────────────────────────────────────────
|
||
deny:
|
||
name: cargo deny
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v6
|
||
- uses: taiki-e/install-action@v2
|
||
with:
|
||
tool: cargo-deny
|
||
- run: cargo deny check
|
||
|
||
audit:
|
||
name: cargo audit
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v6
|
||
- uses: taiki-e/install-action@v2
|
||
with:
|
||
tool: cargo-audit
|
||
- run: cargo audit
|
||
|
||
# ── Public-API semver compliance (PR only) ────────────────────────
|
||
semver:
|
||
name: cargo semver-checks
|
||
if: github.event_name == 'pull_request'
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v6
|
||
- uses: dtolnay/rust-toolchain@stable
|
||
- uses: Swatinem/rust-cache@v2
|
||
- uses: taiki-e/install-action@v2
|
||
with:
|
||
tool: cargo-semver-checks
|
||
- name: semver-checks (non-blocking until 0.1 on crates.io)
|
||
run: cargo semver-checks check-release || echo "pre-publish; ignoring"
|
||
|
||
# ── Line + branch coverage (Linux stable only) ────────────────────
|
||
coverage:
|
||
name: coverage
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v6
|
||
- uses: dtolnay/rust-toolchain@stable
|
||
with:
|
||
components: llvm-tools-preview
|
||
- uses: Swatinem/rust-cache@v2
|
||
- uses: taiki-e/install-action@v2
|
||
with:
|
||
tool: cargo-llvm-cov,cargo-nextest
|
||
- name: lcov
|
||
run: cargo llvm-cov nextest --all-features --lcov --output-path lcov.info
|
||
- uses: codecov/codecov-action@v6
|
||
with:
|
||
files: lcov.info
|
||
fail_ci_if_error: false
|
||
env:
|
||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||
|
||
# ── Build examples (smoke) ────────────────────────────────────────
|
||
examples:
|
||
name: examples build
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v6
|
||
- uses: dtolnay/rust-toolchain@stable
|
||
- uses: Swatinem/rust-cache@v2
|
||
- run: cargo build --example quickstart
|
||
- run: cargo build --example simulator --features sim
|
||
|
||
# ── Stateright BFS safety proof (fast) ────────────────────────────
|
||
stateright:
|
||
name: stateright BFS N=3 K=2
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v6
|
||
- uses: dtolnay/rust-toolchain@stable
|
||
- uses: Swatinem/rust-cache@v2
|
||
- run: cargo test --test stateright_model --release --all-features -- bfs_n3_k2 --ignored
|