mirror of
https://github.com/encounter/nod.git
synced 2026-07-10 12:18:48 -07:00
197 lines
5.3 KiB
YAML
197 lines
5.3 KiB
YAML
name: Python
|
|
|
|
on:
|
|
push:
|
|
pull_request:
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
wheels:
|
|
name: Build wheels (${{ matrix.platform }}, ${{ matrix.target }})
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
# Linux (glibc)
|
|
- os: ubuntu-latest
|
|
platform: linux
|
|
target: x86_64
|
|
args: --zig
|
|
- os: ubuntu-latest
|
|
platform: linux
|
|
target: i686
|
|
args: --zig
|
|
- os: ubuntu-latest
|
|
platform: linux
|
|
target: aarch64
|
|
args: --zig
|
|
- os: ubuntu-latest
|
|
platform: linux
|
|
target: armv7
|
|
args: --zig
|
|
# Linux (musl libc)
|
|
- os: ubuntu-latest
|
|
platform: musllinux
|
|
target: x86_64
|
|
manylinux: musllinux_1_2
|
|
args: --zig
|
|
- os: ubuntu-latest
|
|
platform: musllinux
|
|
target: i686
|
|
manylinux: musllinux_1_2
|
|
args: --zig
|
|
- os: ubuntu-latest
|
|
platform: musllinux
|
|
target: aarch64
|
|
manylinux: musllinux_1_2
|
|
args: --zig
|
|
- os: ubuntu-latest
|
|
platform: musllinux
|
|
target: armv7
|
|
manylinux: musllinux_1_2
|
|
args: --zig
|
|
# macOS
|
|
- os: macos-latest
|
|
platform: macos
|
|
target: x86_64
|
|
- os: macos-latest
|
|
platform: macos
|
|
target: aarch64
|
|
# Windows
|
|
- os: windows-latest
|
|
platform: windows
|
|
target: x86_64
|
|
python_arch: x64
|
|
- os: windows-latest
|
|
platform: windows
|
|
target: i686
|
|
python_arch: x86
|
|
- os: windows-11-arm
|
|
platform: windows
|
|
target: aarch64
|
|
python_arch: arm64
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Setup Python
|
|
uses: actions/setup-python@v6
|
|
if: matrix.python_arch
|
|
with:
|
|
architecture: ${{ matrix.python_arch }}
|
|
python-version: 3.x
|
|
- name: Build wheels
|
|
uses: PyO3/maturin-action@v1
|
|
with:
|
|
working-directory: nod
|
|
target: ${{ matrix.target }}
|
|
args: --release --out dist ${{ matrix.args }}
|
|
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
|
|
manylinux: ${{ matrix.manylinux || 'auto' }}
|
|
|
|
- name: Setup Python (free-threaded)
|
|
uses: actions/setup-python@v6
|
|
if: matrix.python_arch
|
|
with:
|
|
architecture: ${{ matrix.python_arch }}
|
|
python-version: |
|
|
3.13t
|
|
3.14t
|
|
- name: Build free-threaded wheels
|
|
uses: PyO3/maturin-action@v1
|
|
with:
|
|
working-directory: nod
|
|
target: ${{ matrix.target }}
|
|
args: --release --out dist ${{ matrix.args }} -i python3.13t -i python3.14t
|
|
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
|
|
manylinux: ${{ matrix.manylinux || 'auto' }}
|
|
|
|
- name: Upload wheels
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: wheels-${{ matrix.platform }}-${{ matrix.target }}
|
|
path: nod/dist
|
|
|
|
sdist:
|
|
name: Build sdist
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v6
|
|
- name: Build sdist
|
|
uses: PyO3/maturin-action@v1
|
|
with:
|
|
working-directory: nod
|
|
command: sdist
|
|
args: --out dist
|
|
- name: Upload sdist
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: sdist
|
|
path: nod/dist
|
|
|
|
test:
|
|
name: Test wheels (${{ matrix.os }})
|
|
runs-on: ${{ matrix.os }}
|
|
needs: [wheels]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-latest
|
|
- ubuntu-22.04-arm
|
|
- macos-latest
|
|
- macos-15-intel
|
|
- windows-latest
|
|
- windows-11-arm
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v6
|
|
- name: Setup Python
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
# Windows ARM support only available for 3.11+
|
|
python-version: "3.11"
|
|
- name: Download wheels
|
|
uses: actions/download-artifact@v8
|
|
with:
|
|
pattern: wheels-*
|
|
path: nod/dist
|
|
merge-multiple: true
|
|
- name: Run tests
|
|
shell: bash
|
|
working-directory: nod
|
|
run: |
|
|
pip install nod-rs --no-index --find-links dist --force-reinstall
|
|
pip install pytest
|
|
pytest
|
|
|
|
release:
|
|
name: Release
|
|
runs-on: ubuntu-latest
|
|
if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
|
|
needs: [wheels, sdist, test]
|
|
permissions:
|
|
id-token: write
|
|
contents: write
|
|
attestations: write
|
|
steps:
|
|
- name: Download wheels
|
|
uses: actions/download-artifact@v8
|
|
with:
|
|
path: nod/dist
|
|
merge-multiple: true
|
|
- name: Generate artifact attestation
|
|
uses: actions/attest-build-provenance@v4
|
|
with:
|
|
subject-path: nod/dist/*
|
|
- name: Publish to PyPI
|
|
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
|
uses: PyO3/maturin-action@v1
|
|
with:
|
|
command: upload
|
|
args: --non-interactive --skip-existing nod/dist/*
|