Skip to content

Add cibuildwheel workflow based on @mzecc's work #19

Add cibuildwheel workflow based on @mzecc's work

Add cibuildwheel workflow based on @mzecc's work #19

Workflow file for this run

name: Build
# TODO: only run on published releases
# on:
# release:
# types: [published]
on: [pull_request]
jobs:
build_wheels:
name: Build wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
# macos-13 is an intel runner, macos-14 is apple silicon
os: [
ubuntu-latest,
ubuntu-24.04-arm,
windows-2022,
# # windows-latest is moving target at the moment
# windows-latest,
# # Seems to be experimental, leave out for now
# # https://cibuildwheel.pypa.io/en/stable/#usage
# windows-11-arm,
# Maybe something crazy required,
# see numpy's fun https://github.com/numpy/numpy/blob/main/.github/windows_arm64_steps/action.yml
macos-13,
macos-14,
]
steps:
- uses: actions/checkout@v5
- name: Setup Python
if: ${{ startsWith(matrix.os, 'windows') }}
uses: actions/setup-python@v5
with:
python-version: '3.x'
# Maybe not necessary, source:
# https://dvdhrm.github.io/2021/04/21/meson-msvc-github-actions/
# and
# https://github.com/numpy/numpy/blob/71eebaf8513dfd6ed40b0c689702d81e3f6f2527/.github/workflows/wheels.yml#L123
- name: Setup MSVC developer shell (32-bit)
if: ${{ matrix.os == 'windows-2022' }}
uses: bus1/cabuild/action/msdevshell@v1
with:
architecture: x64
- name: Install Fortran compiler
# When building from source, ensure we have a Fortran compiler
if: ${{ startsWith(matrix.os, 'macos') }}
uses: fortran-lang/setup-fortran@v1
id: setup-fortran
with:
# TODO: figure out whether we need/want to use other compilers too
compiler: "gcc"
version: "13"
- name: Set macOS-13 specific flags
if: matrix.os == 'macos-13'
run: |
echo "MACOSX_DEPLOYMENT_TARGET=13.0" >> "$GITHUB_ENV"
- name: Set macOS-14 specific flags
if: matrix.os == 'macos-14'
run: |
echo "MACOSX_DEPLOYMENT_TARGET=14.0" >> "$GITHUB_ENV"
- name: Build wheels
uses: pypa/[email protected]
# env:
# CIBW_SOME_OPTION: value
# ...
with:
package-dir: .
output-dir: wheelhouse
config-file: "{package}/pyproject.toml"
- uses: actions/upload-artifact@v4
with:
name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }}
path: wheelhouse/*.whl
make_sdist:
name: Make source distribution
runs-on: "ubuntu-latest"
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: ./.github/actions/setup
with:
python-version: ${{ matrix.python-version }}
uv-dependency-install-flags: "--all-extras --group dev"
- name: Create source distribution
run: uv build --sdist
- name: Upload the source distribution artefact
uses: actions/upload-artifact@v4
with:
name: cibw-sdist
path: dist/*.tar.gz
deploy-pypi:
needs: [build_wheels, make_sdist]
# Having an environment for deployment is strongly recommend by PyPI
# https://docs.pypi.org/trusted-publishers/adding-a-publisher/#github-actions
# You can comment this line out if you don't want it.
# # TODO: turn back on when we only run this on main
# environment: deploy
# permissions:
# # this permission is mandatory for trusted publishing with PyPI
# id-token: write
runs-on: ubuntu-latest
steps:
- name: Download artefacts
uses: actions/download-artifact@v5
with:
pattern: cibw-*
path: dist
merge-multiple: true
- name: Publish to PyPI
run: |
ls dist
# uv publish