name: Rust CI
on:
workflow_call:
inputs:
run-publish-dry-run:
type: boolean
required: false
default: false
run-publish:
type: boolean
required: false
default: false
secrets:
CARGO_REGISTRY_TOKEN:
required: false
jobs:
build-test-check:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set up Rust Toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
- name: Build Project
run: cargo build --verbose
- name: Run Tests
run: cargo test --verbose
- name: Check Formatting
run: cargo fmt -- --check
- name: Run Clippy (Lint)
run: cargo clippy --all-targets --all-features -- -D warnings
- name: Generate Documentation
run: cargo doc --no-deps
- name: Publish Dry Run
if: ${{ inputs.run-publish-dry-run }}
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
run: cargo publish --dry-run
- name: Publish to crates.io
if: ${{ inputs.run-publish }}
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
run: cargo publish