feat: build wheels #23
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
# this is based on the wheel workflow in GalSim, but adapted to our needs | |
name: build wheels and sdist | |
on: | |
workflow_dispatch: | |
inputs: | |
ref: | |
description: 'The git ref to build wheels for. This will trigger a pypi upload.' | |
default: '' | |
required: false | |
type: string | |
cibw_skip: | |
description: 'Python versions to skip when building wheels.' | |
default: 'cp36* cp37* pp* cp38*' | |
required: false | |
type: string | |
pull_request: null | |
release: | |
types: | |
- published | |
concurrency: | |
group: pypi | |
cancel-in-progress: false | |
env: | |
PYVER: '3.11' | |
CIBW_SKIP_VAL: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.cibw_skip || 'cp36* cp37* pp* cp38*' }} | |
jobs: | |
linux-manylinux: | |
name: linux-manylinux | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.ref || '' }} | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '${{ env.PYVER }}' | |
- name: build wheels | |
uses: pypa/cibuildwheel@v2.21.1 | |
env: | |
CIBW_BUILD: "*manylinux*" | |
CIBW_ARCHS: auto64 | |
CIBW_SKIP: ${{ env.CIBW_SKIP_VAL }} | |
# I think yum might always work here. But leave all options available. | |
CIBW_BEFORE_ALL: yum install -y bzip2-devel || apt-get install libbz2-dev || apk add --upgrade bzip2-dev | |
- name: test wheel for python ${{ env.PYVER }} | |
run: | | |
pystr='${{ env.PYVER }}' | |
pystr=${pystr//./} | |
python -m pip install pip | |
pip install numpy pytest | |
pip install ./wheelhouse/*cp${pystr}*.whl | |
pytest --pyargs fitsio | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: whl-linux | |
path: ./wheelhouse/*.whl | |
linux-musl: | |
name: linux-musl | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '${{ env.PYVER }}' | |
- name: build wheels | |
uses: pypa/cibuildwheel@v2.21.1 | |
env: | |
CIBW_BUILD: "*musllinux*" | |
CIBW_ARCHS: auto64 | |
CIBW_SKIP: ${{ env.CIBW_SKIP_VAL }} | |
# I think musl always uses apk, but keep all options available. | |
CIBW_BEFORE_ALL: yum install -y bzip2-devel || apt-get install libbz2-dev || apk add --upgrade bzip2-dev | |
- uses: jirutka/setup-alpine@v1 | |
with: | |
packages: "bzip2-dev python3 py3-pip py3-numpy" | |
- name: test wheel for python | |
shell: alpine.sh {0} | |
run: | | |
set -ex | |
python --version | |
pystr=$(python --version | cut -d' ' -f 2 | cut -d'.' -f 1)$(python --version | cut -d' ' -f 2 | cut -d'.' -f 2) | |
python -m pip install pip | |
pip install numpy pytest | |
pip install ./wheelhouse/*cp${pystr}*musl*.whl | |
pytest --pyargs fitsio | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: whl-musl | |
path: ./wheelhouse/*.whl | |
osx-intel: | |
name: osx-intel | |
runs-on: macos-13 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '${{ env.PYVER }}' | |
- name: build wheels | |
uses: pypa/cibuildwheel@v2.21.1 | |
env: | |
CIBW_BUILD: "*macosx*" | |
CIBW_ARCHS: auto64 | |
CIBW_SKIP: ${{ env.CIBW_SKIP_VAL }} | |
# CIBW_BEFORE_ALL: brew install fftw || true | |
CIBW_ENVIRONMENT: >- | |
MACOSX_DEPLOYMENT_TARGET=13.0 | |
- name: test wheel for python ${{ env.PYVER }} | |
run: | | |
pystr='${{ env.PYVER }}' | |
pystr=${pystr//./} | |
python -m pip install pip | |
pip install numpy pytest | |
pip install ./wheelhouse/*cp${pystr}*.whl | |
pytest --pyargs fitsio | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: whl-macos | |
path: ./wheelhouse/*.whl | |
osx-arm: | |
name: osx-arm | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '${{ env.PYVER }}' | |
- name: build wheels | |
uses: pypa/cibuildwheel@v2.21.1 | |
env: | |
CIBW_BUILD: "*macosx*" | |
CIBW_ARCHS: arm64 | |
CIBW_SKIP: ${{ env.CIBW_SKIP_VAL }} | |
# CIBW_BEFORE_ALL: brew install llvm libomp fftw eigen | |
CIBW_ENVIRONMENT: >- | |
MACOSX_DEPLOYMENT_TARGET=14.7 | |
- name: test wheel for python ${{ env.PYVER }} | |
run: | | |
pystr='${{ env.PYVER }}' | |
pystr=${pystr//./} | |
python -m pip install pip | |
pip install numpy pytest | |
pip install ./wheelhouse/*cp${pystr}*.whl | |
pytest --pyargs fitsio | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: whl-arm | |
path: ./wheelhouse/*.whl | |
sdist: | |
name: sdist | |
needs: [linux-manylinux, linux-musl, osx-intel, osx-arm] | |
# Just need to build sdist on a single machine | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
- name: Install dependencies | |
run: | | |
python -m pip install -U pip | |
pip install -U numpy setuptools | |
- name: download wheels | |
uses: actions/download-artifact@v4 | |
with: | |
path: ./wheels | |
pattern: whl-* | |
merge-multiple: true | |
- name: build sdist | |
run: | | |
python setup.py sdist | |
ls -l dist | |
tar tvfz dist/*.tar.gz | |
- name: copy wheels to dist | |
run: | | |
echo ls -l wheels | |
ls -l wheels | |
cp wheels/*.whl dist | |
echo ls -l dist | |
ls -l dist | |
- name: publish to pypi | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
if: github.event_name == 'release' || github.event.action == 'workflow_dispatch' | |
with: | |
verbose: true |