It also covers supply-chain policy as code — committing deny.toml, centralizing dependency
versions in [workspace.dependencies] rather than pinning per member — and auxiliary tooling
like cargo hack (feature-powerset checks) and cargo machete (unused-dependency pruning).
Out of scope: writing the tests themselves (unit/integration/proptest/criterion) belongs to
rust-testing-quality; non-Rust CI pipelines are not covered.
Rust Tooling & CI/CD
Agent Workflow (MANDATORY)
Before ANY tooling/CI work, spawn 3 agents in parallel, one Agent call each with a name:
- fuse-ai-pilot:explore-codebase - Inspect existing
Cargo.toml, workspace layout, .github/workflows
- fuse-ai-pilot:research-expert - Verify current cargo / cargo-deny / nextest docs via Context7/Exa
- mcp__context7__query-docs - Check workspace-inheritance and feature-unification specifics
After implementation, run fuse-ai-pilot:sniper for validation.
Overview
| Layer |
Tool(s) |
Purpose |
| Layout |
Cargo workspaces |
One Cargo.lock, one target/, shared metadata |
| Config |
features, workspace.dependencies |
Optional functionality, single source of versions |
| Format/lint |
cargo fmt, cargo clippy |
Style + correctness lints, warnings as errors |
| Supply chain |
cargo deny, cargo audit |
Licenses, bans, duplicate/yanked/vulnerable crates |
| Test |
cargo nextest, cargo test --doc |
Fast parallel run + doc-tests |
| Coverage/MSRV |
cargo llvm-cov, cargo hack |
Line coverage, minimum-supported-Rust matrix |
Critical Rules
- Gate order is fixed - fmt → clippy → deny → audit → nextest →
test --doc → coverage. Cheap, fast-failing checks run first.
-D warnings on clippy in CI - cargo clippy --all-targets --all-features -- -D warnings. A warning must fail the build.
- Commit
deny.toml - supply-chain policy is code; it must be reviewed and versioned.
- Centralize versions in
workspace.dependencies - members inherit with dep.workspace = true; never pin the same crate twice.
cargo test --doc is a separate step - nextest never runs doc-tests (see rust-testing-quality).
Architecture
my-workspace/
├── Cargo.toml # [workspace] members + workspace.dependencies + lints
├── Cargo.lock # single lockfile, committed
├── deny.toml # supply-chain policy, committed
├── crates/
│ ├── core/Cargo.toml # inherits version.workspace = true
│ └── cli/Cargo.toml
└── .github/workflows/ci.yml
→ See ci-workflow.md and deny-toml.md
Reference Guide
Concepts
| Topic |
Reference |
When to Consult |
| Workspaces & features |
workspaces-features.md |
Structuring members, inheriting deps, feature design, MSRV |
| CI gate |
ci-gate.md |
Ordering checks, cargo-deny/audit, coverage |
Templates
| Template |
When to Use |
| ci-workflow.md |
GitHub Actions pipeline |
| deny-toml.md |
Supply-chain policy + workspace root |
Quick Reference
The full local gate
cargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo deny check
cargo audit
cargo nextest run --all-features
cargo test --doc
cargo llvm-cov --all-features --workspace
Workspace dependency inheritance
# root Cargo.toml
[workspace.dependencies]
serde = { version = "1", features = ["derive"] }
# member Cargo.toml
[dependencies]
serde = { workspace = true }
→ See deny-toml.md for the complete root manifest
Best Practices
DO
- Fail fast: run
fmt and clippy before the expensive test/coverage steps
- Keep one
[workspace.dependencies] as the version source of truth
- Run
cargo hack --feature-powerset check to catch broken feature combinations
- Run
cargo machete to prune unused dependencies
DON'T
- Let clippy warnings pass CI (use
-D warnings)
- Duplicate crate versions across members instead of inheriting
- Skip
cargo deny because "audit already ran" — they check different things
- Forget
cargo test --doc after nextest
1---2name: rust-tooling-cicd3description: Use when structuring a Cargo workspace or building a Rust CI pipeline — fmt, clippy, cargo-deny/audit, nextest, coverage, MSRV. Not for writing the tests themselves (rust-testing-quality).4---56<objective>7This skill covers structuring Cargo workspaces (member layout, workspace.dependencies8inheritance, feature design, MSRV) and building the canonical Rust CI gate: fmt → clippy9(-D warnings) → cargo deny → cargo audit → nextest → cargo test --doc → coverage, in that10fixed order so cheap checks fail fast.1112It also covers supply-chain policy as code — committing deny.toml, centralizing dependency13versions in [workspace.dependencies] rather than pinning per member — and auxiliary tooling14like cargo hack (feature-powerset checks) and cargo machete (unused-dependency pruning).1516Out of scope: writing the tests themselves (unit/integration/proptest/criterion) belongs to17rust-testing-quality; non-Rust CI pipelines are not covered.18</objective>1920# Rust Tooling & CI/CD2122## Agent Workflow (MANDATORY)2324Before ANY tooling/CI work, spawn 3 agents in parallel, one `Agent` call each with a `name`:25261. **fuse-ai-pilot:explore-codebase** - Inspect existing `Cargo.toml`, workspace layout, `.github/workflows`272. **fuse-ai-pilot:research-expert** - Verify current cargo / cargo-deny / nextest docs via Context7/Exa283. **mcp__context7__query-docs** - Check workspace-inheritance and feature-unification specifics2930After implementation, run **fuse-ai-pilot:sniper** for validation.3132---3334## Overview3536| Layer | Tool(s) | Purpose |37|-------|---------|---------|38| **Layout** | Cargo workspaces | One `Cargo.lock`, one `target/`, shared metadata |39| **Config** | features, `workspace.dependencies` | Optional functionality, single source of versions |40| **Format/lint** | `cargo fmt`, `cargo clippy` | Style + correctness lints, warnings as errors |41| **Supply chain** | `cargo deny`, `cargo audit` | Licenses, bans, duplicate/yanked/vulnerable crates |42| **Test** | `cargo nextest`, `cargo test --doc` | Fast parallel run + doc-tests |43| **Coverage/MSRV** | `cargo llvm-cov`, `cargo hack` | Line coverage, minimum-supported-Rust matrix |4445---4647## Critical Rules48491. **Gate order is fixed** - fmt → clippy → deny → audit → nextest → `test --doc` → coverage. Cheap, fast-failing checks run first.502. **`-D warnings` on clippy in CI** - `cargo clippy --all-targets --all-features -- -D warnings`. A warning must fail the build.513. **Commit `deny.toml`** - supply-chain policy is code; it must be reviewed and versioned.524. **Centralize versions in `workspace.dependencies`** - members inherit with `dep.workspace = true`; never pin the same crate twice.535. **`cargo test --doc` is a separate step** - nextest never runs doc-tests (see rust-testing-quality).5455---5657## Architecture5859```60my-workspace/61├── Cargo.toml # [workspace] members + workspace.dependencies + lints62├── Cargo.lock # single lockfile, committed63├── deny.toml # supply-chain policy, committed64├── crates/65│ ├── core/Cargo.toml # inherits version.workspace = true66│ └── cli/Cargo.toml67└── .github/workflows/ci.yml68```6970→ See [ci-workflow.md](references/templates/ci-workflow.md) and [deny-toml.md](references/templates/deny-toml.md)7172---7374## Reference Guide7576### Concepts7778| Topic | Reference | When to Consult |79|-------|-----------|-----------------|80| **Workspaces & features** | [workspaces-features.md](references/workspaces-features.md) | Structuring members, inheriting deps, feature design, MSRV |81| **CI gate** | [ci-gate.md](references/ci-gate.md) | Ordering checks, cargo-deny/audit, coverage |8283### Templates8485| Template | When to Use |86|----------|-------------|87| [ci-workflow.md](references/templates/ci-workflow.md) | GitHub Actions pipeline |88| [deny-toml.md](references/templates/deny-toml.md) | Supply-chain policy + workspace root |8990---9192## Quick Reference9394### The full local gate9596```bash97cargo fmt --all -- --check98cargo clippy --all-targets --all-features -- -D warnings99cargo deny check100cargo audit101cargo nextest run --all-features102cargo test --doc103cargo llvm-cov --all-features --workspace104```105106### Workspace dependency inheritance107108```toml109# root Cargo.toml110[workspace.dependencies]111serde = { version = "1", features = ["derive"] }112113# member Cargo.toml114[dependencies]115serde = { workspace = true }116```117118→ See [deny-toml.md](references/templates/deny-toml.md) for the complete root manifest119120---121122## Best Practices123124### DO125- Fail fast: run `fmt` and `clippy` before the expensive test/coverage steps126- Keep one `[workspace.dependencies]` as the version source of truth127- Run `cargo hack --feature-powerset check` to catch broken feature combinations128- Run `cargo machete` to prune unused dependencies129130### DON'T131- Let clippy warnings pass CI (use `-D warnings`)132- Duplicate crate versions across members instead of inheriting133- Skip `cargo deny` because "audit already ran" — they check different things134- Forget `cargo test --doc` after nextest