name: Rust CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
env:
CARGO_TERM_COLOR: always
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
CARGO_FEATURES_ARG: ''
jobs:
test:
name: Build & Test
runs-on: ubuntu-latest
strategy:
matrix:
channel:
- stable
- beta
- nightly
include:
- cargo_features_arg: ''
- channel: nightly
cargo_features_arg: '--features unstable'
steps:
- uses: actions/checkout@v3
- name: Install toolchain
run: |
rustup toolchain install ${{ matrix.channel }} --no-self-update --profile minimal -c "clippy,rustfmt"
rustup default ${{ matrix.channel }}
- name: Cache cargo registry & index
uses: actions/cache@v3
with:
path: |
~/.cargo/registry
~/.cargo/git
key: cargo-index-${{ runner.os }}-${{ hashFiles('**/Cargo.*') }}
- name: Build
run: |
cargo build --workspace --all-targets ${{ matrix.cargo_features_arg }}
- name: Test
run: |
cargo test --workspace --all-targets ${{ matrix.cargo_features_arg }}
check:
name: Rustfmt & Clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Cache cargo registry & index
uses: actions/cache@v3
with:
path: |
~/.cargo/registry
~/.cargo/git
key: cargo-index-${{ runner.os }}-${{ hashFiles('**/Cargo.*') }}
- name: Rustfmt
run: |
cargo fmt --all --check
- name: Clippy
run: |
cargo clippy --workspace --all-targets