name: CI
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
CARGO_NET_RETRY: "3"
RUSTFLAGS: "-D warnings"
jobs:
fmt:
name: rustfmt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- run: cargo fmt --all --check
clippy:
name: clippy (${{ matrix.features }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- features: "--no-default-features"
- features: "" - features: "--features full"
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: Swatinem/rust-cache@v2
- run: cargo clippy --locked --all-targets ${{ matrix.features }}
docs:
name: doc
runs-on: ubuntu-latest
env:
RUSTDOCFLAGS: "-D warnings"
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- run: cargo doc --locked --no-deps --features full
test:
name: test (${{ matrix.name }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- { name: "core-only", features: "--no-default-features" }
- { name: "spine", features: "--no-default-features --features smartcore-backend" }
- { name: "default", features: "" }
- { name: "eda", features: "--features eda" }
- { name: "calibration", features: "--features calibration" }
- { name: "anomaly", features: "--features anomaly" }
- { name: "linfa", features: "--features linfa-backend" }
- { name: "hpo", features: "--features hpo" }
- { name: "diagnostics", features: "--features diagnostics" }
- { name: "explain", features: "--features explain" }
- { name: "viz", features: "--features viz" }
- { name: "onnx", features: "--features onnx" }
- { name: "registry", features: "--features registry" }
- { name: "monitor", features: "--features monitor" }
- { name: "serve", features: "--features serve" }
- { name: "timeseries", features: "--features timeseries" }
- { name: "incremental", features: "--features incremental" }
- { name: "automl", features: "--features automl" }
- { name: "full", features: "--features full" }
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.name }}
- run: cargo test --locked ${{ matrix.features }}
os:
name: test (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [windows-latest, macos-latest]
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- run: cargo test --locked
examples:
name: examples & benches
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: run every example
run: |
for ex in spine explore trust workflow backends insight portability operations specialized automl; do
echo "::group::$ex"
cargo run --locked --features full --example "$ex"
echo "::endgroup::"
done
- name: compile benchmarks
run: cargo bench --locked --features full --no-run
package:
name: package (publish dry-run)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@stable
- run: cargo publish --dry-run --locked
python:
name: python wheel
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@stable
- uses: actions/setup-python@v5
with:
python-version: "3.9"
- uses: Swatinem/rust-cache@v2
- run: pip install maturin
- run: maturin build --locked --release
- run: pip install --find-links target/wheels millwright
- run: python -c "import millwright; print('millwright', getattr(millwright, '__version__', 'ok'))"