Set up GitHub Actions CI for Rust projects. Creates reusable workflows for clippy, rustfmt, tests, cargo-deny, and sqlx. Use when setting up CI, adding GitHub workflows, configuring Rust pipelines, or fixing CI issues in Rust projects.
التثبيت
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
Set up GitHub Actions CI for Rust projects. Creates reusable workflows for clippy, rustfmt, tests, cargo-deny, and sqlx. Use when setting up CI, adding GitHub workflows, configuring Rust pipelines, or fixing CI issues in Rust projects.
Rust GitHub Actions CI
Set up comprehensive CI for Rust projects using reusable workflows.
Built-in via toolchain action (uses Swatinem/rust-cache)
Tool installation
cargo-binstall for additional tools
Clippy strictness
Always -D warnings
Concurrency
NO cancel-in-progress for PRs (want full failure context)
CI Triggers
on:push:branches: [main]
pull_request:
All PRs trigger CI. Only pushes to main (not feature branches).
Workflow Templates
ci.yml (Orchestrator)
name:CIon:push:branches: [main]
pull_request:jobs:fmt:uses:./.github/workflows/_fmt.ymlclippy:uses:./.github/workflows/_clippy.ymltest:uses:./.github/workflows/_test.yml# Optional - add if cargo-deny is configureddeny:uses:./.github/workflows/_deny.yml# Optional - add if project uses sqlxsqlx:uses:./.github/workflows/_sqlx.yml# Optional - add if e2e tests existe2e:uses:./.github/workflows/_e2e.ymlneeds: [test] # Run after unit tests pass# Optional - deployment after CI passesdeploy:needs: [fmt, clippy, test] # Add other required jobsif:github.ref=='refs/heads/main'&&github.event_name=='push'uses:./.github/workflows/_deploy.ymlsecrets:inherit
Adjust migration path if not in root (e.g., cd crates/mydb && sqlx migrate run).
Variant: Feature Matrix
When project has multiple features worth testing separately:
# In _test.yml or _clippy.ymljobs:test:name:Test(${{matrix.features-name}})runs-on:ubuntu-lateststrategy:matrix:include:-features-name:"all"features-args:"--all-features"-features-name:"default"features-args:""-features-name:"no-default"features-args:"--no-default-features"# Add specific feature combos as needed:# - features-name: "feature-x-only"# features-args: "--no-default-features --features feature-x"steps:# ... setup steps ...-name:Runtestsrun:cargotest--workspace${{matrix.features-args}}
Variant: Multiple Rust Versions
When testing stable and nightly:
# In ci.yml - call the workflow twice with different inputsjobs:test-stable:uses:./.github/workflows/_test.ymlwith:rust-version:stabletest-nightly:uses:./.github/workflows/_test.ymlwith:rust-version:nightlycontinue-on-error:true
# In _test.yml - accept rust-version inputon:workflow_call:inputs:rust-version:required:falsetype:stringdefault:stablecontinue-on-error:required:falsetype:booleandefault:falsejobs:test:name:Test(${{inputs.rust-version}})runs-on:ubuntu-latestcontinue-on-error:${{inputs.continue-on-error}}steps:-uses:actions/checkout@v4-name:SetupRustuses:actions-rust-lang/setup-rust-toolchain@v1with:toolchain:${{inputs.rust-version}}-name:Runtestsrun:cargotest--workspace