Skip to content

Commit

Permalink
MAINT: Modernize cibuildwheel infrastructure (#54)
Browse files Browse the repository at this point in the history
  • Loading branch information
larsoner authored Jun 24, 2024
1 parent c9fa491 commit 0337da9
Show file tree
Hide file tree
Showing 8 changed files with 112 additions and 94 deletions.
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ version: 2
jobs:
build_docs:
docker:
- image: cimg/python:3.10
- image: cimg/python:3.12.3
steps:
- checkout
- run:
Expand Down
10 changes: 10 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
groups:
actions:
patterns:
- "*"
4 changes: 4 additions & 0 deletions .github/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
changelog:
exclude:
authors:
- dependabot
82 changes: 81 additions & 1 deletion .github/workflows/build_wheels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,91 @@ concurrency:

jobs:
build_wheels:
name: Build wheels on ${{ matrix.os }}
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/[email protected]
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
87 changes: 0 additions & 87 deletions azure-pipelines.yml

This file was deleted.

10 changes: 6 additions & 4 deletions rtmixer_build.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# This is used to create the _rtmixer extension module (see setup.py).

import sys
from cffi import FFI
import pa_ringbuffer

Expand All @@ -15,15 +16,16 @@
""")
ffibuilder.cdef(open('src/rtmixer.h').read())
# '-Wconversion'
extra_compile_args = list()
if sys.platform == "linux":
extra_compile_args.append("--std=c99")
ffibuilder.set_source(
'_rtmixer',
RINGBUFFER_CDEF + open('src/rtmixer.c').read(),
include_dirs=['src', 'portaudio/include'],
sources=['portaudio/src/common/pa_ringbuffer.c'],
extra_compile_args=[
'--std=c99',
# '-Wconversion',
],
extra_compile_args=extra_compile_args,
# TODO: release mode by default, option for using debug mode
undef_macros=[
# 'NDEBUG'
Expand Down
2 changes: 1 addition & 1 deletion src/rtmixer.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
https://python-rtmixer.readthedocs.io/
"""
__version__ = '0.1.4'
__version__ = '0.1.5'

import sounddevice as _sd
from pa_ringbuffer import init as _init_ringbuffer
Expand Down
9 changes: 9 additions & 0 deletions tools/cibw_before_test_linux.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/bash

set -xeo pipefail

if [[ "$(cat /etc/redhat-release)" == 'AlmaLinux'* ]]; then
dnf config-manager --set-enabled powertools
dnf install -y epel-release
fi
yum install -y portaudio

0 comments on commit 0337da9

Please sign in to comment.