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.10
- name: Setup mold
if: runner.os == 'Linux'
uses: rui314/setup-mold@v1
- 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.10
- name: Setup mold
uses: rui314/setup-mold@v1
- 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.10
- name: Setup mold
uses: rui314/setup-mold@v1
- 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.10
- name: Setup mold
uses: rui314/setup-mold@v1
- 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.10
- name: Setup mold
uses: rui314/setup-mold@v1
- name: Install cargo-llvm-cov
shell: bash
run: |
if ! command -v cargo-llvm-cov &> /dev/null; then
cargo install cargo-llvm-cov --locked
fi
- 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: Upload coverage artifact
uses: actions/upload-artifact@v7
with:
name: coverage-cobertura
path: target/cobertura.xml
if-no-files-found: error
codecov-publish:
runs-on: ubuntu-latest
needs: rust-coverage
steps:
- uses: actions/checkout@v7
- name: Download coverage artifact
uses: actions/download-artifact@v8
with:
name: coverage-cobertura
path: target
- 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