Wheels #204
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: Wheels | |
on: | |
push: | |
branches: | |
- main | |
tags: | |
- "v*.*.*" | |
workflow_dispatch: | |
inputs: | |
debug_enabled: | |
description: "Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)" | |
required: false | |
default: false | |
schedule: | |
# run weekly on a Monday | |
- cron: "0 0 * * 1" | |
jobs: | |
build_wheels: | |
name: Build wheels for ${{ matrix.python-version }}-${{ matrix.buildplat[1] }} | |
runs-on: ${{ matrix.buildplat[0] }} | |
strategy: | |
matrix: | |
buildplat: | |
- [ubuntu-22.04, manylinux_x86_64] | |
- [ubuntu-22.04, musllinux_x86_64] | |
- [ubuntu-22.04, manylinux_aarch64] | |
- [ubuntu-22.04, musllinux_aarch64] | |
- [macos-12, macosx_x86_64] | |
- [macos-14, macosx_arm64] | |
python-version: [pp310, cp37, cp38, cp39, cp310, cp311, cp312] | |
exclude: | |
# pp310, cp37, cp38 on musllinux is not support | |
# cp39, cp310 on musllinux_aarch64, wheel building may hangup, ignore it | |
- buildplat: [ubuntu-22.04, musllinux_x86_64] | |
python-version: cp37 | |
- buildplat: [ubuntu-22.04, musllinux_x86_64] | |
python-version: cp38 | |
- buildplat: [ubuntu-22.04, musllinux_x86_64] | |
python-version: pp310 | |
- buildplat: [ubuntu-22.04, musllinux_aarch64] | |
python-version: cp37 | |
- buildplat: [ubuntu-22.04, musllinux_aarch64] | |
python-version: cp38 | |
- buildplat: [ubuntu-22.04, musllinux_aarch64] | |
python-version: cp39 | |
- buildplat: [ubuntu-22.04, musllinux_aarch64] | |
python-version: cp310 | |
- buildplat: [ubuntu-22.04, musllinux_aarch64] | |
python-version: pp310 | |
# cp37 on macos arm64 is not supported | |
- buildplat: [macos-14, macosx_arm64] | |
python-version: cp37 | |
# cp38 pp310 on macos arm64 have some problem | |
- buildplat: [macos-14, macosx_arm64] | |
python-version: cp38 | |
- buildplat: [macos-14, macosx_arm64] | |
python-version: pp310 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Set up QEMU | |
if: runner.os == 'Linux' | |
uses: docker/setup-qemu-action@v3 | |
- name: Build wheels | |
uses: pypa/cibuildwheel@v2.18.1 | |
with: | |
package-dir: . | |
output-dir: wheelhouse | |
config-file: "{package}/pyproject.toml" | |
env: | |
# select | |
CIBW_BUILD: ${{ matrix.python-version }}-${{ matrix.buildplat[1] }} | |
# linux | |
CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 | |
# manylinux2014 can't build on aarch64 | |
CIBW_MANYLINUX_AARCH64_IMAGE: manylinux_2_28 | |
CIBW_MUSLLINUX_X86_64_IMAGE: musllinux_1_2 | |
CIBW_MUSLLINUX_AARCH64_IMAGE: musllinux_1_2 | |
CIBW_ARCHS_LINUX: auto64 aarch64 | |
CIBW_BEFORE_BUILD_LINUX: "{project}/ci/linux-deps" | |
CIBW_REPAIR_WHEEL_COMMAND_LINUX: 'LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib64" && auditwheel repair -w {dest_dir} {wheel}' | |
# macos | |
CIBW_ARCHS_MACOS: auto64 | |
CIBW_BEFORE_BUILD_MACOS: "{project}/ci/osx-deps" | |
CIBW_REPAIR_WHEEL_COMMAND_MACOS: "delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v {wheel}" | |
# build | |
CIBW_ENVIRONMENT: >- | |
CYVCF2_HTSLIB_CONFIGURE_OPTIONS="--enable-libcurl --enable-s3 --enable-lzma --enable-bz2 --with-libdeflate" | |
CYTHONIZE=1 | |
CIBW_TEST_COMMAND: "{project}/ci/test" | |
# Enable tmate debugging of manually-triggered workflows if the input option was provided | |
- name: Setup tmate session | |
if: ${{ always() && github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }} | |
uses: mxschmitt/action-tmate@v3 | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: artifact-${{ matrix.python-version }}-${{ matrix.buildplat[1] }} | |
path: ./wheelhouse/*.whl | |
build_sdist: | |
name: Build source distribution | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: "3.12" | |
- name: Install dependencies | |
run: | | |
pip install -r requirements.txt | |
- name: Build sdist | |
run: CYTHONIZE=1 python setup.py sdist | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: artifact-sdist | |
path: dist/*.tar.gz | |
upload_pypi: | |
needs: [build_wheels, build_sdist] | |
runs-on: ubuntu-22.04 | |
# upload to PyPI on every tag starting with 'v' | |
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/v') | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
pattern: artifact-* | |
merge-multiple: true | |
path: dist | |
- uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
user: __token__ | |
password: ${{ secrets.PYPI_API_TOKEN }} |