7171 with :
7272 matrix_yaml : |
7373 include:
74- # x86_64 manylinux
75- - { spec: cp310-manylinux_x86_64, arch: x86_64, omit: ${{ env.skip_ci_redundant_jobs }} }
76- - { spec: cp311-manylinux_x86_64, arch: x86_64, omit: ${{ env.skip_ci_redundant_jobs }} }
77- - { spec: cp312-manylinux_x86_64, arch: x86_64, omit: ${{ env.skip_ci_redundant_jobs }} }
78- - { spec: cp313-manylinux_x86_64, arch: x86_64, omit: ${{ env.skip_ci_redundant_jobs }} }
79- - { spec: cp314-manylinux_x86_64, arch: x86_64, omit: ${{ env.skip_ci_redundant_jobs }} }
80- - { spec: cp314t-manylinux_x86_64, arch: x86_64, omit: ${{ env.skip_ci_redundant_jobs }} }
81- - { spec: cp315-manylinux_x86_64, arch: x86_64 }
82- - { spec: cp315t-manylinux_x86_64, arch: x86_64 }
83-
84- # x86_64 musllinux
85- - { spec: cp310-musllinux_x86_64, arch: x86_64, omit: ${{ env.skip_ci_redundant_jobs }} }
86- - { spec: cp311-musllinux_x86_64, arch: x86_64, omit: ${{ env.skip_ci_redundant_jobs }} }
87- - { spec: cp312-musllinux_x86_64, arch: x86_64, omit: ${{ env.skip_ci_redundant_jobs }} }
88- - { spec: cp313-musllinux_x86_64, arch: x86_64, omit: ${{ env.skip_ci_redundant_jobs }} }
89- - { spec: cp314-musllinux_x86_64, arch: x86_64, omit: ${{ env.skip_ci_redundant_jobs }} }
90- - { spec: cp314t-musllinux_x86_64, arch: x86_64, omit: ${{ env.skip_ci_redundant_jobs }} }
91- - { spec: cp315-musllinux_x86_64, arch: x86_64 }
92- - { spec: cp315t-musllinux_x86_64, arch: x86_64 }
93-
94- # i686 manylinux
95- - { spec: cp310-manylinux_i686, arch: i686, omit: ${{ env.skip_ci_redundant_jobs }} }
96- - { spec: cp311-manylinux_i686, arch: i686, omit: ${{ env.skip_ci_redundant_jobs }} }
97- - { spec: cp312-manylinux_i686, arch: i686, omit: ${{ env.skip_ci_redundant_jobs }} }
98- - { spec: cp313-manylinux_i686, arch: i686 }
99- # omit i686 releases > 3.13
100-
101- # i686 musllinux
102- - { spec: cp310-musllinux_i686, arch: i686, omit: ${{ env.skip_ci_redundant_jobs }} }
103- - { spec: cp311-musllinux_i686, arch: i686 }
104- # omit i686 releases after 3.11
105-
106- # aarch64 manylinux
107- - { spec: cp310-manylinux_aarch64, arch: aarch64, omit: ${{ env.skip_ci_redundant_jobs }} }
108- - { spec: cp311-manylinux_aarch64, arch: aarch64, omit: ${{ env.skip_ci_redundant_jobs }} }
109- - { spec: cp312-manylinux_aarch64, arch: aarch64, omit: ${{ env.skip_ci_redundant_jobs }} }
110- - { spec: cp313-manylinux_aarch64, arch: aarch64, omit: ${{ env.skip_ci_redundant_jobs }} }
111- - { spec: cp314-manylinux_aarch64, arch: aarch64, omit: ${{ env.skip_ci_redundant_jobs }} }
112- - { spec: cp314t-manylinux_aarch64, arch: aarch64, omit: ${{ env.skip_ci_redundant_jobs }} }
113- - { spec: cp315-manylinux_aarch64, arch: aarch64 }
114- - { spec: cp315t-manylinux_aarch64, arch: aarch64 }
115-
116- # aarch64 musllinux
117- - { spec: cp310-musllinux_aarch64, arch: aarch64, omit: ${{ env.skip_ci_redundant_jobs }} }
118- - { spec: cp311-musllinux_aarch64, arch: aarch64, omit: ${{ env.skip_ci_redundant_jobs }} }
119- - { spec: cp312-musllinux_aarch64, arch: aarch64, omit: ${{ env.skip_ci_redundant_jobs }} }
120- - { spec: cp313-musllinux_aarch64, arch: aarch64, omit: ${{ env.skip_ci_redundant_jobs }} }
121- - { spec: cp314-musllinux_aarch64, arch: aarch64, omit: ${{ env.skip_ci_redundant_jobs }} }
122- - { spec: cp314t-musllinux_aarch64, arch: aarch64, omit: ${{ env.skip_ci_redundant_jobs }} }
123- - { spec: cp315-musllinux_aarch64, arch: aarch64 }
124- - { spec: cp315t-musllinux_aarch64, arch: aarch64 }
125-
126- # ppc64le manylinux
127- - { spec: cp310-manylinux_ppc64le, arch: ppc64le, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs }} }
128- - { spec: cp311-manylinux_ppc64le, arch: ppc64le, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs || env.skip_ci_redundant_jobs }} }
129- - { spec: cp312-manylinux_ppc64le, arch: ppc64le, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs || env.skip_ci_redundant_jobs }} }
130- - { spec: cp313-manylinux_ppc64le, arch: ppc64le, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs || env.skip_ci_redundant_jobs }} }
131- - { spec: cp314-manylinux_ppc64le, arch: ppc64le, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs || env.skip_ci_redundant_jobs }} }
132- - { spec: cp314t-manylinux_ppc64le, arch: ppc64le, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs || env.skip_ci_redundant_jobs }} }
133- - { spec: cp315-manylinux_ppc64le, arch: ppc64le, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs }} }
134- - { spec: cp315t-manylinux_ppc64le, arch: ppc64le, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs }} }
135-
136- # s390x manylinux
137- - { spec: cp310-manylinux_s390x, arch: s390x, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs }} }
138- - { spec: cp311-manylinux_s390x, arch: s390x, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs || env.skip_ci_redundant_jobs }} }
139- - { spec: cp312-manylinux_s390x, arch: s390x, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs || env.skip_ci_redundant_jobs }} }
140- - { spec: cp313-manylinux_s390x, arch: s390x, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs || env.skip_ci_redundant_jobs }} }
141- - { spec: cp314-manylinux_s390x, arch: s390x, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs || env.skip_ci_redundant_jobs }} }
142- - { spec: cp314t-manylinux_s390x, arch: s390x, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs || env.skip_ci_redundant_jobs }} }
143- - { spec: cp315-manylinux_s390x, arch: s390x, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs }} }
144- - { spec: cp315t-manylinux_s390x, arch: s390x, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs }} }
145-
146- # riscv64gc manylinux
74+ # riscv64 manylinux
14775 - { spec: cp310-manylinux_riscv64, arch: riscv64, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs }} }
14876 - { spec: cp311-manylinux_riscv64, arch: riscv64, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs || env.skip_ci_redundant_jobs }} }
14977 - { spec: cp312-manylinux_riscv64, arch: riscv64, test_args: '{package}/src/c', omit: ${{ env.skip_slow_jobs || env.skip_ci_redundant_jobs }} }
@@ -232,294 +160,8 @@ jobs:
232160 if-no-files-found : error
233161 if : ${{ (matrix.skip_artifact_upload != 'true') && (env.skip_artifact_upload != 'true') }}
234162
235- make_macos_matrix :
236- runs-on : ubuntu-24.04
237- outputs :
238- matrix_json : ${{ steps.make_matrix.outputs.matrix_json }}
239- steps :
240- - uses : actions/checkout@v7
241- - name : make a matrix
242- id : make_matrix
243- uses : ./.github/actions/dynamatrix
244- with :
245- matrix_yaml : |
246- include:
247- # x86_64 macos
248- - { spec: cp310-macosx_x86_64, deployment_target: '10.15', runs_on: macos-15-intel, omit: ${{ env.skip_ci_redundant_jobs }} }
249- - { spec: cp311-macosx_x86_64, deployment_target: '10.15', runs_on: macos-15-intel, omit: ${{ env.skip_ci_redundant_jobs }} }
250- - { spec: cp312-macosx_x86_64, deployment_target: '10.15', runs_on: macos-15-intel, omit: ${{ env.skip_ci_redundant_jobs }} }
251- - { spec: cp313-macosx_x86_64, deployment_target: '10.15', runs_on: macos-15-intel, omit: ${{ env.skip_ci_redundant_jobs }} }
252- - { spec: cp314-macosx_x86_64, deployment_target: '10.15', runs_on: macos-15-intel, omit: ${{ env.skip_ci_redundant_jobs }} }
253- - { spec: cp314t-macosx_x86_64, deployment_target: '10.15', runs_on: macos-15-intel, omit: ${{ env.skip_ci_redundant_jobs }} }
254- - { spec: cp315-macosx_x86_64, deployment_target: '10.15', runs_on: macos-15-intel }
255- - { spec: cp315t-macosx_x86_64, deployment_target: '10.15', runs_on: macos-15-intel }
256-
257- # arm64 macos
258- - { spec: cp310-macosx_arm64, deployment_target: '11.0', omit: ${{ env.skip_ci_redundant_jobs }} }
259- - { spec: cp311-macosx_arm64, deployment_target: '11.0', omit: ${{ env.skip_ci_redundant_jobs }} }
260- - { spec: cp312-macosx_arm64, deployment_target: '11.0', omit: ${{ env.skip_ci_redundant_jobs }} }
261- - { spec: cp313-macosx_arm64, deployment_target: '11.0', omit: ${{ env.skip_ci_redundant_jobs }} }
262- - { spec: cp314-macosx_arm64, deployment_target: '11.0', omit: ${{ env.skip_ci_redundant_jobs }} }
263- - { spec: cp314t-macosx_arm64, deployment_target: '11.0', omit: ${{ env.skip_ci_redundant_jobs }} }
264- - { spec: cp315-macosx_arm64, deployment_target: '11.0' }
265- - { spec: cp315t-macosx_arm64, deployment_target: '11.0' }
266-
267- macos :
268- needs : [python_sdist, make_macos_matrix]
269- defaults :
270- run :
271- shell : ${{ matrix.run_wrapper || 'bash --noprofile --norc -eo pipefail {0}' }}
272- runs-on : ${{ matrix.runs_on || 'macos-26' }}
273- strategy :
274- fail-fast : false
275- matrix : ${{ fromJSON(needs.make_macos_matrix.outputs.matrix_json) }}
276-
277- steps :
278- - name : fetch sdist artifact
279- id : fetch_sdist
280- uses : actions/download-artifact@v8
281- with :
282- name : ${{ needs.python_sdist.outputs.sdist_artifact_name }}
283-
284- - name : install python
285- uses : actions/setup-python@v6
286- with :
287- python-version : ' 3.12'
288-
289- - name : build wheel prereqs
290- run : |
291- set -eux
292- python3 -m pip install --user --upgrade "${{ matrix.cibw_version || 'cibuildwheel' }}"
293- brew uninstall -f --ignore-dependencies libffi 2>&1 || true
294-
295- - name : build/test wheels
296- id : build
297- env :
298- CIBW_BUILD : ${{ matrix.spec }}
299- CIBW_ENABLE : cpython-prerelease
300- CIBW_TEST_REQUIRES : pytest setuptools meson-python ninja
301- CIBW_TEST_COMMAND : pip install pip --upgrade; cd {project}; PYTHONUNBUFFERED=1 pytest
302- MACOSX_DEPLOYMENT_TARGET : ${{ matrix.deployment_target || '11.0' }}
303- SDKROOT : ${{ matrix.sdkroot || 'macosx' }}
304- run : |
305- set -eux
306-
307- mkdir cffi
308-
309- tar zxf ${{ steps.fetch_sdist.outputs.download-path }}/cffi*.tar.gz --strip-components=1 -C cffi
310-
311- python3 -m cibuildwheel --output-dir dist cffi
312-
313- echo "artifact_name=$(ls ./dist/)" >> "$GITHUB_OUTPUT"
314-
315- - name : upload artifacts
316- uses : actions/upload-artifact@v7
317- with :
318- name : ${{ steps.build.outputs.artifact_name }}
319- path : dist/*.whl
320- if-no-files-found : error
321- if : ${{ env.skip_artifact_upload != 'true' }}
322-
323- make_windows_matrix :
324- runs-on : ubuntu-24.04
325- outputs :
326- matrix_json : ${{ steps.make_matrix.outputs.matrix_json }}
327- steps :
328- - uses : actions/checkout@v7
329- - name : make a matrix
330- id : make_matrix
331- uses : ./.github/actions/dynamatrix
332- with :
333- matrix_yaml : |
334- include:
335- # x86_64 windows
336- - { spec: cp310-win_amd64, omit: ${{ env.skip_ci_redundant_jobs }} }
337- - { spec: cp311-win_amd64, omit: ${{ env.skip_ci_redundant_jobs }} }
338- - { spec: cp312-win_amd64, omit: ${{ env.skip_ci_redundant_jobs }} }
339- - { spec: cp313-win_amd64, omit: ${{ env.skip_ci_redundant_jobs }} }
340- - { spec: cp314-win_amd64, omit: ${{ env.skip_ci_redundant_jobs }} }
341- - { spec: cp314t-win_amd64, omit: ${{ env.skip_ci_redundant_jobs }} }
342- - { spec: cp315-win_amd64 }
343- - { spec: cp315t-win_amd64 }
344-
345- # x86 windows
346- - { spec: cp310-win32, omit: ${{ env.skip_ci_redundant_jobs }} }
347- - { spec: cp311-win32, omit: ${{ env.skip_ci_redundant_jobs }} }
348- - { spec: cp312-win32, omit: ${{ env.skip_ci_redundant_jobs }} }
349- - { spec: cp313-win32, omit: ${{ env.skip_ci_redundant_jobs }} }
350- - { spec: cp314-win32, omit: ${{ env.skip_ci_redundant_jobs }} }
351- - { spec: cp314t-win32, omit: ${{ env.skip_ci_redundant_jobs }} }
352- - { spec: cp315-win32 }
353- - { spec: cp315t-win32 }
354-
355- # arm64 windows
356- - { spec: cp311-win_arm64, runs_on: windows-11-arm, omit: ${{ env.skip_ci_redundant_jobs }} }
357- - { spec: cp312-win_arm64, runs_on: windows-11-arm, omit: ${{ env.skip_ci_redundant_jobs }} }
358- - { spec: cp313-win_arm64, runs_on: windows-11-arm, omit: ${{ env.skip_ci_redundant_jobs }} }
359- - { spec: cp314-win_arm64, runs_on: windows-11-arm, omit: ${{ env.skip_ci_redundant_jobs }} }
360- - { spec: cp314t-win_arm64, runs_on: windows-11-arm, omit: ${{ env.skip_ci_redundant_jobs }} }
361- - { spec: cp315-win_arm64, runs_on: windows-11-arm }
362- - { spec: cp315t-win_arm64, runs_on: windows-11-arm }
363-
364- windows :
365- needs : [python_sdist, make_windows_matrix]
366- runs-on : ${{ matrix.runs_on || 'windows-2022' }}
367- strategy :
368- fail-fast : false
369- matrix : ${{ fromJSON(needs.make_windows_matrix.outputs.matrix_json) }}
370-
371- steps :
372- - name : fetch sdist artifact
373- id : fetch_sdist
374- uses : actions/download-artifact@v8
375- with :
376- name : ${{ needs.python_sdist.outputs.sdist_artifact_name }}
377-
378- - name : Install python
379- uses : actions/setup-python@v6
380- with :
381- python-version : 3.x
382-
383- - name : build/test wheels
384- id : build
385- env :
386- CIBW_BUILD : ${{ matrix.spec }}
387- CIBW_ENABLE : cpython-prerelease
388- CIBW_TEST_REQUIRES : pytest setuptools meson-python ninja
389- CIBW_TEST_COMMAND : ${{ matrix.test_cmd || 'python -m pytest {package}/src/c' }}
390- # FIXME: /testing takes ~45min on Windows and has some failures...
391- # CIBW_TEST_COMMAND='python -m pytest {package}/src/c {package}/testing'
392- run : |
393- set -eux
394-
395- mkdir cffi
396-
397- tar zxf cffi*.tar.gz --strip-components=1 -C cffi
398-
399- python -m pip install --upgrade pip
400- pip install "${{ matrix.cibw_version || 'cibuildwheel' }}"
401- python -m cibuildwheel --output-dir dist cffi
402-
403- echo "artifact_name=$(ls ./dist/)" >> "$GITHUB_OUTPUT"
404-
405- shell : bash
406-
407- - name : upload artifacts
408- uses : actions/upload-artifact@v7
409- with :
410- name : ${{ steps.build.outputs.artifact_name }}
411- path : dist/*.whl
412- if-no-files-found : error
413- if : ${{ env.skip_artifact_upload != 'true' }}
414-
415- make_ios_matrix :
416- runs-on : ubuntu-24.04
417- outputs :
418- matrix_json : ${{ steps.make_matrix.outputs.matrix_json }}
419- steps :
420- - uses : actions/checkout@v7
421- - name : make a matrix
422- id : make_matrix
423- uses : ./.github/actions/dynamatrix
424- with :
425- matrix_yaml : |
426- include:
427- # arm64 iOS device
428- - { spec: cp313-ios_arm64_iphoneos, platform: 'iphoneos' }
429- - { spec: cp314-ios_arm64_iphoneos, platform: 'iphoneos' }
430- - { spec: cp315-ios_arm64_iphoneos, platform: 'iphoneos' }
431-
432- # arm64 iOS simulator
433- - { spec: cp313-ios_arm64_iphonesimulator, platform: 'iphonesimulator' }
434- - { spec: cp314-ios_arm64_iphonesimulator, platform: 'iphonesimulator' }
435- - { spec: cp315-ios_arm64_iphonesimulator, platform: 'iphonesimulator' }
436-
437- ios :
438- needs : [python_sdist, make_ios_matrix]
439- runs-on : macos-14
440- strategy :
441- fail-fast : false
442- matrix : ${{ fromJSON(needs.make_ios_matrix.outputs.matrix_json) }}
443-
444- steps :
445- - name : fetch sdist artifact
446- id : fetch_sdist
447- uses : actions/download-artifact@v8
448- with :
449- name : ${{ needs.python_sdist.outputs.sdist_artifact_name }}
450-
451- - name : install python
452- uses : actions/setup-python@v6
453- with :
454- python-version : ' 3.13'
455-
456- - name : build wheel prereqs
457- run : |
458- set -eux
459- python3 -m pip install --user --upgrade cibuildwheel>=3.1.0
460- brew uninstall -f --ignore-dependencies libffi 2>&1 || true
461-
462- - name : download libffi for iOS
463- env :
464- CFFI_IOS_LIBFFI_VERSION : ' 3.4.7-2'
465- run : |
466- set -eux
467-
468- # Download prebuilt libffi from beeware/cpython-apple-source-deps
469- platform="${{ matrix.platform }}"
470- version="${CFFI_IOS_LIBFFI_VERSION}"
471- url="https://github.com/beeware/cpython-apple-source-deps/releases/download/libFFI-${version}/libffi-${version}-${platform}.arm64.tar.gz"
472-
473- echo "Downloading libffi for iOS (${platform})..."
474- curl -L -o libffi-ios.tar.gz "${url}"
475-
476- # Extract libffi
477- mkdir -p libffi-ios
478- tar zxf libffi-ios.tar.gz -C libffi-ios
479-
480- # Set up paths for cibuildwheel
481- echo "LIBFFI_IOS_DIR=$(pwd)/libffi-ios" >> "$GITHUB_ENV"
482-
483- - name : build/test wheels
484- id : build
485- env :
486- CIBW_BUILD : ${{ matrix.spec }}
487- CIBW_ENABLE : cpython-prerelease
488- CIBW_PLATFORM : ios
489- SDKROOT : ${{ matrix.platform }}
490- CIBW_TEST_REQUIRES : pytest setuptools
491- CIBW_TEST_SOURCES : cffi
492- # Running tests from `testing/` will not work since they try to compile C code on device
493- CIBW_TEST_COMMAND : python -m pytest -sv cffi/src/c/
494- # Environment variables for the build
495- CIBW_ENVIRONMENT : >
496- CFLAGS="-I${LIBFFI_IOS_DIR}/include"
497- LDFLAGS="-L${LIBFFI_IOS_DIR}/lib"
498- PYTHONUNBUFFERED=1
499- # Pass through our custom env vars
500- CIBW_ENVIRONMENT_PASS_IOS : LIBFFI_IOS_DIR PYTHONUNBUFFERED
501- CIBW_XBUILD_TOOLS : " "
502- run : |
503- set -eux
504-
505- mkdir cffi
506-
507- tar zxf ${{ steps.fetch_sdist.outputs.download-path }}/cffi*.tar.gz --strip-components=1 -C cffi
508-
509- python3 -m cibuildwheel --output-dir dist cffi
510-
511- echo "artifact_name=$(ls ./dist/)" >> "$GITHUB_OUTPUT"
512-
513- - name : upload artifacts
514- uses : actions/upload-artifact@v7
515- with :
516- name : ${{ steps.build.outputs.artifact_name }}
517- path : dist/*.whl
518- if-no-files-found : error
519- if : ${{ env.skip_artifact_upload != 'true' }}
520-
521163 merge_artifacts :
522- needs : [python_sdist, linux, macos, windows, ios ]
164+ needs : [python_sdist, linux]
523165 runs-on : ubuntu-24.04
524166 steps :
525167 - name : merge all artifacts
@@ -542,8 +184,6 @@ jobs:
542184 matrix_yaml : |
543185 include:
544186 - { runner: ubuntu-24.04, python-version: 3.15t-dev }
545- - { runner: macos-26, python-version: 3.15t-dev }
546- - { runner: windows-2025, python-version: 3.15t-dev }
547187
548188 pytest-run-parallel :
549189 needs : make_run_parallel_matrix
@@ -589,7 +229,7 @@ jobs:
589229
590230 check :
591231 if : always()
592- needs : [python_sdist, linux, macos, windows, ios, clang_TSAN, pytest-run-parallel, merge_artifacts]
232+ needs : [python_sdist, linux, clang_TSAN, pytest-run-parallel, merge_artifacts]
593233 runs-on : ubuntu-24.04
594234 steps :
595235 - name : Verify all previous jobs succeeded (provides a single check to sample for gating purposes)
0 commit comments