-
-
Notifications
You must be signed in to change notification settings - Fork 997
157 lines (133 loc) · 5.38 KB
/
cibuildwheel.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
name: cibuildwheel
# Note: We use a dynamic matrix to build different sets of wheels under
# different conditions. On workflow_dispatch, we build the full suite of
# wheels. This takes hours, so on pull_request, we just build a representative
# sample.
# The full list of cibuildwheel's build targets can be found here:
# https://github.com/pypa/cibuildwheel/blob/v2.20.0/cibuildwheel/resources/build-platforms.toml
# Notes on build targets we (don't) support:
# - pypy: libtorrent doesn't build with pypy as of writing
# - macos_arm64: can be cross-compiled from x86_64, but not run, so can't be
# tested. Build output indicates it isn't building correctly
# - macos_universal2: b2 / setup.py doesn't have a straightforward way to build
# this as of writing
# - abi3: Not supported by boost-python (or pybind11) or cibuildwheel as of
# writing
on:
workflow_dispatch:
inputs:
publish:
description: Write 'PUBLISH' to publish to pypi. BEWARE! ARTIFACTS ARE IMMUTABLE AND CANNOT BE REPLACED ONCE PUBLISHED!
publish_test:
description: Write 'PUBLISH_TEST' to publish to test-pypi. BEWARE! ARTIFACTS ARE IMMUTABLE AND CANNOT BE REPLACED ONCE PUBLISHED!
pull_request:
paths:
- .github/workflows/cibuildwheel.yml
- tools/cibuildwheel/**
- pyproject.toml
concurrency:
group: ${{ github.ref }}-${{ github.workflow }}-${{ github.event_name }}
cancel-in-progress: true
jobs:
configure_matrix:
runs-on: ubuntu-latest
env:
# github actions syntax doesn't allow us to have yaml structures as
# an input to a job. These environment variables are literal json strings
MATRIX_PULL_REQUEST: |
{
"include": [
{"os": "ubuntu-24.04", "CIBW_BUILD": "cp311-manylinux_x86_64"},
{"os": "ubuntu-24.04", "CIBW_BUILD": "cp311-musllinux_x86_64"},
{"os": "macos-12", "CIBW_BUILD": "cp311-macosx_x86_64", "MACOSX_DEPLOYMENT_TARGET": "12"},
{"os": "macos-13", "CIBW_BUILD": "cp311-macosx_x86_64", "MACOSX_DEPLOYMENT_TARGET": "13"},
{"os": "macos-14", "CIBW_BUILD": "cp311-macosx_arm64", "MACOSX_DEPLOYMENT_TARGET": "14"},
{"os": "windows-latest", "CIBW_BUILD": "cp311-win_amd64"}
]
}
MATRIX_WORKFLOW_DISPATCH: |
{
"include": [
{"os": "ubuntu-latest", "CIBW_BUILD": "cp*-manylinux_x86_64"},
{"os": "ubuntu-latest", "CIBW_BUILD": "cp*-manylinux_aarch64"},
{"os": "ubuntu-latest", "CIBW_BUILD": "cp*-musllinux_x86_64"},
{"os": "ubuntu-latest", "CIBW_BUILD": "cp*-musllinux_aarch64"},
{"os": "macos-12", "CIBW_BUILD": "cp*-macosx_x86_64", "MACOSX_DEPLOYMENT_TARGET": "12"},
{"os": "macos-13", "CIBW_BUILD": "cp*-macosx_x86_64", "MACOSX_DEPLOYMENT_TARGET": "13"},
{"os": "macos-14", "CIBW_BUILD": "cp*-macosx_arm64", "MACOSX_DEPLOYMENT_TARGET": "14"},
{"os": "windows-latest", "CIBW_BUILD": "cp*-win32"},
{"os": "windows-latest", "CIBW_BUILD": "cp*-win_amd64"}
]
}
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- id: set-matrix
run: |
if [ $GITHUB_EVENT_NAME == "pull_request" ]; then
echo "matrix=$(echo $MATRIX_PULL_REQUEST | jq -c)" >> "$GITHUB_OUTPUT"
else
echo "matrix=$(echo $MATRIX_WORKFLOW_DISPATCH | jq -c)" >> "$GITHUB_OUTPUT"
fi
build_wheels:
needs: configure_matrix
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.configure_matrix.outputs.matrix) }}
env:
CIBW_BUILD_VERBOSITY: 1
CIBW_BUILD: ${{ matrix.CIBW_BUILD }}
CIBW_MANYLINUX_*_IMAGE: "manylinux_2_28"
CIBW_MUSLLINUX_*_IMAGE: "musllinux_1_2"
MACOSX_DEPLOYMENT_TARGET: ${{ matrix.MACOSX_DEPLOYMENT_TARGET }}
CIBW_SKIP: pp*
CIBW_TEST_SKIP: "*-win32"
steps:
- uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 1
filter: tree:0
- uses: actions/cache@v4
id: cache-wheel
with:
path: wheelhouse
key: wheel-${{ matrix.os }}-${{ matrix.CIBW_BUILD }}-${{ github.sha }}
- uses: docker/setup-qemu-action@v3
if: steps.cache-wheel.outputs.cache-hit != 'true' && runner.os == 'Linux'
- uses: pypa/[email protected]
if: steps.cache-wheel.outputs.cache-hit != 'true'
- uses: actions/upload-artifact@v3
with:
path: wheelhouse/*.whl
name: wheels
upload_pypi:
needs: build_wheels
runs-on: ubuntu-latest
if: needs.build_wheels.result == 'success' && github.event.inputs.publish == 'PUBLISH'
steps:
- uses: actions/download-artifact@v3
with:
name: wheels
path: wheelhouse
- uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.PYPI_API_TOKEN }}
packages-dir: wheelhouse
skip-existing: true
upload_pypi_test:
needs: build_wheels
runs-on: ubuntu-latest
if: needs.build_wheels.result == 'success' && github.event.inputs.publish_test == 'PUBLISH_TEST'
steps:
- uses: actions/download-artifact@v3
with:
name: wheels
path: wheelhouse
- uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.TEST_PYPI_API_TOKEN }}
packages-dir: wheelhouse
skip-existing: true
repository_url: https://test.pypi.org/legacy/