1010
1111jobs :
1212 build_wheels :
13- name : ${{ matrix.os }}, ${{matrix.python_impl }} ${{ matrix.python }}
13+ name : ${{ matrix.os }}, ${{matrix.python_impl }} ${{ matrix.python }}${{ matrix.variant == 'musllinux' && ', musllinux' || '' }}
1414 runs-on : ${{ matrix.os }}
1515 defaults :
1616 run :
1717 shell : bash
1818 strategy :
1919 fail-fast : false
2020 matrix :
21- os : [ubuntu-latest, windows-latest, macos-latest, macos-15-intel, windows-11-arm]
21+ # Every job builds a single wheel. Linux x86_64 has two wheels for each
22+ # Python (manylinux and musllinux), so it has two jobs; the musllinux
23+ # job is the one with variant musllinux. Linux aarch64 is built natively
24+ # on an ARM runner. See CIBW_SKIP and CIBW_ARCHS_LINUX below.
25+ os : [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-latest, macos-15-intel, windows-11-arm]
2226 python : [cp310, cp311, cp312, cp313, cp314, cp314t, cp315, cp315t]
2327 python_impl : [Python]
28+ variant : [default, musllinux]
2429 include :
2530 - python : cp313
2631 os : ubuntu-latest
@@ -32,15 +37,30 @@ jobs:
3237 python : cp311
3338 - os : windows-11-arm
3439 python : cp312
40+ # No musllinux wheels for aarch64 and no separate musllinux job
41+ # outside of Linux x86_64
42+ - os : ubuntu-24.04-arm
43+ variant : musllinux
44+ - os : windows-latest
45+ variant : musllinux
46+ - os : macos-latest
47+ variant : musllinux
48+ - os : macos-15-intel
49+ variant : musllinux
50+ - os : windows-11-arm
51+ variant : musllinux
3552 env :
3653 BUILD_COMMIT : " main" # or a specific version, e.g., v0.13.1
3754 CIBW_BUILD : ${{ matrix.python }}-*
3855 CIBW_ENABLE : cpython-prerelease
39- CIBW_ARCHS_LINUX : " x86_64 aarch64"
56+ # Build only for the architecture of the runner, so each job builds a
57+ # single wheel and nothing runs under emulation
58+ CIBW_ARCHS_LINUX : native
4059 CIBW_ARCHS_MACOS : native
41- # No support for musl or Win32 for 3.10+
42- # Skip musl for 3.8 and 3.9 since no upstream wheels
43- CIBW_SKIP : " *-win32 *musllinux_aarch64*"
60+ # No support for Win32 for 3.10+
61+ # The musllinux variant builds only musllinux wheels, all other jobs
62+ # build no musllinux wheel (so there is no musllinux aarch64 wheel)
63+ CIBW_SKIP : " *-win32 ${{ matrix.variant == 'musllinux' && '*manylinux*' || '*musllinux*' }}"
4464 CIBW_TEST_REQUIRES : pytest pytest-xdist pytest-randomly threadpoolctl pytest-run-parallel pandas<3.1
4565 CIBW_TEST_COMMAND : python -c "import numpy; numpy.show_runtime(); import statsmodels; statsmodels.test(['-m','(not slow and not example)','-n','2','--randomly-dont-reset-seed'], exit=True)"
4666 # Avoid testing on emulated architectures and Pyodide
5979 submodules : recursive
6080 fetch-depth : 0
6181
62- - name : Set up QEMU
63- if : runner.os == 'Linux'
64- uses : docker/setup-qemu-action@v4
65- with :
66- platforms : all
67-
6882 - name : Build wheels (Default)
6983 uses : pypa/cibuildwheel@v4.3
7084 if : (matrix.python_impl != 'Pyodide')
0 commit comments