use standard format #309
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# PSA: Use actionlint (https://github.com/rhysd/actionlint) to check actions! | |
name: CI | |
on: | |
push: | |
branches: [ "main" ] | |
tags: [ "*" ] | |
pull_request: | |
workflow_dispatch: | |
permissions: | |
contents: read | |
jobs: | |
check: | |
strategy: | |
matrix: | |
os: ['ubuntu-latest', 'windows-latest', 'macos-latest'] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
- name: Set up Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: "20" | |
cache: "npm" | |
- run: npm ci | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.12" | |
cache: "pip" | |
- name: Install Python dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install matplotlib maturin | |
- name: Set up Rust caching | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/bin/ | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
target/ | |
key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-cargo-${{ hashFiles('Cargo.lock') }} | |
${{ runner.os }}-cargo | |
- name: Set up stable Rust | |
run: rustup toolchain install stable | |
# GitHub actions has a function, hashFiles(), that would be great here, | |
# except hashFiles doesn't work for files outside GITHUB_WORKSPACE. | |
# While Python runs cross-platform, step output requires uniform shell. | |
# Since we are forcing bash, we can also use `test` --- without quotes | |
# around the file so that tilde expansion works. | |
- name: Check for mdBook | |
id: mdbook-exists | |
shell: bash | |
run: | | |
if [ ! -f ~/.cargo/bin/mdbook ]; then echo "v=install" >> $GITHUB_OUTPUT; fi | |
- name: Install mdBook | |
if: steps.mdbook-exists.outputs.v == 'install' | |
run: cargo install mdbook | |
- name: Check Rust code (with & without features) | |
run: | | |
cargo check --workspace | |
cargo check --workspace --all-features | |
- name: Run Clippy (with & without features) | |
run: | | |
cargo clippy --workspace | |
cargo clippy --workspace --all-features | |
- name: Check Rust format | |
run: cargo fmt --all --check | |
- name: Test Rust code | |
env: | |
RUST_BACKTRACE: 1 | |
run: | | |
cargo test --workspace --features f64,gamut,tty | |
cargo test --example query -- --nocapture | |
- name: Build extension module | |
run: pip install -e .[dev] | |
- name: Typecheck and test Python code | |
run: python -m runtest | |
- name: Test guide's Rust examples | |
if: runner.os != 'Windows' | |
run: | | |
cargo clean | |
cargo build | |
mdbook test -L target/debug/deps docs | |
- name: Test guide's Python examples | |
if: runner.os != 'Windows' | |
run: | | |
mdbook build docs | |
python docs/book.py | |
linux: | |
runs-on: ${{ matrix.platform.runner }} | |
strategy: | |
matrix: | |
platform: | |
- runner: ubuntu-latest | |
target: x86_64 | |
- runner: ubuntu-latest | |
target: x86 | |
- runner: ubuntu-latest | |
target: aarch64 | |
- runner: ubuntu-latest | |
target: armv7 | |
- runner: ubuntu-latest | |
target: s390x | |
- runner: ubuntu-latest | |
target: ppc64le | |
needs: [check] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: 3.x | |
- name: Build wheels | |
uses: PyO3/maturin-action@v1 | |
with: | |
target: ${{ matrix.platform.target }} | |
args: --release --out dist --manifest-path crates/prettypretty/Cargo.toml | |
sccache: 'true' | |
manylinux: auto | |
- name: Upload wheels | |
uses: actions/upload-artifact@v4 | |
with: | |
name: wheels-linux-${{ matrix.platform.target }} | |
path: dist | |
musllinux: | |
runs-on: ${{ matrix.platform.runner }} | |
strategy: | |
matrix: | |
platform: | |
- runner: ubuntu-latest | |
target: x86_64 | |
- runner: ubuntu-latest | |
target: x86 | |
- runner: ubuntu-latest | |
target: aarch64 | |
- runner: ubuntu-latest | |
target: armv7 | |
needs: [check] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: 3.x | |
- name: Build wheels | |
uses: PyO3/maturin-action@v1 | |
with: | |
target: ${{ matrix.platform.target }} | |
args: > | |
--release --out dist | |
--no-default-features --features f64,gamut,pyffi | |
--manifest-path crates/prettypretty/Cargo.toml | |
sccache: 'true' | |
manylinux: musllinux_1_2 | |
- name: Upload wheels | |
uses: actions/upload-artifact@v4 | |
with: | |
name: wheels-musllinux-${{ matrix.platform.target }} | |
path: dist | |
windows: | |
runs-on: ${{ matrix.platform.runner }} | |
strategy: | |
matrix: | |
platform: | |
- runner: windows-latest | |
target: x64 | |
- runner: windows-latest | |
target: x86 | |
needs: [check] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: 3.x | |
architecture: ${{ matrix.platform.target }} | |
- name: Build wheels | |
uses: PyO3/maturin-action@v1 | |
with: | |
target: ${{ matrix.platform.target }} | |
args: > | |
--release --out dist | |
--no-default-features --features f64,gamut,pyffi | |
--manifest-path crates/prettypretty/Cargo.toml | |
sccache: 'true' | |
- name: Upload wheels | |
uses: actions/upload-artifact@v4 | |
with: | |
name: wheels-windows-${{ matrix.platform.target }} | |
path: dist | |
macos: | |
runs-on: ${{ matrix.platform.runner }} | |
strategy: | |
matrix: | |
platform: | |
- runner: macos-latest | |
target: x86_64 | |
- runner: macos-latest | |
target: aarch64 | |
needs: [check] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: 3.x | |
- name: Build wheels | |
uses: PyO3/maturin-action@v1 | |
with: | |
target: ${{ matrix.platform.target }} | |
args: > | |
--release --out dist | |
--no-default-features --features f64,gamut,pyffi | |
--manifest-path crates/prettypretty/Cargo.toml | |
sccache: 'true' | |
- name: Upload wheels | |
uses: actions/upload-artifact@v4 | |
with: | |
name: wheels-macos-${{ matrix.platform.target }} | |
path: dist | |
sdist: | |
runs-on: ubuntu-latest | |
needs: [check] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Build sdist | |
uses: PyO3/maturin-action@v1 | |
with: | |
command: sdist | |
args: --out dist --manifest-path crates/prettypretty/Cargo.toml | |
- name: Upload sdist | |
uses: actions/upload-artifact@v4 | |
with: | |
name: wheels-sdist | |
path: dist | |
release: | |
name: Release | |
runs-on: ubuntu-latest | |
if: | | |
startsWith(github.ref, 'refs/tags/') && | |
github.repository == 'apparebit/prettypretty' | |
needs: [linux, musllinux, windows, macos, sdist] | |
permissions: | |
id-token: write | |
steps: | |
- uses: actions/download-artifact@v4 | |
- name: Publish to PyPI | |
uses: PyO3/maturin-action@v1 | |
with: | |
command: upload | |
args: --non-interactive --skip-existing wheels-*/* |