Skip to content

Try another thing

Try another thing #18

Workflow file for this run

name: Build

Check failure on line 1 in .github/workflows/build-wheels.yaml

View workflow run for this annotation

GitHub Actions / .github/workflows/build-wheels.yaml

Invalid workflow file

(Line: 80, Col: 13): The identifier 'setup-fortran' may not be used more than once within the same scope.
# Current draft based on
# https://github.com/matplotlib/matplotlib/blob/main/.github/workflows/cibuildwheel.yml
# TODO: only run on published releases
# on:
# release:
# types: [published]
on: [push]
jobs:
build-wheels:
name: Build wheels on ${{ matrix.os }} for ${{ matrix.cibw_archs }}
runs-on: ${{ matrix.os }}
env:
# 3.9, 3.10 seem to not be happy on windows arm64
# because you can't install numpy from a wheel for the build environment
# (and we're not going to try recompiling from source)
CIBW_SKIP: "cp39-win_arm64 cp310-win_arm64"
# TODO: consider turning this on
# CIBW_ENABLE: cpython-freethreading
CIBW_BEFORE_BUILD_WINDOWS: >-
pip install delvewheel
CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: >-
delvewheel repair -w {dest_dir} {wheel}
# TODO: switch to building based on locked src
# and use tests-min-locked here
CIBW_BEFORE_TEST: >-
pip install -r {project}/requirements-only-tests-min-locked.txt
CIBW_TEST_COMMAND: >-
pytest {project}/tests
MACOSX_DEPLOYMENT_TARGET: "10.12"
# # On Windows, we explicitly request MSVC compilers (as GitHub Action runners have
# # MinGW on PATH that would be picked otherwise), switch to a static build for
# # runtimes, but use dynamic linking for `VCRUNTIME140.dll`, `VCRUNTIME140_1.dll`,
# # and the UCRT. This avoids requiring specific versions of `MSVCP140.dll`, while
# # keeping shared state with the rest of the Python process/extensions.
# CIBW_CONFIG_SETTINGS_WINDOWS: >-
# setup-args="--vsenv"
# setup-args="-Db_vscrt=mt"
# setup-args="-Dcpp_link_args=['ucrt.lib','vcruntime.lib','/nodefaultlib:libucrt.lib','/nodefaultlib:libvcruntime.lib']"
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
cibw_archs: "x86_64"
- os: ubuntu-24.04-arm
cibw_archs: "aarch64"
- os: windows-latest
cibw_archs: "AMD64"
- os: windows-11-arm
cibw_archs: "ARM64"
- os: macos-13
cibw_archs: "x86_64"
- os: macos-14
cibw_archs: "arm64"
steps:
- uses: actions/checkout@v5
- name: Install Fortran compiler - MacOS
# When building on Mac, we need to 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: Specify MSVC toolchain - windows-arm
# When building on windows ARM, we need to use the MSVC toolchain
run: |
echo 'CIBW_CONFIG_SETTINGS_WINDOWS=setup-args="--vsenv" setup-args="-Db_vscrt=mt"' >> $GITHUB_ENV
# TODO: figure out escaping and add back in (?)
# setup-args="-Dcpp_link_args=['ucrt.lib','vcruntime.lib','/nodefaultlib:libucrt.lib','/nodefaultlib:libvcruntime.lib']"
- name: Install Fortran compiler - windows-arm
# When building on windows ARM, we need to use the MSVC toolchain
if: ${{ matrix.os == 'windows-11-arm' }}
uses: fortran-lang/setup-fortran@v1
id: setup-fortran
with:
# TODO: figure out whether we need/want to use other compilers too
compiler: "intel"
version: "2025.0"
- name: Build wheels
uses: pypa/[email protected] # matplotlib had v3.1.3
with:
package-dir: .
output-dir: wheelhouse
config-file: "{package}/pyproject.toml"
env:
CIBW_ARCHS: ${{ matrix.cibw_archs }}
# # - 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: 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"
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: cibw-wheels-${{ matrix.os }}-${{ matrix.cibw_archs }}
path: ./wheelhouse/*.whl
if-no-files-found: error
# 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:
# TODO: turn back on
# needs: [ build-wheels, make-sdist ]
needs: [build-wheels]
# 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