name: ci
on:
pull_request:
push:
branches:
- main
workflow_dispatch:
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
lint:
name: lint
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
- name: Rust toolchain
uses: dtolnay/rust-toolchain@f7ccc83f9ed1e5b9c81d8a67d7ad1a747e22a561
with:
toolchain: stable
components: rustfmt, clippy
- name: Rust cache
uses: ./.github/actions/setup-rust-cache
with:
cache-key-suffix: lint
toolchain: stable
- name: rustfmt
run: cargo fmt --check
- name: clippy
run: cargo clippy --all-targets --all-features -- -D warnings
test:
name: test
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
- name: Rust toolchain
uses: dtolnay/rust-toolchain@f7ccc83f9ed1e5b9c81d8a67d7ad1a747e22a561
with:
toolchain: stable
- name: Rust cache
uses: ./.github/actions/setup-rust-cache
with:
cache-key-suffix: test
toolchain: stable
- name: Install nextest
uses: ./.github/actions/setup-cargo-tools
with:
binstall-tools: cargo-nextest
- name: nextest
run: cargo nextest run --profile ci
- name: doctests
run: cargo test --doc
msrv:
name: msrv
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
- name: Read MSRV
id: msrv
shell: bash
run: |
set -euo pipefail
if [ ! -f Cargo.toml ]; then
echo "found=false" >>"$GITHUB_OUTPUT"
exit 0
fi
msrv="$(awk -F= '
/^[[:space:]]*rust-version[[:space:]]*=/ {
v=$2
gsub(/^[[:space:]]+|[[:space:]]+$/, "", v)
gsub(/"/, "", v)
print v
exit
}
' Cargo.toml || true)"
if [ -z "${msrv}" ]; then
echo "found=false" >>"$GITHUB_OUTPUT"
exit 0
fi
echo "found=true" >>"$GITHUB_OUTPUT"
echo "msrv=${msrv}" >>"$GITHUB_OUTPUT"
- name: Rust toolchain (MSRV)
if: steps.msrv.outputs.found == 'true'
uses: dtolnay/rust-toolchain@f7ccc83f9ed1e5b9c81d8a67d7ad1a747e22a561
with:
toolchain: ${{ steps.msrv.outputs.msrv }}
- name: Rust cache
if: steps.msrv.outputs.found == 'true'
uses: ./.github/actions/setup-rust-cache
with:
cache-key-suffix: msrv
toolchain: ${{ steps.msrv.outputs.msrv }}
- name: cargo check (MSRV)
if: steps.msrv.outputs.found == 'true'
run: cargo check --all-targets --all-features