@@ -151,9 +151,59 @@ jobs:
151151 path : ./wheelhouse/*.whl
152152 name : wheel-${{ matrix.only }}
153153
154+ build_limited_api_wheels :
155+ name : Build Stable ABI wheels on ${{ matrix.os }}
156+ if : >-
157+ github.event_name == 'push' ||
158+ github.event_name == 'release' ||
159+ (github.event_name == 'schedule' && github.repository == 'cython/cython') ||
160+ github.event_name == 'workflow_dispatch'
161+ runs-on : ${{ matrix.os }}
162+
163+ strategy :
164+ fail-fast : false
165+ matrix :
166+ os :
167+ - ' ubuntu-latest'
168+ - ' ubuntu-24.04-arm'
169+ - ' windows-latest'
170+ - ' windows-11-arm'
171+ - ' macos-latest'
172+
173+ steps :
174+ - name : Checkout Cython
175+ uses : actions/checkout@v6
176+
177+ - uses : actions/setup-python@v6.2.0
178+ with :
179+ python-version : ' 3.13'
180+
181+ - name : Build wheels
182+ uses : pypa/cibuildwheel@v3.3.1
183+ env :
184+ # Smaller set of platforms that we only provide Stable ABI wheels for
185+ CIBW_BUILD : |
186+ ${{
187+ matrix.os == 'ubuntu-24.04-arm' && '*armv7l *musllinux_aarch64' ||
188+ matrix.os == 'ubuntu-latest' && '*linux_i686 *musllinux_x86_64' ||
189+ matrix.os == 'windows-latest' && '*win32' ||
190+ matrix.os == 'macos-latest' && '*macosx_x86_64' ||
191+ matrix.os == 'windows-11-arm' && '*win_arm64' ||
192+ '' }}
193+
194+ - name : Check wheel
195+ run : |
196+ python -m pip install twine
197+ python -m twine check ./wheelhouse/*.whl
198+
199+ - uses : actions/upload-artifact@v6.0.0
200+ with :
201+ name : Stable-ABI-${{ matrix.os }}-${{ strategy.job-index }}
202+ path : ./wheelhouse/*.whl
203+
154204 upload_release_assets :
155205 name : Upload Release Wheels
156- needs : [ sdist, build_wheels, Linux ]
206+ needs : [ sdist, build_wheels, build_limited_api_wheels, manylinux2014 ]
157207 runs-on : ubuntu-latest
158208 if : startsWith(github.ref, 'refs/tags')
159209
@@ -182,8 +232,7 @@ jobs:
182232 ./bdist_downloads/*.whl
183233 ./bdist_downloads/*.tar.gz
184234
185- Linux :
186-
235+ manylinux2014 :
187236 strategy :
188237 # Allows for matrix sub-jobs to fail without canceling the rest
189238 fail-fast : false
@@ -194,7 +243,7 @@ jobs:
194243 - manylinux2014_i686
195244 pyversion : ["*"]
196245
197- runs-on : ubuntu-22.04
246+ runs-on : ubuntu-latest
198247
199248 steps :
200249 - uses : actions/checkout@v5
0 commit comments