Skip to content

MAINT: Modernize cibuildwheel infrastructure #22

MAINT: Modernize cibuildwheel infrastructure

MAINT: Modernize cibuildwheel infrastructure #22

Workflow file for this run

# from https://cibuildwheel.pypa.io/en/stable/setup/#github-actions
name: Build
on:
push:
branches: ["master"]
pull_request:
branches: ["master"]
release:
types: [published]
concurrency:
group: ${{ github.workflow }}-${{ github.event.number }}-${{ github.event.ref }}
cancel-in-progress: true
jobs:
build_wheels:
name: ${{ matrix.os }} ${{ matrix.arch }} py${{ matrix.python}} wheels
runs-on: ${{ matrix.os }}
continue-on-error: true
strategy:
matrix:
# macos-13 is an intel runner, macos-14 is apple silicon
os: [ubuntu-latest, windows-latest, macos-13, macos-14]
arch: [native]
python: ["*"]
# Split aarch64 across jobs because it uses emulation (slow)
include:
- os: ubuntu-latest
arch: i686
python: "*"
- os: ubuntu-latest
arch: aarch64
python: "38"
- os: ubuntu-latest
arch: aarch64
python: "39"
- os: ubuntu-latest
arch: aarch64
python: "310"
- os: ubuntu-latest
arch: aarch64
python: "311"
- os: ubuntu-latest
arch: aarch64
python: "312"
steps:
- uses: actions/checkout@v4
with:
submodules: true
# Linux emulation for aarch64 support
# https://cibuildwheel.pypa.io/en/stable/faq/#emulation
- uses: docker/setup-qemu-action@v3
with:
platforms: all
if: runner.os == 'Linux' && matrix.arch == 'aarch64'
- uses: pypa/cibuildwheel@v2.19.1
env:
CIBW_BUILDING: "true"
CIBW_ARCHS: ${{ matrix.arch }} # simplest for now
CIBW_BUILD: "{c,p}p${{ matrix.python }}-*"
CIBW_SKIP: "{c,p}p3{6,7}-*"
CIBW_TEST_COMMAND: "python -c \"import rtmixer; print(rtmixer.__version__)\""
# No portaudio on these platforms:
CIBW_TEST_SKIP: "*_i686 *-musllinux_* *_aarch64"
# To enable testing we'd have to bump up to the Almalinux 8-based image:
# CIBW_MANYLINUX_AARCH64_IMAGE: "manylinux_2_28"
CIBW_BUILD_VERBOSITY: "3"
CIBW_BEFORE_TEST_LINUX: "bash {project}/tools/cibw_before_test_linux.sh"
- uses: actions/upload-artifact@v4
with:
name: cibw-wheels-${{ matrix.os }}-${{ matrix.arch}}-${{ strategy.job-index }}
path: ./wheelhouse/*.whl
# From https://cibuildwheel.pypa.io/en/stable/deliver-to-pypi/
# and https://github.com/pypa/gh-action-pypi-publish?tab=readme-ov-file#trusted-publishing
make_sdist:
name: Make SDist
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pipx run build --sdist
- uses: actions/upload-artifact@v4
with:
name: cibw-sdist
path: dist/*.tar.gz
pypi-publish:
name: Upload release to PyPI
needs: [build_wheels, make_sdist]
if: github.event_name == 'release' && github.event.action == 'published'
environment:
name: pypi
url: https://pypi.org/p/rtmixer
permissions:
id-token: write
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
pattern: cibw-*
path: dist
merge-multiple: true
- run: ls -al dist/*
- uses: pypa/gh-action-pypi-publish@release/v1