Skip to content

Commit

Permalink
Add new workflow for building Python wheels
Browse files Browse the repository at this point in the history
  • Loading branch information
mwydmuch committed Jan 7, 2024
1 parent f6a93c5 commit 13c9e32
Show file tree
Hide file tree
Showing 4 changed files with 117 additions and 3 deletions.
92 changes: 92 additions & 0 deletions .github/workflows/build-wheels.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
name: Build Python wheels and make PyPI release

on:
workflow_dispatch:
push:
paths:
- '.github/workflows/build-wheels.yml'
- 'python/**'
- 'src/**'
- 'CMakeLists.txt'
- 'setup.py'
- 'pyproject.toml'
branches: [master]
release:
types: [published]

jobs:
build_wheels:
name: Build wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-22.04, macos-11, windows-2019]

steps:
- uses: actions/checkout@v3
with:
submodules: recursive

- name: Set up QEMU
if: runner.os == 'Linux'
uses: docker/setup-qemu-action@v2
with:
platforms: all

- name: Build wheels
uses: pypa/cibuildwheel@v2.15.0
env:
# Configure cibuildwheel to build native archs, and some emulated ones
CIBW_ARCHS_LINUX: x86_64 aarch64
CIBW_ARCHS_MACOS: x86_64
CIBW_ARCHS_WINDOWS: x86_64
CIBW_BUILD_VERBOSITY: 3
CIBW_REPAIR_WHEEL_COMMAND_LINUX: >
auditwheel show {wheel} && auditwheel repair -w {dest_dir} {wheel}
- name: Report built wheels
run: |
ls -l ./wheelhouse/*.whl
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
path: ./wheelhouse/*.whl

build_sdist:
name: Build source distribution
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: recursive

- name: Build sdist
run: pipx run build --sdist

- name: Upload sdist
uses: actions/upload-artifact@v3
with:
path: dist/*.tar.gz

upload_pypi:
name: Upload to PyPI
needs: [build_wheels, build_sdist]
runs-on: ubuntu-latest
environment: pypi
permissions:
id-token: write
if: github.event_name == 'release' && github.event.action == 'published'
steps:
- name: Download all dists
uses: actions/download-artifact@v3
with:
# Unpacks default artifact into dist/
# If `name: artifact` is omitted, the action will create extra parent dir
name: artifact
path: dist

- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.PYPI_API_TOKEN }}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: C++ build
on:
push:
paths:
- '.github/workflows/cpp-build.yml'
- '.github/workflows/cpp-test-build.yml'
- 'src/**'
- 'CMakeLists.txt'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: Python build
on:
push:
paths:
- '.github/workflows/python-build.yml'
- '.github/workflows/python-test-build.yml'
- 'python/**'
- 'src/**'
- 'CMakeLists.txt'
Expand Down
24 changes: 23 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,2 +1,24 @@
[build-system]
requires = ["cmake>=3.13.0", "cmaketools", "setuptools", "wheel"]
requires = ["cmake>=3.13.0", "cmaketools", "setuptools", "wheel"]

[tool.cibuildwheel]
# We need to build for the following Python versions:
build = "cp{38,39,310,311,312}-*"

[tool.cibuildwheel.linux]
# Only manylinux is supported (no musl)
build = "cp{38,39,310,311,312}-manylinux*"

# For manylinux2014 we need to install the following dependencies using yum:
before-all = "yum install -y cmake"

# Only build for x86_64 and aarch64 are officially supported
archs = "x86_64 aarch64"
manylinux-x86_64-image = "manylinux2014"
manylinux-aarch64-image = "manylinux2014"

[tool.cibuildwheel.macos]
before-all = "brew install cmake"

[tool.cibuildwheel.windows]
before-all = "choco install -y cmake"

0 comments on commit 13c9e32

Please sign in to comment.