Files
salvium-rs/.github/workflows/ci.yml
T
Matt Hess d00ff2e1d8 Update CI/CD: per-crate test matrix, clippy, WASM check, release gating
CI now runs fmt, clippy, compile (debug+release), WASM target check,
   per-crate test jobs (types+consensus, crypto, wallet+tx, miner+multisig+rpc),
   doc tests, and a final ci-pass gate. Release workflow gates on tests,
   fixes workspace target paths, and adds scaffolding for publishing
   binaries to an external releases repo.
2026-02-18 00:51:39 +00:00

158 lines
4.6 KiB
YAML

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
env:
CARGO_TERM_COLOR: always
RUSTFLAGS: "-Dwarnings"
jobs:
# ── Stage 1: Compile-time checks ────────────────────────────────────
fmt:
name: Formatting
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- run: cargo fmt --all -- --check
clippy:
name: Lint (clippy)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: Swatinem/rust-cache@v2
- run: cargo clippy --workspace --all-targets
compile:
name: Compile workspace
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Build all crates
run: cargo build --workspace
- name: Build in release mode
run: cargo build --workspace --release
compile-wasm:
name: Compile WASM target
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- uses: Swatinem/rust-cache@v2
- name: Check crypto crate compiles for WASM
run: cargo check -p salvium-crypto --target wasm32-unknown-unknown
# ── Stage 2: Unit tests (per-crate, parallel) ───────────────────────
test-types:
name: "Test: types + consensus rules"
needs: [compile]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: salvium-types
run: cargo test -p salvium-types -- --nocapture
- name: salvium-consensus
run: cargo test -p salvium-consensus -- --nocapture
test-crypto:
name: "Test: crypto verification"
needs: [compile]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: salvium-crypto (unit)
run: cargo test -p salvium-crypto --lib -- --nocapture
- name: salvium-crypto (integration)
run: cargo test -p salvium-crypto --test '*' -- --nocapture
test-wallet:
name: "Test: wallet + transactions"
needs: [compile]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: salvium-wallet
run: cargo test -p salvium-wallet --lib -- --nocapture
- name: salvium-tx
run: cargo test -p salvium-tx -- --nocapture
test-infra:
name: "Test: miner + multisig + RPC"
needs: [compile]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: salvium-miner
run: cargo test -p salvium-miner -- --nocapture
- name: salvium-multisig
run: cargo test -p salvium-multisig -- --nocapture
- name: salvium-rpc
run: cargo test -p salvium-rpc -- --nocapture
# ── Stage 3: Doc tests + documentation build ────────────────────────
docs:
name: Documentation
needs: [compile]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Doc tests
run: cargo test --workspace --doc
- name: Build docs (check for broken links)
run: cargo doc --workspace --no-deps
env:
RUSTDOCFLAGS: "-Dwarnings"
# ── Gate: all checks must pass ──────────────────────────────────────
ci-pass:
name: CI passed
if: always()
needs:
- fmt
- clippy
- compile
- compile-wasm
- test-types
- test-crypto
- test-wallet
- test-infra
- docs
runs-on: ubuntu-latest
steps:
- name: Check all jobs passed
run: |
if [[ "${{ contains(needs.*.result, 'failure') }}" == "true" ]]; then
echo "One or more jobs failed"
exit 1
fi
if [[ "${{ contains(needs.*.result, 'cancelled') }}" == "true" ]]; then
echo "One or more jobs were cancelled"
exit 1
fi
echo "All CI checks passed"