name: CI
on:
push:
branches: [main, dev]
pull_request:
workflow_call:
env:
CARGO_TERM_COLOR: always
jobs:
check:
name: Format, Clippy, Test, Docs
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install stable toolchain
uses: dtolnay/rust-toolchain@stable
- name: Install nightly toolchain (for rustfmt)
uses: dtolnay/rust-toolchain@nightly
with:
components: rustfmt
- name: Cache cargo registry & build
uses: Swatinem/rust-cache@v2
- name: Format check
run: cargo +nightly fmt --check
- name: Clippy
run: cargo +stable clippy --all-targets --all-features -- -D warnings
- name: Test
run: cargo +stable test
- name: Rustdoc
env:
RUSTDOCFLAGS: "-D warnings"
run: cargo +stable doc --no-deps --document-private-items
- name: Rustdoc (python surface)
env:
RUSTDOCFLAGS: "-D warnings"
run: cargo +stable doc --no-deps --document-private-items --features python
python:
name: Python binding tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- uses: Swatinem/rust-cache@v2
- name: Test (with embedded interpreter)
run: PYO3_PYTHON=$(which python) cargo +stable test --features python,pyo3/auto-initialize
deny:
name: Dependency audit
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: EmbarkStudios/cargo-deny-action@v2
machete:
name: Unused dependencies
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Install cargo-machete
run: cargo install --locked cargo-machete
- run: cargo machete
file-lengths:
name: File lengths
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check file lengths (max 800 lines)
run: python3 scripts/check_file_lengths.py
publish-check:
name: Publish dry-run
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- name: Cache cargo registry & build
uses: Swatinem/rust-cache@v2
- name: cargo publish --dry-run
run: cargo publish --dry-run