name: ci
on:
pull_request:
push:
branches: [master]
permissions:
contents: read
env:
CARGO_TERM_COLOR: always
SCCACHE_GHA_ENABLED: true
RUSTC_WRAPPER: sccache
jobs:
test:
name: test (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- macos-latest
- windows-latest
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@stable
- name: Setup sccache
uses: mozilla-actions/sccache-action@v0.0.11
with:
version: "v0.16.0"
- name: Run tests
run: cargo test --workspace --all-features --all-targets --locked
fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Check formatting
run: cargo fmt --all -- --check
clippy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- name: Setup sccache
uses: mozilla-actions/sccache-action@v0.0.11
with:
version: "v0.16.0"
- name: Lint code
run: cargo clippy --workspace --all-features --all-targets --locked -- -D warnings
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@stable
- name: Setup sccache
uses: mozilla-actions/sccache-action@v0.0.11
with:
version: "v0.16.0"
- name: Build documentation
run: cargo doc --workspace --all-features --no-deps --locked
package:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@stable
- name: Setup sccache
uses: mozilla-actions/sccache-action@v0.0.11
with:
version: "v0.16.0"
- name: Check crates.io package
run: cargo publish --dry-run --locked
machete:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Machete
uses: bnjbvr/cargo-machete@main
rust-coverage:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@stable
- name: Setup sccache
uses: mozilla-actions/sccache-action@v0.0.11
with:
version: "v0.16.0"
- uses: cargo-bins/cargo-binstall@main
- name: Install cargo-llvm-cov
shell: bash
run: cargo binstall cargo-llvm-cov --locked --no-confirm
- name: Run coverage
shell: bash
run: |
cargo llvm-cov clean --workspace
cargo llvm-cov --workspace --all-features --all-targets --cobertura --output-path=target/cobertura.xml
- name: Codecov publish
uses: codecov/codecov-action@v7
with:
files: target/cobertura.xml
disable_search: true
token: ${{ secrets.CODECOV_TOKEN }}
- name: Codecov housekeeping
shell: bash
run: |
rm -f codecov codecov.SHA256SUM codecov.SHA256SUM.sig
release:
name: release
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
needs: [test, fmt, clippy, docs, package, machete, rust-coverage]
runs-on: ubuntu-latest
environment: release
permissions:
contents: write
id-token: write
pull-requests: read
concurrency:
group: release-${{ github.repository }}
cancel-in-progress: false
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
persist-credentials: false
- uses: dtolnay/rust-toolchain@stable
- name: Setup sccache
uses: mozilla-actions/sccache-action@v0.0.11
with:
version: "v0.16.0"
- name: Publish unpublished crate versions
uses: release-plz/action@v0.5.133
with:
command: release
version: 0.3.162
env:
GITHUB_TOKEN: ${{ github.token }}