Skip to content

Commit

Permalink
build binary wheels
Browse files Browse the repository at this point in the history
  • Loading branch information
mr-c committed Oct 23, 2024
1 parent 8dee8e9 commit a87a272
Show file tree
Hide file tree
Showing 4 changed files with 246 additions and 0 deletions.
104 changes: 104 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
version: 2.1

parameters:
REF:
type: string
default: ''
description: Optional tag to build

jobs:
arm-wheels:
parameters:
build:
type: string
image:
type: string

machine:
image: ubuntu-2204:current
resource_class: arm.medium # two vCPUs

environment:
CIBW_ARCHS: "aarch64"
CIBW_MANYLINUX_AARCH64_IMAGE: "<< parameters.image >>"
CIBW_MUSLLINUX_AARCH64_IMAGE: "<< parameters.image >>"
CIBW_BUILD: "<< parameters.build >>"

steps:
- checkout
- when:
condition: << pipeline.parameters.REF >>
steps:
- run:
name: Checkout branch/tag << pipeline.parameters.REF >>
command: |
echo "Switching to branch/tag << pipeline.parameters.REF >> if it exists"
git checkout << pipeline.parameters.REF >> || true
git pull origin << pipeline.parameters.REF >> || true
- run:
name: install cibuildwheel and other build reqs
command: |
python3 -m pip install --upgrade pip setuptools setuptools_scm[toml]
python3 -m pip install -rcibw-requirements.txt
- run:
name: pip freeze
command: |
python3 -m pip freeze
- run:
name: list wheels
command: |
python3 -m cibuildwheel . --print-build-identifiers
- run:
name: cibuildwheel
command: |
python3 -m cibuildwheel .
- store_test_results:
path: test-results/

- store_artifacts:
path: wheelhouse/

- when:
condition:
or:
- matches:
pattern: ".+"
value: "<< pipeline.git.tag >>"
- << pipeline.parameters.REF >>
steps:
- run:
environment:
TWINE_NONINTERACTIVE: "1"
command: |
python3 -m pip install twine
python3 -m twine upload --verbose --skip-existing wheelhouse/*
workflows:
wheels: # This is the name of the workflow, feel free to change it to better match your workflow.
# Inside the workflow, you define the jobs you want to run.
jobs:
- arm-wheels:
name: arm-wheels-manylinux_2_28
filters:
tags:
only: /.*/
build: "*manylinux*"
image: quay.io/pypa/manylinux_2_28_aarch64
- arm-wheels:
name: arm-wheels-musllinux_1_1
filters:
tags:
only: /.*/
build: "*musllinux*"
image: quay.io/pypa/musllinux_1_1_aarch64
- arm-wheels:
name: arm-wheels-musllinux_1_2
filters:
tags:
only: /.*/
build: "*musllinux*"
image: quay.io/pypa/musllinux_1_2_aarch64
132 changes: 132 additions & 0 deletions .github/workflows/wheels.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
name: Python package build and publish

on:
release:
types: [published]
workflow_dispatch: {}
repository_dispatch: {}
pull_request:
push:
branches:
- main

concurrency:
group: wheels-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
build_wheels:
name: ${{ matrix.image }} wheels
runs-on: ubuntu-24.04
strategy:
matrix:
include:
- image: manylinux_2_28_x86_64
build: "*manylinux*"
- image: musllinux_1_1_x86_64
build: "*musllinux*"
- image: musllinux_1_2_x86_64
build: "*musllinux*"

steps:
- uses: actions/checkout@v4
if: ${{ github.event_name != 'repository_dispatch' }}
with:
fetch-depth: 0 # slow, but gets all the tags
- uses: actions/checkout@v4
if: ${{ github.event_name == 'repository_dispatch' }}
with:
fetch-depth: 0 # slow, but gets all the tags
ref: ${{ github.event.client_payload.ref }}

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

- name: Build wheels
uses: pypa/[email protected]
env:
CIBW_BUILD: ${{ matrix.build }}
CIBW_MANYLINUX_X86_64_IMAGE: quay.io/pypa/${{ matrix.image }}
CIBW_MUSLLINUX_X86_64_IMAGE: quay.io/pypa/${{ matrix.image }}
# configure cibuildwheel to build native 64-bit archs ('auto64'), and some
# emulated ones
# Linux arm64 wheels are built on circleci
CIBW_ARCHS_LINUX: auto64 # ppc64le s390x

- uses: actions/upload-artifact@v4
with:
name: artifact-${{ matrix.image }}
path: ./wheelhouse/*.whl

build_sdist:
name: Build source distribution
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
if: ${{ github.event_name != 'repository_dispatch' }}
with:
fetch-depth: 0 # slow, but gets all the tags
- uses: actions/checkout@v4
if: ${{ github.event_name == 'repository_dispatch' }}
with:
fetch-depth: 0 # slow, but gets all the tags
ref: ${{ github.event.client_payload.ref }}

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

- uses: actions/upload-artifact@v4
with:
name: artifact-source
path: dist/*.tar.gz

build_wheels_macos:
name: Build wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
# macos-13 is an intel runner, macos-14 is apple silicon
os: [macos-13, macos-14]
steps:
- uses: actions/checkout@v4
if: ${{ github.event_name != 'repository_dispatch' }}
with:
fetch-depth: 0 # slow, but gets all the tags
- uses: actions/checkout@v4
if: ${{ github.event_name == 'repository_dispatch' }}
with:
fetch-depth: 0 # slow, but gets all the tags
ref: ${{ github.event.client_payload.ref }}

- name: Build wheels
uses: pypa/[email protected]

- uses: actions/upload-artifact@v4
with:
name: artifact-${{ matrix.os }}-${{ strategy.job-index }}
path: ./wheelhouse/*.whl

upload_pypi:
needs: [build_wheels, build_sdist]
runs-on: ubuntu-24.04
environment: pypi
permissions:
id-token: write
if: (github.event_name == 'release' && github.event.action == 'published') || (github.event_name == 'repository_dispatch' && github.event.client_payload.publish_wheel == true)
steps:
- uses: actions/download-artifact@v4
with:
# unpacks default artifact into dist/
pattern: artifact-*
merge-multiple: true
path: dist

- uses: pypa/gh-action-pypi-publish@release/v1
with:
# To test: repository-url: https://test.pypi.org/legacy/
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
skip-existing: true
1 change: 1 addition & 0 deletions cibw-requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
cibuildwheel==2.21.3
9 changes: 9 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,15 @@ build-backend = "setuptools.build_meta"
[tool.setuptools_scm]
write_to = "cwltool/_version.py"

[tool.cibuildwheel]
test-command = "python -m pytest -n 2 --junitxml={project}/test-results/junit_$(python -V | awk '{print $2}')_${AUDITWHEEL_PLAT}.xml --pyargs cwltool"
test-requires = "-r test-requirements.txt"
test-extras = "deps"
skip = "pp*"
# ^ skip building wheels on PyPy (any version)
build-verbosity = "1"
environment = { CWLTOOL_USE_MYPYC="1", MYPYPATH="$(pwd)/mypy-stubs" }

[tool.black]
line-length = 100
target-version = [ "py39" ]

0 comments on commit a87a272

Please sign in to comment.