Skip to content

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

Add cibuildwheel workflow based on @mzecc's work

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

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-latest, windows-11-arm, macos-13, macos-14]
os: [ubuntu-latest, ubuntu-24.04-arm, 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.11'
- 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