name: Python Wheels
on:
push:
tags: ["py-v*"]
pull_request:
paths:
- "bindings/python/**"
- "src/**"
- "Cargo.toml"
- ".github/workflows/python.yml"
workflow_dispatch:
permissions:
contents: read
env:
CARGO_TERM_COLOR: always
jobs:
build:
name: wheels-${{ matrix.platform.os }}-${{ matrix.platform.target }}
runs-on: ${{ matrix.platform.runner }}
strategy:
fail-fast: false
matrix:
platform:
- { os: linux, runner: ubuntu-latest, target: x86_64 }
- { os: macos, runner: macos-latest, target: aarch64 }
- { os: windows, runner: windows-latest, target: x64 }
steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- uses: dtolnay/rust-toolchain@stable
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
command: build
args: --profile python-release --manifest-path bindings/python/Cargo.toml --out dist
manylinux: auto
- name: Smoke test and pytest
shell: bash
run: |
python -m pip install --upgrade pip
python -m pip install numpy pytest
python -m pip install --no-index --find-links dist prism-q
pytest bindings/python/tests -q
- uses: actions/upload-artifact@v7
with:
name: wheels-${{ matrix.platform.os }}-${{ matrix.platform.target }}
path: dist
sdist:
name: sdist
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Build sdist
uses: PyO3/maturin-action@v1
with:
command: sdist
args: --manifest-path bindings/python/Cargo.toml --out dist
- uses: actions/upload-artifact@v7
with:
name: sdist
path: dist
publish:
name: Publish to PyPI
if: startsWith(github.ref, 'refs/tags/py-v')
needs: [build, sdist]
runs-on: ubuntu-latest
environment: pypi
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v8
with:
path: dist
merge-multiple: true
- name: Publish
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist