name: CI
on:
push:
branches: ["master", "codex/**"]
pull_request:
workflow_dispatch:
permissions:
contents: read
jobs:
test:
name: Rust ${{ matrix.toolchain }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
toolchain: ["1.71.0", stable]
steps:
- uses: actions/checkout@v4
- name: Install toolchain
uses: dtolnay/rust-toolchain@v1
with:
toolchain: ${{ matrix.toolchain }}
- name: Cache Rust dependencies and build artifacts
uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.toolchain }}
- name: Test feature combinations and documentation examples
run: bash scripts/test-features.sh
quality:
name: Formatting, lints, docs, and package
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install stable toolchain
uses: dtolnay/rust-toolchain@v1
with:
toolchain: stable
components: rustfmt, clippy
- name: Cache Rust dependencies and build artifacts
uses: Swatinem/rust-cache@v2
with:
key: quality
- name: Set up Python for offline source validation
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Validate taxonomy sources and importer
run: |
python -m unittest discover -s scripts -p 'test_*.py'
python scripts/import_taxonomy.py --check
- name: Formatting
run: cargo fmt --all --check
- name: Clippy
run: cargo clippy --all-targets --all-features -- -D warnings -D clippy::pedantic
- name: Default documentation
run: cargo doc --no-deps --no-default-features
env:
RUSTDOCFLAGS: -D warnings
- name: Complete documentation
run: cargo doc --no-deps --all-features
env:
RUSTDOCFLAGS: -D warnings
- name: Run teaching examples
run: |
cargo run --example lookup
cargo run --example palette --features strum
cargo run --example fixtures --features serde
cargo run --example dice_simulation --features rand
cargo run --example deal_cards --features rand
cargo run --example explore_datasets
cargo run --example taxonomy_browser --features taxonomy > "$RUNNER_TEMP/animals.html"
- name: Verify release package
run: |
cargo package --all-features
python scripts/check_package.py
compatibility:
name: Rust ${{ matrix.toolchain }} compatibility
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
toolchain: [beta, nightly]
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@v1
with:
toolchain: ${{ matrix.toolchain }}
- uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.toolchain }}
- run: cargo check --all-targets --no-default-features
- run: cargo check --all-targets --all-features