setup.py: Fix up #12
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Distributions | |
on: | |
push: | |
pull_request: | |
workflow_dispatch: | |
concurrency: | |
# Cancel previous runs of this workflow for the same branch | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
sdists_for_pypi: | |
name: Build sdist (and upload to PyPI on release tags) | |
runs-on: ubuntu-latest | |
env: | |
CAN_DEPLOY: ${{ secrets.SAGEMATH_PYPI_API_TOKEN != '' }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v4 | |
- name: make sdist | |
run: | | |
python3 -m pip install build | |
python3 -m build --sdist | |
- uses: actions/upload-artifact@v4 | |
with: | |
path: "dist/*.tar.gz" | |
name: dist | |
- uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
user: __token__ | |
password: ${{ secrets.SAGEMATH_PYPI_API_TOKEN }} | |
skip_existing: true | |
verbose: true | |
if: env.CAN_DEPLOY == 'true' && github.event_name == 'push' && startsWith(github.ref, 'refs/tags') | |
build_wheels: | |
name: Build wheels on ${{ matrix.os }}, arch ${{ matrix.arch }} | |
runs-on: ${{ matrix.os }} | |
needs: sdists_for_pypi | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest] | |
arch: [x86_64, i686, aarch64] | |
build: [manylinux, musllinux] | |
include: | |
- os: macos-13 | |
arch: x86_64 | |
build: macosx | |
- os: macos-14 | |
arch: arm64 | |
build: macosx | |
env: | |
# SPKGs to install as system packages | |
SPKGS: _bootstrap _prereq | |
# Non-Python packages to install as spkgs | |
TARGETS_PRE: zlib-ensure bzip2-ensure pkgconf-ensure openblas-ensure coinbrew-no-deps cbc-no-deps | |
# | |
CIBW_BUILD: "*${{ matrix.build }}*" | |
# Disable building PyPy wheels on all platforms | |
CIBW_SKIP: "pp*" | |
# | |
CIBW_ARCHS: ${{ matrix.arch }} | |
# https://cibuildwheel.readthedocs.io/en/stable/options/#requires-python | |
CIBW_PROJECT_REQUIRES_PYTHON: ">=3.9" | |
# Environment during wheel build | |
CIBW_ENVIRONMENT: "PATH=$(pwd)/local/bin:$PATH CPATH=$(pwd)/local/include:$CPATH LIBRARY_PATH=$(pwd)/local/lib:$LIBRARY_PATH LD_LIBRARY_PATH=$(pwd)/local/lib:$LD_LIBRARY_PATH PKG_CONFIG_PATH=$(pwd)/local/share/pkgconfig:$PKG_CONFIG_PATH ACLOCAL_PATH=/usr/share/aclocal PYTHONPATH=$(pwd)/src" | |
# Use 'build', not 'pip wheel' | |
CIBW_BUILD_FRONTEND: build | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
repository: mkoeppe/sage | |
ref: cbc-2.10.11 | |
- name: Set up QEMU | |
if: runner.os == 'Linux' && matrix.arch != 'x86_64' && matrix.arch != 'i686' | |
uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: all | |
- uses: actions/download-artifact@v4 | |
with: | |
name: dist | |
path: dist | |
- uses: actions/setup-python@v5 | |
# As of 2024-02-03, the macOS M1 runners do not have preinstalled python or pipx. | |
# Installing pipx follows the approach of https://github.com/pypa/cibuildwheel/pull/1743 | |
id: python | |
with: | |
python-version: "3.8 - 3.12" | |
update-environment: false | |
- name: Build platform wheels | |
# We build the wheel from the sdist. | |
# But we must run cibuildwheel with the unpacked source directory, not a tarball, | |
# so that SAGE_ROOT is copied into the build containers. | |
# | |
# In the CIBW_BEFORE_ALL phase, we install libraries using the Sage distribution. | |
# https://cibuildwheel.readthedocs.io/en/stable/options/#before-all | |
run: | | |
"${{ steps.python.outputs.python-path }}" -m pip install pipx | |
export PATH=build/bin:$PATH | |
export CIBW_BEFORE_ALL="( $(sage-print-system-package-command debian --yes --no-install-recommends install wget $(sage-get-system-packages debian $SPKGS)) || $(sage-print-system-package-command fedora --yes --no-install-recommends install wget $(sage-get-system-packages fedora $SPKGS | sed s/pkg-config/pkgconfig/)) || ( $(sage-print-system-package-command homebrew --yes --no-install-recommends install wget $(sage-get-system-packages homebrew $SPKGS)) || $(sage-print-system-package-command alpine --yes --no-install-recommends install wget $(sage-get-system-packages alpine $SPKGS)) || echo error ignored) ) && ./bootstrap && ./configure --enable-build-as-root --enable-fat-binary && MAKE=\"make -j6\" make V=0 $TARGETS_PRE" | |
mkdir -p unpacked | |
for pkg in sage*numerical*backends*coin; do | |
(cd unpacked && tar xfz - ) < dist/$pkg*.tar.gz | |
"${{ steps.python.outputs.python-path }}" -m pipx run cibuildwheel==2.18.0 unpacked/$pkg* | |
done | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.os }}-${{ matrix.build }}-${{ matrix.arch }}-wheels | |
path: ./wheelhouse/*.whl | |
pypi-publish: | |
# This needs to be a separate job because pypa/gh-action-pypi-publish cannot run on macOS | |
# https://github.com/pypa/gh-action-pypi-publish | |
name: Upload wheels to PyPI | |
needs: build_wheels | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') | |
runs-on: ubuntu-latest | |
env: | |
CAN_DEPLOY: ${{ secrets.SAGEMATH_PYPI_API_TOKEN != '' }} | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
pattern: "*-*-wheels" | |
path: wheelhouse | |
merge-multiple: true | |
- name: Publish package distributions to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
user: __token__ | |
password: ${{ secrets.SAGEMATH_PYPI_API_TOKEN }} | |
packages_dir: wheelhouse/ | |
skip_existing: true | |
verbose: true | |
if: env.CAN_DEPLOY == 'true' |