ci workflows support new split htslib. support new wheel. suport wind… #137
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 build arm64 on x86_64 with cross-compiler | |
- [macos-12, macosx_x86_64] | |
python-version: [pp310, cp37, cp38, cp39, cp310, cp311, cp312] | |
exclude: | |
# pp310, cp37, cp38 on musllinux is not support | |
- 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: 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.16.2 | |
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 arm64 | |
CIBW_BEFORE_BUILD_MACOS: "{project}/ci/osx-deps" | |
# 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@v3 | |
with: | |
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@v3 | |
with: | |
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@v3 | |
with: | |
name: artifact | |
path: dist | |
- uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
user: __token__ | |
password: ${{ secrets.PYPI_API_TOKEN }} |