on:
merge_group:
pull_request:
branches: [main, backports/*]
push:
branches: [main, backports/*]
name: CI
env:
RUSTDOCFLAGS: "-Dwarnings"
CARGO_TERM_COLOR: always
jobs:
versions:
name: Determine toolchain versions
runs-on: ubuntu-latest
outputs:
stable: ${{ steps.stable.outputs.version }}
msrv: ${{ steps.msrv.outputs.version }}
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: Read pinned stable version
id: stable
run: |
set -euo pipefail
version=$(awk -F'"' '/^channel/{print $2}' rust-toolchain.toml)
echo "Pinned stable: $version"
echo "version=$version" >> "$GITHUB_OUTPUT"
- name: Read MSRV
id: msrv
run: |
set -euo pipefail
version=$(awk -F'"' '/^rust-version/{print $2}' Cargo.toml)
echo "MSRV: $version"
echo "version=$version" >> "$GITHUB_OUTPUT"
build:
name: Build
needs: versions
runs-on: ubuntu-latest
strategy:
matrix:
toolchain:
- "${{ needs.versions.outputs.msrv }}"
- "${{ needs.versions.outputs.stable }}"
- stable
- nightly
- beta
env:
RUSTUP_TOOLCHAIN: ${{ matrix.toolchain }}
continue-on-error: ${{ contains(fromJSON('["stable", "nightly", "beta"]'), matrix.toolchain) }}
steps:
- uses: extractions/setup-just@v2
- name: Install rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.toolchain }}
- name: Checkout sources
uses: actions/checkout@v4
- name: Run cargo build
run: just build
check:
name: Check
needs: versions
runs-on: ubuntu-latest
env:
RUSTUP_TOOLCHAIN: ${{ needs.versions.outputs.stable }}
strategy:
matrix:
steps:
- name: cargo check
run: just check
- name: cargo hack check
run: just check-hack-powerset
hack: true
- name: cargo hack check --each-feature
run: just check-hack-each
hack: true
- name: cargo hack check --tests
run: just check-hack-tests
hack: true
- name: cargo hack check --examples
run: just check-hack-examples
hack: true
- name: cargo doc
run: just docs
- name: clippy
run: just clippy
- name: fmt
run: just fmt
steps:
- uses: extractions/setup-just@v2
- name: Install rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ needs.versions.outputs.stable }}
components: clippy, rustfmt
- name: Checkout sources
uses: actions/checkout@v4
- uses: taiki-e/install-action@cargo-hack
if: matrix.steps.hack
- name: ${{ matrix.steps.name }}
run: ${{ matrix.steps.run }}
pre-commit:
name: pre-commit
needs: versions
runs-on: ubuntu-latest
env:
RUSTUP_TOOLCHAIN: ${{ needs.versions.outputs.stable }}
steps:
- uses: actions/setup-python@v5
- run: pip install pre-commit
- uses: extractions/setup-just@v2
- name: Install rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ needs.versions.outputs.stable }}
- name: Checkout sources
uses: actions/checkout@v4
- name: Run pre-commit
run: just pre-commit-ci
test:
name: Tests
needs: versions
runs-on: ubuntu-latest
strategy:
matrix:
toolchain:
- "${{ needs.versions.outputs.stable }}"
- stable
- beta
continue-on-error: ${{ contains(fromJSON('["stable", "nightly", "beta"]'), matrix.toolchain) }}
env:
RUSTUP_TOOLCHAIN: ${{ matrix.toolchain }}
steps:
- uses: extractions/setup-just@v2
- uses: taiki-e/install-action@nextest
- name: Checkout
uses: actions/checkout@v4
- name: Install rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.toolchain }}
- name: Build cargo tests
run: just test-build
- name: Run cargo test
run: just test-run
deny:
name: Deny
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Run cargo deny
uses: EmbarkStudios/cargo-deny-action@v2
with:
command: check bans licenses sources