work around hashFiles not processing paths outside GITHUB_WORKSPACE b… #224
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 | |
- name: Check for mdBook | |
id: mdbook-exists | |
run: | | |
python -c 'from pathlib import Path; print(f"v={(Path.home()/".cargo"/"bin"/"mdbook").exists()}")' >> $GITHUB_OUTPUT | |
- name: Install mdBook | |
if: steps.mdbook-exists.outputs.v == 'False' | |
run: cargo install mdbook | |
- name: Check Rust code (with & without features) | |
run: | | |
cargo check | |
cargo check --all-features | |
- name: Run Clippy (with & without features) | |
run: | | |
cargo clippy | |
cargo clippy --all-features | |
- name: Check Rust format | |
run: cargo fmt --check | |
- name: Test Rust code | |
run: cargo test | |
- 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 | |
run: | | |
cargo clean | |
cargo build | |
mdbook test -L target/debug/deps docs | |
- name: Test guide's Python examples | |
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 | |
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 | |
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 | |
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-12 | |
target: x86_64 | |
- runner: macos-14 | |
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 | |
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 | |
- 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-*/* |