name: Python wheels
on:
push:
branches: [trunk]
tags: ["python-v*"]
paths:
- "python/**"
- "src/**"
- "Cargo.toml"
- ".github/workflows/python-wheels.yml"
pull_request:
paths:
- "python/**"
- "src/**"
workflow_dispatch:
permissions:
contents: read
defaults:
run:
working-directory: python
jobs:
linux:
name: Linux ${{ matrix.target }}
runs-on: ${{ matrix.target == 'aarch64' && 'ubuntu-24.04-arm' || 'ubuntu-latest' }}
strategy:
fail-fast: false
matrix:
target: [x86_64, aarch64]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- uses: PyO3/maturin-action@v1
with:
working-directory: python
target: ${{ matrix.target }}
manylinux: 2_28
rust-toolchain: stable
args: --release --out dist -vv
- uses: actions/upload-artifact@v4
with:
name: wheels-linux-${{ matrix.target }}
path: python/dist/
macos:
name: macOS ${{ matrix.target }}
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
target: [x86_64, aarch64]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- uses: PyO3/maturin-action@v1
with:
working-directory: python
target: ${{ matrix.target }}
args: --release --out dist
- uses: actions/upload-artifact@v4
with:
name: wheels-macos-${{ matrix.target }}
path: python/dist/
windows:
name: Windows ${{ matrix.target }}
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
target: [x64]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- uses: PyO3/maturin-action@v1
with:
working-directory: python
target: ${{ matrix.target }}
args: --release --out dist
- uses: actions/upload-artifact@v4
with:
name: wheels-windows-${{ matrix.target }}
path: python/dist/
sdist:
name: Source distribution
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: PyO3/maturin-action@v1
with:
working-directory: python
command: sdist
args: --out dist
- uses: actions/upload-artifact@v4
with:
name: sdist
path: python/dist/
test:
name: Test (${{ matrix.os }} / Python ${{ matrix.python }})
needs: [linux]
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
python: ["3.9", "3.12"]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
- uses: actions/download-artifact@v4
with:
name: wheels-linux-x86_64
path: python/dist
- name: Install wheel
run: pip install --find-links dist aletheiadb pytest
- name: Run tests
working-directory: python
run: pytest tests/ -v
release:
name: Publish to PyPI
runs-on: ubuntu-latest
needs: [linux, macos, windows, sdist, test]
if: startsWith(github.ref, 'refs/tags/python-v')
environment: pypi
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v4
with:
path: dist
merge-multiple: true
- uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist/