name: CI
permissions:
contents: read
on:
push:
branches: [main, next]
paths-ignore:
- "**.md"
- "**.txt"
- "manifest/**"
- "docs/**"
pull_request:
types: [opened, reopened, synchronize, labeled, unlabeled]
paths-ignore:
- "**.md"
- "**.txt"
- "docs/**"
env:
RUST_CACHE_KEY: rust-cache-20260312
jobs:
lint:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/cleanup-runner
- name: Install Rust
run: |
rustup update --no-self-update stable nightly
rustc --version
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
with:
shared-key: ${{ github.workflow }}-shared
prefix-key: ${{ env.RUST_CACHE_KEY }}
save-if: ${{ github.ref == 'refs/heads/main' }}
- name: Clippy
run: |
make clippy
rustfmt:
name: rustfmt
runs-on: ubuntu-latest
needs: [lint]
if: ${{ always() }}
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/cleanup-runner
- name: Install Rust
run: |
rustup update --no-self-update nightly
rustc --version
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
with:
shared-key: ${{ github.workflow }}-shared
prefix-key: ${{ env.RUST_CACHE_KEY }}
save-if: false
- name: Formatting
run: |
rustup +nightly component add rustfmt
make format-check
unit_tests:
name: unit tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/cleanup-runner
- name: Install rust
run: |
rustup update --no-self-update
rustc --version
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
with:
shared-key: ${{ github.workflow }}-shared-tests
prefix-key: ${{ env.RUST_CACHE_KEY }}
save-if: ${{ github.ref == 'refs/heads/main' }}
- uses: taiki-e/install-action@nextest
- name: Check
run: make test-build
- name: Test
run: make test
integration_test:
name: integration tests
needs: [unit_tests]
runs-on: ubuntu-latest
if: ${{ github.ref_name == 'main' || contains(github.event.pull_request.labels.*.name, 'check:install') }}
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/cleanup-runner
- name: Install Rust
run: |
rustup update --no-self-update
rustc --version
- name: Install all rustup toolchains present in the manifest
run: |
./.github/auxiliary_scripts/install-toolchains.sh
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
with:
shared-key: ${{ github.workflow }}-shared-tests
prefix-key: ${{ env.RUST_CACHE_KEY }}
save-if: false
- uses: taiki-e/install-action@nextest
- name: Check
run: make test-build
- name: Test
run: make integration-test