---
name: Build and Release (Python)
"on":
push:
branches:
- main
tags:
- "*"
pull_request: ~
workflow_dispatch: ~
jobs:
build-test-check:
permissions:
contents: read
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v6
- name: Setup Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
components: clippy
- name: Setup uv
uses: astral-sh/setup-uv@v7
with:
python-version: "3.10"
- run: cargo clippy
- run: cargo test
- run: |-
uv venv
. .venv/bin/activate
echo PATH=$PATH >> $GITHUB_ENV
uvx maturin develop --uv --generate-stubs
- run: uv pip install pytest numpy matplotlib yamloom
- run: uvx ruff check
- run: uvx ty check
- run: uv run pytest
linux:
name: Build Linux Wheels
permissions:
contents: read
needs:
- build-test-check
if: ${{ (startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch')) }}
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
platform:
- runner: ubuntu-22.04
target: x86_64
python_versions:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
- 3.14t
- pypy3.11
- runner: ubuntu-22.04
target: x86
python_versions:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
- 3.14t
- pypy3.11
- runner: ubuntu-22.04
target: aarch64
python_versions:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
- 3.14t
- pypy3.11
- runner: ubuntu-22.04
target: armv7
python_versions:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
- 3.14t
- pypy3.11
- runner: ubuntu-22.04
target: s390x
python_versions:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
- 3.14t
- pypy3.11
- runner: ubuntu-22.04
target: ppc64le
python_versions:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
- 3.14t
- pypy3.11
fail-fast: false
steps:
- name: Checkout Repository
uses: actions/checkout@v6
- run: printf "%s\n" ${{ join(matrix.platform.python_versions, ' ') }} > .yamloom-python-versions
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version-file: ".yamloom-python-versions"
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
manylinux: "2014"
target: ${{ matrix.platform.target }}
sccache: ${{ !(startsWith(github.ref, 'refs/tags/')) }}
args: --release --out dist --generate-stubs --interpreter ${{ join(matrix.platform.python_versions, ' ') }}
- name: Upload Artifact
uses: actions/upload-artifact@v6
with:
path: dist
name: wheels-linux-${{ matrix.platform.target }}
musllinux:
name: Build musllinux Wheels
permissions:
contents: read
needs:
- build-test-check
if: ${{ (startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch')) }}
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
platform:
- runner: ubuntu-22.04
target: x86_64
python_versions:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
- 3.14t
- pypy3.11
- runner: ubuntu-22.04
target: x86
python_versions:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
- 3.14t
- pypy3.11
- runner: ubuntu-22.04
target: aarch64
python_versions:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
- 3.14t
- pypy3.11
- runner: ubuntu-22.04
target: armv7
python_versions:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
- 3.14t
- pypy3.11
fail-fast: false
steps:
- name: Checkout Repository
uses: actions/checkout@v6
- run: printf "%s\n" ${{ join(matrix.platform.python_versions, ' ') }} > .yamloom-python-versions
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version-file: ".yamloom-python-versions"
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
manylinux: musllinux_1_2
target: ${{ matrix.platform.target }}
sccache: ${{ !(startsWith(github.ref, 'refs/tags/')) }}
args: --release --out dist --generate-stubs --interpreter ${{ join(matrix.platform.python_versions, ' ') }}
- name: Upload Artifact
uses: actions/upload-artifact@v6
with:
path: dist
name: wheels-musllinux-${{ matrix.platform.target }}
windows:
name: Build Windows Wheels
permissions:
contents: read
needs:
- build-test-check
if: ${{ (startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch')) }}
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
platform:
- runner: windows-latest
target: x64
python_versions:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
- 3.14t
- pypy3.11
python_arch: x64
- runner: windows-latest
target: x86
python_versions:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
- 3.14t
python_arch: x86
- runner: windows-11-arm
target: aarch64
python_versions:
- "3.12"
- "3.13"
- "3.14"
python_arch: arm64
fail-fast: false
steps:
- name: Checkout Repository
uses: actions/checkout@v6
- run: printf "%s\n" ${{ join(matrix.platform.python_versions, ' ') }} > .yamloom-python-versions
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version-file: ".yamloom-python-versions"
architecture: ${{ matrix.platform.python_arch }}
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.platform.target }}
sccache: ${{ !(startsWith(github.ref, 'refs/tags/')) }}
args: --release --out dist --generate-stubs --interpreter ${{ join(matrix.platform.python_versions, ' ') }}
- name: Upload Artifact
uses: actions/upload-artifact@v6
with:
path: dist
name: wheels-windows-${{ matrix.platform.target }}
macos:
name: Build macOS Wheels
permissions:
contents: read
needs:
- build-test-check
if: ${{ (startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch')) }}
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
platform:
- runner: macos-15-intel
target: x86_64
python_versions:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
- 3.14t
- pypy3.11
- runner: macos-latest
target: aarch64
python_versions:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
- 3.14t
- pypy3.11
fail-fast: false
steps:
- name: Checkout Repository
uses: actions/checkout@v6
- run: printf "%s\n" ${{ join(matrix.platform.python_versions, ' ') }} > .yamloom-python-versions
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version-file: ".yamloom-python-versions"
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.platform.target }}
sccache: ${{ !(startsWith(github.ref, 'refs/tags/')) }}
args: --release --out dist --generate-stubs --interpreter ${{ join(matrix.platform.python_versions, ' ') }}
- name: Upload Artifact
uses: actions/upload-artifact@v6
with:
path: dist
name: wheels-macos-${{ matrix.platform.target }}
sdist:
name: Build Source Distribution
permissions:
contents: read
needs:
- build-test-check
if: ${{ (startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch')) }}
runs-on: ubuntu-22.04
steps:
- name: Checkout Repository
uses: actions/checkout@v6
- name: Build source distribution
uses: PyO3/maturin-action@v1
with:
command: sdist
args: "--out dist"
- name: Upload Artifact
uses: actions/upload-artifact@v6
with:
path: dist
name: wheels-sdist
release_python:
name: Release (Python)
permissions:
contents: write
id-token: write
needs:
- linux
- musllinux
- windows
- macos
- sdist
if: ${{ (startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch')) }}
runs-on: ubuntu-22.04
environment: pypi
steps:
- name: Download Artifact
uses: actions/download-artifact@v7
- name: Setup uv
uses: astral-sh/setup-uv@v7
- run: uv publish --trusted-publishing always wheels-*/*
release_rust:
name: Release (Rust)
permissions:
contents: read
needs:
- linux
- musllinux
- windows
- macos
- sdist
if: ${{ (startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch')) }}
runs-on: ubuntu-22.04
steps:
- name: Checkout Repository
uses: actions/checkout@v6
- run: cargo publish
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}