Skip to content

Commit 9f2f314

Browse files
authored
Update the building wheels procedure to use cibuildwheels tool (#425)
1 parent 68e48e1 commit 9f2f314

File tree

2 files changed

+168
-264
lines changed

2 files changed

+168
-264
lines changed

.github/workflows/buildwheels.yml

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
name: build_wheels+tests
2+
3+
defaults:
4+
run:
5+
shell: bash
6+
7+
on:
8+
pull_request:
9+
branches: [ main ]
10+
11+
jobs:
12+
debug_build_ok:
13+
runs-on: ubuntu-latest
14+
steps:
15+
- uses: actions/checkout@v4
16+
with:
17+
submodules: recursive
18+
fetch-depth: 0 # https://github.com/pypa/setuptools_scm/issues/480
19+
- run: DEBUG=1 VERBOSE=1 pip install --verbose -e .[tests]
20+
- run: pytest -v -s -We -p no:unraisableexception tests
21+
22+
zenodo_json:
23+
runs-on: ubuntu-latest
24+
steps:
25+
- uses: actions/checkout@v4
26+
- uses: notiz-dev/github-action-json-property@release
27+
with:
28+
path: '.zenodo.json'
29+
prop_path: 'creators'
30+
31+
build_wheels:
32+
needs: [debug_build_ok, zenodo_json]
33+
name: Build wheels on ${{ matrix.os }}
34+
runs-on: ${{ matrix.os }}
35+
strategy:
36+
matrix:
37+
os: [ubuntu-latest, ubuntu-24.04-arm, macos-13, macos-latest, windows-latest]
38+
39+
steps:
40+
- uses: actions/checkout@v4
41+
with:
42+
submodules: recursive
43+
fetch-depth: 0
44+
45+
# download C and Fortran compiler on windows
46+
- if: matrix.os == 'windows-latest'
47+
uses: msys2/setup-msys2@v2
48+
with:
49+
msystem: MINGW64
50+
update: false
51+
install: >-
52+
mingw-w64-x86_64-gcc-fortran
53+
mingw-w64-x86_64-ninja
54+
m4
55+
56+
- uses: actions/setup-python@v5
57+
58+
- name: Install cibuildwheel
59+
run: python -m pip install cibuildwheel==2.23.2
60+
61+
- name: Build and test wheels
62+
env:
63+
# skip 32-bit, PyPy, and musllinux builds
64+
CIBW_SKIP: "*-win32 *-manylinux_i686 pp* *musllinux*"
65+
CIBW_BEFORE_BUILD_WINDOWS: pip install delvewheel
66+
CIBW_ENVIRONMENT_WINDOWS: CMAKE_ARGS="-DCMAKE_MAKE_PROGRAM=D:/a/_temp/msys64/mingw64/bin/ninja.exe" CMAKE_PROGRAM_PATH="D:/a/_temp/msys64/usr/bin" CMAKE_GENERATOR="Ninja" TEMP="D:/a/_temp/"
67+
CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: delvewheel repair -w {dest_dir} {wheel}
68+
CIBW_BEFORE_BUILD_MACOS: brew reinstall gcc
69+
CIBW_ENVIRONMENT_MACOS: MACOSX_DEPLOYMENT_TARGET=`sw_vers -productVersion` SYSTEM_VERSION_COMPAT=0
70+
CIBW_TEST_REQUIRES: pytest pytest-order
71+
CIBW_TEST_COMMAND: pytest -v -s -We -p no:unraisableexception {package}/tests
72+
run: python -m cibuildwheel --output-dir dist
73+
74+
- uses: actions/upload-artifact@v4
75+
with:
76+
name: dist-${{matrix.os}}-${{matrix.manylinux}}
77+
path: dist
78+
79+
run_example_notebooks:
80+
needs: [build_wheels]
81+
runs-on: ${{ matrix.os }}
82+
name: Run example notebooks on ${{ matrix.os }}
83+
strategy:
84+
matrix:
85+
os: [ubuntu-latest, ubuntu-24.04-arm, macos-13, macos-latest, windows-latest]
86+
87+
steps:
88+
- uses: actions/checkout@v4
89+
with:
90+
submodules: recursive
91+
fetch-depth: 0
92+
93+
- uses: actions/[email protected]
94+
with:
95+
python-version: "3.13"
96+
97+
- uses: actions/download-artifact@v4
98+
with:
99+
name: dist-${{matrix.os}}-${{matrix.manylinux}}
100+
path: dist
101+
102+
- run: |
103+
temp=`find dist/ -name "*cp313*.whl"`
104+
python -m pip install $temp[examples]
105+
ex -sc 'g/^PyPartMC/d' -cx .binder/requirements.txt
106+
python -m pip install --force-reinstall --no-deps $PIP_INSTALL_OPTS -r .binder/requirements.txt
107+
python -m pip install $PIP_INSTALL_OPTS -r gitmodules/devops_tests/requirements.txt
108+
GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} python -m pytest --durations=10 -v -s -We -p no:unraisableexception gitmodules/devops_tests/test_run_notebooks.py
109+
110+
check_annotated_todos:
111+
runs-on: ubuntu-latest
112+
name: Check if todos are annotated
113+
114+
steps:
115+
- uses: actions/checkout@v4
116+
with:
117+
submodules: recursive
118+
fetch-depth: 0
119+
120+
- run: |
121+
python -m pip install pytest
122+
python -m pip install $PIP_INSTALL_OPTS -r gitmodules/devops_tests/requirements.txt
123+
GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} python -m pytest --durations=10 -v -s -We -p no:unraisableexception gitmodules/devops_tests/test_todos_annotated.py
124+
125+
dist_check:
126+
runs-on: ${{ matrix.os }}
127+
needs: [build_wheels]
128+
strategy:
129+
matrix:
130+
os: [ubuntu-latest, ubuntu-24.04-arm]
131+
steps:
132+
- uses: actions/[email protected]
133+
with:
134+
python-version: "3.11"
135+
- run: pip install twine auditwheel
136+
- uses: actions/download-artifact@v4
137+
with:
138+
name: dist-${{matrix.os}}-${{matrix.manylinux}}
139+
path: dist
140+
- run: twine check --strict dist/*
141+
- run: for i in dist/*-manylinux*.whl; do auditwheel show $i; done;
142+
143+
dist_upload:
144+
runs-on: ubuntu-latest
145+
needs: [build_wheels]
146+
permissions:
147+
id-token: write
148+
steps:
149+
- uses: actions/download-artifact@v4
150+
with:
151+
pattern: dist-*
152+
merge-multiple: true
153+
path: dist
154+
- if: github.event_name == 'push' && github.ref == 'refs/heads/main'
155+
uses: pypa/gh-action-pypi-publish@release/v1.12
156+
with:
157+
repository_url: https://test.pypi.org/legacy/
158+
attestations: false
159+
- run: |
160+
echo "github.event_name:" ${{ github.event_name }}
161+
echo "github.event.action:" ${{ github.event.action }}
162+
echo "github.event.prerelease:" ${{ github.event.prerelease }}
163+
echo "env.GITHUB_REF:" ${{ env.GITHUB_REF }}
164+
echo "env.GITHUB_REF:" ${{ env.GITHUB_REF_NAME }}
165+
- if: github.event_name == 'release' && github.event.prerelease == false
166+
uses: pypa/gh-action-pypi-publish@release/v1.12
167+
with:
168+
attestations: false

0 commit comments

Comments
 (0)