name: Rust CI
on:
workflow_dispatch:
pull_request:
branches: [main]
push:
branches: [main]
jobs:
prettier:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Run prettier
run: |-
npx prettier --check .
toml-lint:
runs-on: ubuntu-latest
steps:
- name: Checkout toml files
uses: actions/checkout@v6
- name: Run toml check
run: npx @taplo/cli fmt --config ./taplo/taplo.toml --check
rust_build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- run: rustup show
- uses: Swatinem/rust-cache@v2
with:
save-if: ${{ github.ref == 'refs/heads/main' }}
key: rust-cache-key
- name: Build the project
run: |
cargo build --release --workspace
cargo-lint:
runs-on: ubuntu-latest
needs: rust_build
steps:
- uses: actions/checkout@v6
- run: rustup show
- uses: Swatinem/rust-cache@v2
with:
save-if: ${{ github.ref == 'refs/heads/main' }}
key: rust-cache-key
- name: Format and clippy
run: |
cargo fmt -- --check
cargo clippy --no-deps -- -D warnings
cargo clippy --tests --no-deps -- -D warnings
tests-rust:
runs-on: ubuntu-latest
needs: cargo-lint
steps:
- uses: actions/checkout@v6
- uses: Swatinem/rust-cache@v2
with:
save-if: ${{ github.ref == 'refs/heads/main' }}
key: rust-cache-key
- name: Run tests
run: cargo test
check:
if: always()
needs: [prettier, toml-lint, rust_build, cargo-lint, tests-rust]
runs-on: ubuntu-latest
steps:
- name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1
with:
jobs: ${{ toJSON(needs) }}