Skip to content

use standard format #309

use standard format

use standard format #309

Workflow file for this run

# 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-*/*