Skip to content

build-wheels

build-wheels #42

Workflow file for this run

# Build wheels using cibuildwheel (https://cibuildwheel.pypa.io/)
name: build-wheels
on:
# Run when a release has been created
release:
types: [created]
# NOTE(vytas): Also allow to release to Test PyPi manually.
workflow_dispatch:
jobs:
build-sdist:
# NOTE(vytas): We actually build sdist and pure-Python wheel.
name: sdist
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Build sdist and pure-Python wheel
env:
FALCON_DISABLE_CYTHON: "Y"
run: |
pip install --upgrade pip
pip install --upgrade build
python -m build
- name: Check built artifacts
run: |
tools/check_dist.py ${{ github.event_name == 'release' && format('-r {0}', github.ref) || '' }}
- name: Test sdist
run: |
tools/test_dist.py dist/*.tar.gz
- name: Test pure-Python wheel
run: |
tools/test_dist.py dist/*.whl
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: cibw-sdist
path: dist/falcon-*
publish-sdist:
name: publish-sdist
needs:
- build-sdist
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Download artifacts
uses: actions/download-artifact@v4
with:
pattern: cibw-sdist
path: dist
merge-multiple: true
- name: Check collected artifacts
run: |
tools/check_dist.py ${{ github.event_name == 'release' && format('-r {0}', github.ref) || '' }}
- name: Upload sdist to release
uses: AButler/[email protected]
if: github.event_name == 'release'
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
files: 'dist/*.tar.gz'
- name: Publish sdist and pure-Python wheel to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
if: github.event_name == 'workflow_dispatch'
with:
password: ${{ secrets.TEST_PYPI_TOKEN }}
repository-url: https://test.pypi.org/legacy/
- name: Publish sdist and pure-Python wheel to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
if: github.event_name == 'release'
with:
password: ${{ secrets.PYPI_TOKEN }}
build-wheels:
name: ${{ matrix.python }}-${{ matrix.platform.name }}
needs: build-sdist
runs-on: ${{ matrix.platform.os }}
strategy:
fail-fast: false
matrix:
platform:
- name: manylinux_x86_64
os: ubuntu-latest
- name: musllinux_x86_64
os: ubuntu-latest
- name: manylinux_aarch64
os: ubuntu-latest
emulation: true
- name: musllinux_aarch64
os: ubuntu-latest
emulation: true
- name: manylinux_s390x
os: ubuntu-latest
emulation: true
- name: macosx_x86_64
os: macos-13
- name: macosx_arm64
os: macos-14
- name: win_amd64
os: windows-latest
python:
- cp39
- cp310
- cp311
- cp312
- cp313
include:
- platform:
name: manylinux_x86_64
os: ubuntu-latest
python: cp38
- platform:
name: musllinux_x86_64
os: ubuntu-latest
python: cp38
defaults:
run:
shell: bash
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
if: ${{ matrix.platform.emulation }}
with:
platforms: all
- name: Build wheels
uses: pypa/[email protected]
env:
CIBW_ARCHS_LINUX: all
CIBW_BUILD: ${{ matrix.python }}-${{ matrix.platform.name }}
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: cibw-wheel-${{ matrix.python }}-${{ matrix.platform.name }}
path: wheelhouse/falcon-*.whl
publish-wheels:
name: publish-wheels
needs:
- build-wheels
- publish-sdist
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Download artifacts
uses: actions/download-artifact@v4
with:
pattern: cibw-wheel-*
path: dist
merge-multiple: true
- name: Check collected artifacts
run: |
tools/check_dist.py ${{ github.event_name == 'release' && format('-r {0}', github.ref) || '' }}
- name: Publish binary wheels to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
if: github.event_name == 'workflow_dispatch'
with:
password: ${{ secrets.TEST_PYPI_TOKEN }}
repository-url: https://test.pypi.org/legacy/
- name: Publish binary wheels to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
if: github.event_name == 'release'
with:
password: ${{ secrets.PYPI_TOKEN }}