name: Publish Python Bindings to PyPI
on:
release:
types: [published]
workflow_dispatch:
permissions:
contents: read
jobs:
build-wheels:
name: Build wheels on ${{ matrix.platform.os }} (${{ matrix.platform.target }}) ${{ matrix.free-threaded && 'Free-Threaded' || '' }}
runs-on: ${{ matrix.platform.os }}
strategy:
fail-fast: false
matrix:
free-threaded: [false, true]
platform:
- { os: ubuntu-latest, target: x86_64-unknown-linux-gnu }
- { os: ubuntu-latest, target: aarch64-unknown-linux-gnu }
- { os: ubuntu-latest, target: x86_64-unknown-linux-musl }
- { os: ubuntu-latest, target: aarch64-unknown-linux-musl }
- { os: macos-13, target: x86_64-apple-darwin }
- { os: macos-14, target: aarch64-apple-darwin }
- { os: windows-latest, target: x86_64-pc-windows-msvc }
- { os: windows-latest, target: aarch64-pc-windows-msvc }
steps:
- uses: actions/checkout@v4
- name: Set up QEMU
if: runner.os == 'Linux'
uses: docker/setup-qemu-action@v3
- name: Setup Python
if: matrix.free-threaded
uses: actions/setup-python@v6
with:
python-version: '3.13t'
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.platform.target }}
manylinux: auto
working-directory: bindings/python
args: --release --out dist --locked --compatibility pypi ${{ matrix.free-threaded && '-i python3.13t' || '' }}
sccache: 'true'
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.platform.target }}${{ matrix.free-threaded && '-freethreaded' || '' }}
path: bindings/python/dist/*.whl
build-sdist:
name: Build source distribution
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build sdist
uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist
working-directory: bindings/python
- name: Upload sdist
uses: actions/upload-artifact@v4
with:
name: sdist
path: bindings/python/dist/*.tar.gz
publish-pypi:
name: Upload release to PyPI
needs: [build-wheels, build-sdist]
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/p/mpatch
permissions:
id-token: write
contents: read
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: dist
pattern: wheels-*
merge-multiple: true
- name: Download sdist
uses: actions/download-artifact@v4
with:
path: dist
pattern: sdist
merge-multiple: true
- name: Publish package distributions to PyPI
uses: pypa/gh-action-pypi-publish@release/v1