name: Build wheels
on:
push:
tags:
- "*"
workflow_dispatch:
permissions:
contents: write
jobs:
wheels:
name: Wheels (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- macos-latest
- windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install nightly Rust
uses: dtolnay/rust-toolchain@nightly
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
rust-toolchain: nightly
args: >-
--release
--out dist
--features python-extension,portable-simd
--find-interpreter
sccache: "true"
manylinux: auto
- name: Upload wheel artifacts
uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.os }}
path: dist/*.whl
if-no-files-found: error
- name: Upload wheels to release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: dist/*.whl
sdist:
name: Source distribution
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install nightly Rust
uses: dtolnay/rust-toolchain@nightly
- name: Build sdist
uses: PyO3/maturin-action@v1
with:
rust-toolchain: nightly
command: sdist
args: --out dist
- name: Upload sdist artifact
uses: actions/upload-artifact@v4
with:
name: sdist
path: dist/*.tar.gz
if-no-files-found: error
- name: Upload sdist to release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: dist/*.tar.gz
publish-pypi:
name: Publish to PyPI
needs:
- wheels
- sdist
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
environment:
name: pypi
url: https://pypi.org/p/spafe
permissions:
actions: read
id-token: write
steps:
- name: Download distributions
uses: actions/download-artifact@v4
with:
path: dist
pattern: "*"
merge-multiple: true
- name: Publish package distributions to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist/