name: CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
concurrency:
group: ci-${{github.ref}}-${{github.workflow}}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
jobs:
semver:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check semver
uses: obi1kenobi/cargo-semver-checks-action@v2
clippy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Cache cargo
uses: actions/cache@v4
with:
key: cargo-${{runner.os}}-${{hashFiles('**/Cargo.toml')}}
path: |
~/.cargo
target
restore-keys: cargo-${{runner.os}}-
- name: Run cargo clippy
run: cargo clippy --all-targets --all-features -- -D warnings
format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check formatting
run: cargo fmt --check
test:
strategy:
fail-fast: false
matrix:
os: [ 'ubuntu-latest','macos-latest','windows-latest' ]
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v4
- uses: actions/cache@v4
with:
key: cargo-${{runner.os}}-${{hashFiles('**/Cargo.toml')}}
path: |
target/
~/.cargo
restore-keys: cargo-${{runner.os}}-
- uses: taiki-e/install-action@cargo-nextest
- name: Run tests
run: cargo nextest run --all-targets --all-features
doc-tests:
strategy:
fail-fast: false
matrix:
os: [ 'ubuntu-latest','macos-latest','windows-latest' ]
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v4
- uses: actions/cache@v4
with:
key: cargo-${{runner.os}}-${{hashFiles('**/Cargo.toml')}}
path: |
~/.cargo
target/
restore-keys: cargo-${{runner.os}}-
- name: Run doc tests
run: cargo test --doc --all-features
wasm:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/cache@v4
with:
key: cargo-${{runner.os}}-${{hashFiles('**/Cargo.toml')}}
path: |
~/.cargo
target/
restore-keys: cargo-${{runner.os}}-
- run: rustup target add wasm32-unknown-unknown
- run: cargo check --target wasm32-unknown-unknown
build:
strategy:
matrix:
os: ["windows-latest","macos-latest","ubuntu-latest"]
features: ["--all-features","--no-default-features"]
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v4
- uses: actions/cache@v4
with:
key: cargo-${{runner.os}}-${{hashFiles('**/Cargo.toml')}}
path: |
~/.cargo
target/
restore-keys: cargo-${{runner.os}}-
- run: cargo build ${{matrix.features}}
all-systems-pass:
runs-on: ubuntu-latest
needs:
- clippy
- doc-tests
- test
- semver
- format
- wasm
- build
steps:
- uses: actions/checkout@v5
- run: echo All good