cibuildwheel 3.1.4__tar.gz → 3.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/.github/workflows/release.yml +1 -1
  2. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/.github/workflows/test.yml +9 -17
  3. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/.pre-commit-config.yaml +4 -4
  4. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/PKG-INFO +24 -27
  5. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/README.md +23 -26
  6. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/action.yml +1 -1
  7. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/azure-pipelines.yml +1 -1
  8. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/bin/projects.py +3 -3
  9. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/bin/run_example_ci_configs.py +34 -4
  10. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/bin/update_pythons.py +43 -70
  11. cibuildwheel-3.2.0/cibuildwheel/__init__.py +1 -0
  12. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/platforms/android.py +25 -9
  13. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/platforms/windows.py +14 -7
  14. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/build-platforms.toml +46 -39
  15. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/constraints-pyodide312.txt +7 -7
  16. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/constraints-pyodide313.txt +7 -7
  17. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/constraints-python310.txt +2 -2
  18. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/constraints-python311.txt +2 -2
  19. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/constraints-python312.txt +2 -2
  20. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/constraints-python313.txt +2 -2
  21. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/constraints-python314.txt +2 -2
  22. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/constraints-python39.txt +2 -2
  23. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/constraints.txt +2 -2
  24. cibuildwheel-3.2.0/cibuildwheel/resources/nodejs.toml +3 -0
  25. cibuildwheel-3.2.0/cibuildwheel/resources/pinned_docker_images.cfg +52 -0
  26. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/python-build-standalone-releases.json +249 -225
  27. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/selector.py +4 -2
  28. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/changelog.md +11 -0
  29. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/configuration.md +7 -4
  30. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/faq.md +3 -3
  31. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/options.md +6 -2
  32. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/platforms.md +13 -7
  33. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/examples/azure-pipelines-minimal.yml +3 -3
  34. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/examples/circleci-minimal.yml +3 -3
  35. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/examples/cirrus-ci-intel-mac.yml +1 -1
  36. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/examples/cirrus-ci-minimal.yml +1 -1
  37. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/examples/github-deploy.yml +11 -19
  38. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/examples/github-minimal.yml +3 -3
  39. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/examples/github-pipx.yml +3 -3
  40. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/examples/github-with-qemu.yml +3 -3
  41. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/examples/gitlab-minimal.yml +3 -3
  42. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/examples/gitlab-with-qemu.yml +1 -1
  43. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/examples/travis-ci-deploy.yml +1 -1
  44. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/examples/travis-ci-minimal.yml +1 -1
  45. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/examples/travis-ci-test-and-deploy.yml +2 -2
  46. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/pyproject.toml +5 -2
  47. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_abi_variants.py +2 -2
  48. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_android.py +78 -1
  49. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_dependency_versions.py +4 -4
  50. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_ios.py +3 -5
  51. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_pyodide.py +1 -1
  52. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_ssl.py +3 -0
  53. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/utils.py +21 -4
  54. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/build_selector_test.py +2 -3
  55. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/get_platform_test.py +5 -21
  56. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/main_commands_test.py +4 -4
  57. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/option_prepare_test.py +3 -1
  58. cibuildwheel-3.1.4/cibuildwheel/__init__.py +0 -1
  59. cibuildwheel-3.1.4/cibuildwheel/resources/nodejs.toml +0 -3
  60. cibuildwheel-3.1.4/cibuildwheel/resources/pinned_docker_images.cfg +0 -53
  61. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/.circleci/config.yml +0 -0
  62. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/.circleci/prepare.sh +0 -0
  63. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/.cirrus.yml +0 -0
  64. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/.editorconfig +0 -0
  65. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/.gitattributes +0 -0
  66. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/.github/CODEOWNERS +0 -0
  67. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  68. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/.github/dependabot.yml +0 -0
  69. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/.github/workflows/update-dependencies.yml +0 -0
  70. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/.github/workflows/update-major-minor-tag.yml +0 -0
  71. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/.gitignore +0 -0
  72. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/.gitlab-ci.yml +0 -0
  73. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/.readthedocs.yml +0 -0
  74. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/.travis.yml +0 -0
  75. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/CI.md +0 -0
  76. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/LICENSE +0 -0
  77. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/bin/bump_version.py +0 -0
  78. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/bin/generate_pyodide_constraints.py +0 -0
  79. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/bin/generate_schema.py +0 -0
  80. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/bin/inspect_all_known_projects.py +0 -0
  81. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/bin/make_dependency_update_pr.py +0 -0
  82. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/bin/readme_changelog.py +0 -0
  83. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/bin/readme_options_table.py +0 -0
  84. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/bin/run_tests.py +0 -0
  85. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/bin/sample_build.py +0 -0
  86. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/bin/update_docker.py +0 -0
  87. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/bin/update_how_it_works_image.py +0 -0
  88. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/bin/update_nodejs.py +0 -0
  89. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/bin/update_python_build_standalone.py +0 -0
  90. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/bin/update_virtualenv.py +0 -0
  91. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/__main__.py +0 -0
  92. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/architecture.py +0 -0
  93. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/bashlex_eval.py +0 -0
  94. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/ci.py +0 -0
  95. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/environment.py +0 -0
  96. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/errors.py +0 -0
  97. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/extra.py +0 -0
  98. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/frontend.py +0 -0
  99. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/logger.py +0 -0
  100. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/oci_container.py +0 -0
  101. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/options.py +0 -0
  102. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/platforms/__init__.py +0 -0
  103. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/platforms/ios.py +0 -0
  104. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/platforms/linux.py +0 -0
  105. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/platforms/macos.py +0 -0
  106. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/platforms/pyodide.py +0 -0
  107. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/projectfiles.py +0 -0
  108. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/py.typed +0 -0
  109. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/_cross_venv.pth +0 -0
  110. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/_cross_venv.py +0 -0
  111. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/cibuildwheel.schema.json +0 -0
  112. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/constraints-python38.txt +0 -0
  113. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/constraints.in +0 -0
  114. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/defaults.toml +0 -0
  115. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/free-threaded-enable-313.xml +0 -0
  116. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/free-threaded-enable-314.xml +0 -0
  117. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/install_certifi.py +0 -0
  118. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/testing_temp_dir_file.py +0 -0
  119. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/resources/virtualenv.toml +0 -0
  120. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/schema.py +0 -0
  121. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/typing.py +0 -0
  122. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/util/__init__.py +0 -0
  123. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/util/cmd.py +0 -0
  124. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/util/file.py +0 -0
  125. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/util/helpers.py +0 -0
  126. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/util/packaging.py +0 -0
  127. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/util/python_build_standalone.py +0 -0
  128. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/util/resources.py +0 -0
  129. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/cibuildwheel/venv.py +0 -0
  130. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/ci-services.md +0 -0
  131. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/contributing.md +0 -0
  132. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/cpp_standards.md +0 -0
  133. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/data/how-it-works.png +0 -0
  134. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/data/projects.schema.json +0 -0
  135. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/data/projects.yml +0 -0
  136. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/data/readme_icons/apple.svg +0 -0
  137. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/data/readme_icons/azurepipelines.svg +0 -0
  138. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/data/readme_icons/circleci.svg +0 -0
  139. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/data/readme_icons/cirrusci.svg +0 -0
  140. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/data/readme_icons/github.svg +0 -0
  141. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/data/readme_icons/gitlab.svg +0 -0
  142. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/data/readme_icons/linux.svg +0 -0
  143. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/data/readme_icons/travisci.svg +0 -0
  144. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/data/readme_icons/windows.svg +0 -0
  145. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/deliver-to-pypi.md +0 -0
  146. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/diagram.html +0 -0
  147. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/extra.css +0 -0
  148. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/extra.js +0 -0
  149. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/index.md +0 -0
  150. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/main.py +0 -0
  151. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/setup.md +0 -0
  152. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/theme_overrides/js/theme.js +0 -0
  153. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/docs/working-examples.md +14 -14
  154. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/mkdocs.yml +0 -0
  155. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/noxfile.py +0 -0
  156. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/README.md +0 -0
  157. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/__init__.py +0 -0
  158. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/conftest.py +0 -0
  159. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_0_basic.py +0 -0
  160. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_before_all.py +0 -0
  161. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_before_build.py +0 -0
  162. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_before_test.py +0 -0
  163. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_build_frontend_args.py +0 -0
  164. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_build_skip.py +0 -0
  165. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_container_engine.py +0 -0
  166. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_container_images.py +0 -0
  167. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_cpp_standards.py +0 -0
  168. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_custom_repair_wheel.py +0 -0
  169. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_emulation.py +0 -0
  170. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_environment.py +0 -0
  171. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_from_sdist.py +0 -0
  172. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_linux_python.py +0 -0
  173. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_macos_archs.py +0 -0
  174. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_manylinuxXXXX_only.py +0 -0
  175. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_musllinux_X_Y_only.py +0 -0
  176. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_pep518.py +0 -0
  177. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_projects/__init__.py +0 -0
  178. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_projects/__main__.py +0 -0
  179. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_projects/base.py +0 -0
  180. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_projects/c.py +0 -0
  181. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_pure_wheel.py +0 -0
  182. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_subdir_package.py +0 -0
  183. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_testing.py +0 -0
  184. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_troubleshooting.py +0 -0
  185. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_wheel_tag.py +0 -0
  186. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/test/test_windows.py +0 -0
  187. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/__init__.py +0 -0
  188. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/architecture_test.py +0 -0
  189. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/build_ids_test.py +0 -0
  190. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/conftest.py +0 -0
  191. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/dependency_constraints_test.py +0 -0
  192. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/download_test.py +0 -0
  193. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/environment_test.py +0 -0
  194. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/linux_build_steps_test.py +0 -0
  195. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/main_tests/__init__.py +0 -0
  196. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/main_tests/conftest.py +0 -0
  197. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/main_tests/main_options_test.py +0 -0
  198. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/main_tests/main_platform_test.py +0 -0
  199. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/main_tests/main_requires_python_test.py +0 -0
  200. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/oci_container_test.py +0 -0
  201. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/options_test.py +0 -0
  202. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/options_toml_test.py +0 -0
  203. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/projectfiles_test.py +0 -0
  204. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/utils_test.py +0 -0
  205. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/validate_schema_test.py +0 -0
  206. {cibuildwheel-3.1.4 → cibuildwheel-3.2.0}/unit_test/wheel_print_test.py +0 -0
@@ -33,7 +33,7 @@ jobs:
33
33
  path: dist
34
34
 
35
35
  - name: Generate artifact attestation for sdist and wheel
36
- uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # v2.4.0
36
+ uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3.0.0
37
37
  with:
38
38
  subject-path: "dist/cibuildwheel-*"
39
39
 
@@ -38,7 +38,7 @@ jobs:
38
38
  runs-on: ubuntu-latest
39
39
  steps:
40
40
  - uses: actions/checkout@v5
41
- - uses: actions/setup-python@v5
41
+ - uses: actions/setup-python@v6
42
42
  id: python
43
43
  with:
44
44
  python-version: "3.x"
@@ -69,17 +69,17 @@ jobs:
69
69
  python_version: '3.13'
70
70
  - os: windows-11-arm
71
71
  python_version: '3.13'
72
- - os: macos-13
72
+ - os: macos-15-intel
73
73
  python_version: '3.13'
74
74
  - os: macos-15
75
75
  python_version: '3.13'
76
- - os: macos-13
76
+ - os: macos-15-intel
77
77
  python_version: '3.13'
78
78
  test_select: ios
79
- - os: macos-14 # 20250811 macos-15 update caused havoc with iOS simulators
79
+ - os: macos-14 # See https://github.com/actions/runner-images/issues/12777
80
80
  python_version: '3.13'
81
81
  test_select: ios
82
- - os: macos-13
82
+ - os: macos-15-intel
83
83
  python_version: '3.13'
84
84
  test_select: android
85
85
  - os: macos-15
@@ -88,7 +88,7 @@ jobs:
88
88
  timeout-minutes: 180
89
89
  steps:
90
90
  - uses: actions/checkout@v5
91
- - uses: actions/setup-python@v5
91
+ - uses: actions/setup-python@v6
92
92
  name: Install Python ${{ matrix.python_version }}
93
93
  with:
94
94
  python-version: ${{ matrix.python_version }}
@@ -105,14 +105,6 @@ jobs:
105
105
  /usr/local/share/powershell
106
106
  df -h
107
107
 
108
- # https://github.blog/changelog/2024-04-02-github-actions-hardware-accelerated-android-virtualization-now-available/
109
- - name: Enable KVM for Android emulator
110
- if: runner.os == 'Linux' && runner.arch == 'X64'
111
- run: |
112
- echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
113
- sudo udevadm control --reload-rules
114
- sudo udevadm trigger --name-match=kvm
115
-
116
108
  # for oci_container unit tests
117
109
  - name: Set up QEMU
118
110
  if: runner.os == 'Linux'
@@ -215,7 +207,7 @@ jobs:
215
207
  archs: ${{ steps.archs.outputs.archs }}
216
208
  steps:
217
209
  - uses: actions/checkout@v5
218
- - uses: actions/setup-python@v5
210
+ - uses: actions/setup-python@v6
219
211
  with:
220
212
  python-version: "3.x"
221
213
  - uses: astral-sh/setup-uv@v6
@@ -238,7 +230,7 @@ jobs:
238
230
  arch: ${{ fromJSON(needs.emulated-archs.outputs.archs) }}
239
231
  steps:
240
232
  - uses: actions/checkout@v5
241
- - uses: actions/setup-python@v5
233
+ - uses: actions/setup-python@v6
242
234
  with:
243
235
  python-version: "3.x"
244
236
  - uses: astral-sh/setup-uv@v6
@@ -258,7 +250,7 @@ jobs:
258
250
  timeout-minutes: 180
259
251
  steps:
260
252
  - uses: actions/checkout@v5
261
- - uses: actions/setup-python@v5
253
+ - uses: actions/setup-python@v6
262
254
  name: Install Python 3.12
263
255
  with:
264
256
  python-version: '3.12'
@@ -14,14 +14,14 @@ repos:
14
14
  - id: trailing-whitespace
15
15
 
16
16
  - repo: https://github.com/astral-sh/ruff-pre-commit
17
- rev: v0.12.9
17
+ rev: v0.13.1
18
18
  hooks:
19
- - id: ruff
19
+ - id: ruff-check
20
20
  args: ["--fix", "--show-fixes"]
21
21
  - id: ruff-format
22
22
 
23
23
  - repo: https://github.com/pre-commit/mirrors-mypy
24
- rev: v1.17.1
24
+ rev: v1.18.2
25
25
  hooks:
26
26
  - id: mypy
27
27
  name: mypy 3.11 on cibuildwheel/
@@ -83,7 +83,7 @@ repos:
83
83
 
84
84
 
85
85
  - repo: https://github.com/python-jsonschema/check-jsonschema
86
- rev: 0.33.3
86
+ rev: 0.34.0
87
87
  hooks:
88
88
  - id: check-dependabot
89
89
  - id: check-github-actions
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cibuildwheel
3
- Version: 3.1.4
3
+ Version: 3.2.0
4
4
  Summary: Build Python wheels on CI with minimal configuration.
5
5
  Project-URL: Changelog, https://github.com/pypa/cibuildwheel#changelog
6
6
  Project-URL: Documentation, https://cibuildwheel.pypa.io
@@ -68,14 +68,15 @@ While cibuildwheel itself requires a recent Python version to run (we support th
68
68
  | CPython 3.9 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | N/A |
69
69
  | CPython 3.10 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | N/A |
70
70
  | CPython 3.11 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | N/A |
71
- | CPython 3.12 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | ✅⁴ |
72
- | CPython 3.13³ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | ✅ | ✅ | N/A |
73
- | CPython 3.14 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | N/A |
71
+ | CPython 3.12 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | ✅⁴ |
72
+ | CPython 3.13³ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | ✅ | ✅ | ✅⁴ |
73
+ | CPython 3.14 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | | | N/A |
74
74
  | PyPy 3.8 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
75
75
  | PyPy 3.9 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
76
76
  | PyPy 3.10 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
77
77
  | PyPy 3.11 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
78
78
  | GraalPy 3.11 v24.2 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | N/A | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
79
+ | GraalPy 3.12 v25.0 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | N/A | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
79
80
 
80
81
  <sup>¹ PyPy & GraalPy are only supported for manylinux wheels.</sup><br>
81
82
  <sup>² Windows arm64 support is experimental.</sup><br>
@@ -97,8 +98,8 @@ Usage
97
98
 
98
99
  | | Linux | macOS | Windows | Linux ARM | macOS ARM | Windows ARM | Android | iOS |
99
100
  |-----------------|-------|-------|---------|-----------|-----------|-------------|---------|-----|
100
- | GitHub Actions | ✅ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅⁴ | ✅³ |
101
- | Azure Pipelines | ✅ | ✅ | ✅ | | ✅ | ✅² | ✅⁴ | ✅³ |
101
+ | GitHub Actions | ✅ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅⁴ | ✅³⁵ |
102
+ | Azure Pipelines | ✅ | ✅ | ✅ | | ✅ | ✅² | ✅⁴ | ✅³⁵ |
102
103
  | Travis CI | ✅ | | ✅ | ✅ | | | ✅⁴ | |
103
104
  | CircleCI | ✅ | ✅ | | ✅ | ✅ | | ✅⁴ | ✅³ |
104
105
  | Gitlab CI | ✅ | ✅ | ✅ | ✅¹ | ✅ | | ✅⁴ | ✅³ |
@@ -106,8 +107,10 @@ Usage
106
107
 
107
108
  <sup>¹ [Requires emulation](https://cibuildwheel.pypa.io/en/stable/faq/#emulation), distributed separately. Other services may also support Linux ARM through emulation or third-party build hosts, but these are not tested in our CI.</sup><br>
108
109
  <sup>² [Uses cross-compilation](https://cibuildwheel.pypa.io/en/stable/faq/#windows-arm64). It is not possible to test `arm64` on this CI platform.</sup><br>
109
- <sup>³ Requires a macOS runner; runs tests on the simulator for the runner's architecture.</sup><br>
110
+ <sup>³ Requires a macOS runner; runs tests on the simulator for the runner's architecture. </sup><br>
110
111
  <sup>⁴ Building for Android requires the runner to be Linux x86_64, macOS ARM64 or macOS x86_64. Testing has [additional requirements](https://cibuildwheel.pypa.io/en/stable/platforms/#android).</sup><br>
112
+ <sup>⁵ The `macos-15` and `macos-latest` images are [incompatible with cibuildwheel at this time](platforms/#ios-system-requirements)</sup><br> when building iOS wheels.
113
+
111
114
  <!--intro-end-->
112
115
 
113
116
  Example setup
@@ -127,7 +130,7 @@ jobs:
127
130
  runs-on: ${{ matrix.os }}
128
131
  strategy:
129
132
  matrix:
130
- os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, windows-11-arm, macos-13, macos-latest]
133
+ os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, windows-11-arm, macos-15-intel, macos-latest]
131
134
 
132
135
  steps:
133
136
  - uses: actions/checkout@v5
@@ -136,7 +139,7 @@ jobs:
136
139
  - uses: actions/setup-python@v5
137
140
 
138
141
  - name: Install cibuildwheel
139
- run: python -m pip install cibuildwheel==3.1.4
142
+ run: python -m pip install cibuildwheel==3.2.0
140
143
 
141
144
  - name: Build wheels
142
145
  run: python -m cibuildwheel --output-dir wheelhouse
@@ -266,6 +269,17 @@ Changelog
266
269
 
267
270
  <!-- [[[cog from readme_changelog import mini_changelog; print(mini_changelog()) ]]] -->
268
271
 
272
+ ### v3.2.0
273
+
274
+ _22 September 2025_
275
+
276
+ - ✨ Adds GraalPy v25 (Python 3.12) support (#2597)
277
+ - 🛠 Update to CPython 3.14.0rc3 (#2602)
278
+ - 🛠 Adds CPython 3.14.0 prerelease support for Android, and a number of improvements to Android builds (#2568, #2591)
279
+ - 🛠 Improvements to testing on Android, passing environment markers when installing the venv, and providing more debug output when build-verbosity is set (#2575)
280
+ - ⚠️ PyPy 3.10 was moved to `pypy-eol` in the `enable` option, as it is now end-of-life. (#2521)
281
+ - 📚 Docs improvements (#2574, #2601, #2598)
282
+
269
283
  ### v3.1.4
270
284
 
271
285
  _19 August 2025_
@@ -315,24 +329,7 @@ _24 July 2025_
315
329
  - 🐛 Fix a bug showing an incorrect wheel count at the end of execution, and misrepresenting test-only runs in the GitHub Action summary (#2512)
316
330
  - 📚 Docs fix (#2510)
317
331
 
318
- ### v3.1.0
319
-
320
- _23 July 2025_
321
-
322
-
323
- - 🌟 CPython 3.14 wheels are now built by default - without the `"cpython-prerelease"` `enable` set. It's time to build and upload these wheels to PyPI! This release includes CPython 3.14.0rc1, which is guaranteed to be ABI compatible with the final release. (#2507) Free-threading is no longer experimental in 3.14, so you have to skip it explicitly with `'cp31?t-*'` if you don't support it yet. (#2503)
324
- - 🌟 Adds the ability to [build wheels for Android](https://cibuildwheel.pypa.io/en/stable/platforms/#android)! Set the [`platform` option](https://cibuildwheel.pypa.io/en/stable/options/#platform) to `android` on Linux or macOS to try it out! (#2349)
325
- - 🌟 Adds Pyodide 0.28, which builds 3.13 wheels (#2487)
326
- - ✨ Support for 32-bit `manylinux_2_28` (now a consistent default) and `manylinux_2_34` added (#2500)
327
- - 🛠 Improved summary, will also use markdown summary output on GHA (#2469)
328
- - 🛠 The riscv64 images now have a working default (as they are now part of pypy/manylinux), but are still experimental (and behind an `enable`) since you can't push them to PyPI yet (#2506)
329
- - 🛠 Fixed a typo in the 3.9 MUSL riscv64 identifier (`cp39-musllinux_ricv64` -> `cp39-musllinux_riscv64`) (#2490)
330
- - 🛠 Mistyping `--only` now shows the correct possibilities, and even suggests near matches on Python 3.14+ (#2499)
331
- - 🛠 Only support one output from the repair step on linux like other platforms; auditwheel fixed this over four years ago! (#2478)
332
- - 💼 We now use pattern matching extensively (#2434)
333
- - 📚 We now have platform maintainers for our special platforms and interpreters! (#2481)
334
-
335
- <!-- [[[end]]] (sum: loynkRqdzf) -->
332
+ <!-- [[[end]]] (sum: pVWd47S8cA) -->
336
333
 
337
334
  ---
338
335
 
@@ -29,14 +29,15 @@ While cibuildwheel itself requires a recent Python version to run (we support th
29
29
  | CPython 3.9 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | N/A |
30
30
  | CPython 3.10 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | N/A |
31
31
  | CPython 3.11 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | N/A |
32
- | CPython 3.12 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | ✅⁴ |
33
- | CPython 3.13³ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | ✅ | ✅ | N/A |
34
- | CPython 3.14 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | N/A |
32
+ | CPython 3.12 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | ✅⁴ |
33
+ | CPython 3.13³ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | ✅ | ✅ | ✅⁴ |
34
+ | CPython 3.14 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | | | N/A |
35
35
  | PyPy 3.8 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
36
36
  | PyPy 3.9 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
37
37
  | PyPy 3.10 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
38
38
  | PyPy 3.11 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
39
39
  | GraalPy 3.11 v24.2 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | N/A | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
40
+ | GraalPy 3.12 v25.0 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | N/A | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
40
41
 
41
42
  <sup>¹ PyPy & GraalPy are only supported for manylinux wheels.</sup><br>
42
43
  <sup>² Windows arm64 support is experimental.</sup><br>
@@ -58,8 +59,8 @@ Usage
58
59
 
59
60
  | | Linux | macOS | Windows | Linux ARM | macOS ARM | Windows ARM | Android | iOS |
60
61
  |-----------------|-------|-------|---------|-----------|-----------|-------------|---------|-----|
61
- | GitHub Actions | ✅ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅⁴ | ✅³ |
62
- | Azure Pipelines | ✅ | ✅ | ✅ | | ✅ | ✅² | ✅⁴ | ✅³ |
62
+ | GitHub Actions | ✅ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅⁴ | ✅³⁵ |
63
+ | Azure Pipelines | ✅ | ✅ | ✅ | | ✅ | ✅² | ✅⁴ | ✅³⁵ |
63
64
  | Travis CI | ✅ | | ✅ | ✅ | | | ✅⁴ | |
64
65
  | CircleCI | ✅ | ✅ | | ✅ | ✅ | | ✅⁴ | ✅³ |
65
66
  | Gitlab CI | ✅ | ✅ | ✅ | ✅¹ | ✅ | | ✅⁴ | ✅³ |
@@ -67,8 +68,10 @@ Usage
67
68
 
68
69
  <sup>¹ [Requires emulation](https://cibuildwheel.pypa.io/en/stable/faq/#emulation), distributed separately. Other services may also support Linux ARM through emulation or third-party build hosts, but these are not tested in our CI.</sup><br>
69
70
  <sup>² [Uses cross-compilation](https://cibuildwheel.pypa.io/en/stable/faq/#windows-arm64). It is not possible to test `arm64` on this CI platform.</sup><br>
70
- <sup>³ Requires a macOS runner; runs tests on the simulator for the runner's architecture.</sup><br>
71
+ <sup>³ Requires a macOS runner; runs tests on the simulator for the runner's architecture. </sup><br>
71
72
  <sup>⁴ Building for Android requires the runner to be Linux x86_64, macOS ARM64 or macOS x86_64. Testing has [additional requirements](https://cibuildwheel.pypa.io/en/stable/platforms/#android).</sup><br>
73
+ <sup>⁵ The `macos-15` and `macos-latest` images are [incompatible with cibuildwheel at this time](platforms/#ios-system-requirements)</sup><br> when building iOS wheels.
74
+
72
75
  <!--intro-end-->
73
76
 
74
77
  Example setup
@@ -88,7 +91,7 @@ jobs:
88
91
  runs-on: ${{ matrix.os }}
89
92
  strategy:
90
93
  matrix:
91
- os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, windows-11-arm, macos-13, macos-latest]
94
+ os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, windows-11-arm, macos-15-intel, macos-latest]
92
95
 
93
96
  steps:
94
97
  - uses: actions/checkout@v5
@@ -97,7 +100,7 @@ jobs:
97
100
  - uses: actions/setup-python@v5
98
101
 
99
102
  - name: Install cibuildwheel
100
- run: python -m pip install cibuildwheel==3.1.4
103
+ run: python -m pip install cibuildwheel==3.2.0
101
104
 
102
105
  - name: Build wheels
103
106
  run: python -m cibuildwheel --output-dir wheelhouse
@@ -227,6 +230,17 @@ Changelog
227
230
 
228
231
  <!-- [[[cog from readme_changelog import mini_changelog; print(mini_changelog()) ]]] -->
229
232
 
233
+ ### v3.2.0
234
+
235
+ _22 September 2025_
236
+
237
+ - ✨ Adds GraalPy v25 (Python 3.12) support (#2597)
238
+ - 🛠 Update to CPython 3.14.0rc3 (#2602)
239
+ - 🛠 Adds CPython 3.14.0 prerelease support for Android, and a number of improvements to Android builds (#2568, #2591)
240
+ - 🛠 Improvements to testing on Android, passing environment markers when installing the venv, and providing more debug output when build-verbosity is set (#2575)
241
+ - ⚠️ PyPy 3.10 was moved to `pypy-eol` in the `enable` option, as it is now end-of-life. (#2521)
242
+ - 📚 Docs improvements (#2574, #2601, #2598)
243
+
230
244
  ### v3.1.4
231
245
 
232
246
  _19 August 2025_
@@ -276,24 +290,7 @@ _24 July 2025_
276
290
  - 🐛 Fix a bug showing an incorrect wheel count at the end of execution, and misrepresenting test-only runs in the GitHub Action summary (#2512)
277
291
  - 📚 Docs fix (#2510)
278
292
 
279
- ### v3.1.0
280
-
281
- _23 July 2025_
282
-
283
-
284
- - 🌟 CPython 3.14 wheels are now built by default - without the `"cpython-prerelease"` `enable` set. It's time to build and upload these wheels to PyPI! This release includes CPython 3.14.0rc1, which is guaranteed to be ABI compatible with the final release. (#2507) Free-threading is no longer experimental in 3.14, so you have to skip it explicitly with `'cp31?t-*'` if you don't support it yet. (#2503)
285
- - 🌟 Adds the ability to [build wheels for Android](https://cibuildwheel.pypa.io/en/stable/platforms/#android)! Set the [`platform` option](https://cibuildwheel.pypa.io/en/stable/options/#platform) to `android` on Linux or macOS to try it out! (#2349)
286
- - 🌟 Adds Pyodide 0.28, which builds 3.13 wheels (#2487)
287
- - ✨ Support for 32-bit `manylinux_2_28` (now a consistent default) and `manylinux_2_34` added (#2500)
288
- - 🛠 Improved summary, will also use markdown summary output on GHA (#2469)
289
- - 🛠 The riscv64 images now have a working default (as they are now part of pypy/manylinux), but are still experimental (and behind an `enable`) since you can't push them to PyPI yet (#2506)
290
- - 🛠 Fixed a typo in the 3.9 MUSL riscv64 identifier (`cp39-musllinux_ricv64` -> `cp39-musllinux_riscv64`) (#2490)
291
- - 🛠 Mistyping `--only` now shows the correct possibilities, and even suggests near matches on Python 3.14+ (#2499)
292
- - 🛠 Only support one output from the repair step on linux like other platforms; auditwheel fixed this over four years ago! (#2478)
293
- - 💼 We now use pattern matching extensively (#2434)
294
- - 📚 We now have platform maintainers for our special platforms and interpreters! (#2481)
295
-
296
- <!-- [[[end]]] (sum: loynkRqdzf) -->
293
+ <!-- [[[end]]] (sum: pVWd47S8cA) -->
297
294
 
298
295
  ---
299
296
 
@@ -24,7 +24,7 @@ branding:
24
24
  runs:
25
25
  using: composite
26
26
  steps:
27
- - uses: actions/setup-python@v5
27
+ - uses: actions/setup-python@v6
28
28
  id: python
29
29
  with:
30
30
  python-version: "3.11 - 3.13"
@@ -32,7 +32,7 @@ jobs:
32
32
  pythonVersion: "3.11"
33
33
  testSelect: "native"
34
34
  ios_311:
35
- imageName: "macos-latest"
35
+ imageName: "macos-14" # See https://github.com/actions/runner-images/issues/12777
36
36
  pythonVersion: "3.11"
37
37
  testSelect: "ios"
38
38
  android_macos_311:
@@ -23,7 +23,7 @@ import textwrap
23
23
  import urllib.request
24
24
  import xml.dom.minidom
25
25
  from collections.abc import Iterable, Mapping, Sequence
26
- from datetime import datetime
26
+ from datetime import UTC, datetime
27
27
  from io import StringIO
28
28
  from pathlib import Path
29
29
  from typing import Any, Self, TextIO
@@ -77,7 +77,7 @@ class Project:
77
77
  self.notes = notes
78
78
  else:
79
79
  self.num_stars = 0
80
- self.pushed_at = datetime.utcnow()
80
+ self.pushed_at = datetime.now(UTC)
81
81
 
82
82
  name_len = len(self.name) + 4
83
83
  self.__class__.NAME = max(self.__class__.NAME, name_len)
@@ -124,7 +124,7 @@ class Project:
124
124
  return f"[{self.name}]: {self.url}"
125
125
 
126
126
  def info(self) -> str:
127
- days = (datetime.utcnow() - self.pushed_at).days
127
+ days = (datetime.now(UTC) - self.pushed_at).days
128
128
  return f"<!-- {self.name}: {self.num_stars}, last pushed {days} days ago -->"
129
129
 
130
130
 
@@ -2,6 +2,7 @@
2
2
 
3
3
 
4
4
  import os
5
+ import re
5
6
  import shutil
6
7
  import subprocess
7
8
  import sys
@@ -13,7 +14,7 @@ from urllib.parse import quote
13
14
 
14
15
  import click
15
16
 
16
- DIR = Path(__file__).parent.resolve()
17
+ DIR = Path(__file__).parent.parent.resolve()
17
18
 
18
19
 
19
20
  def shell(cmd: str, *, check: bool, **kwargs: object) -> subprocess.CompletedProcess[str]:
@@ -38,6 +39,29 @@ class CIService(typing.NamedTuple):
38
39
  name: str
39
40
  dst_config_path: str
40
41
  badge_md: str
42
+ config_file_transform: typing.Callable[[str], str] = lambda x: x # identity by default
43
+
44
+
45
+ def github_config_file_transform(content: str) -> str:
46
+ # one of the the github configs only builds on main, so we need to remove that restriction
47
+ # so our example build will run on the test branch.
48
+ #
49
+ # replace:
50
+ # """
51
+ # push:
52
+ # branches:
53
+ # - main
54
+ # """
55
+ # with:
56
+ # """
57
+ # push:
58
+ # """"
59
+ content = re.sub(
60
+ r"push:\n\s+branches:\n\s+- main",
61
+ "push:",
62
+ content,
63
+ )
64
+ return content
41
65
 
42
66
 
43
67
  services = [
@@ -54,7 +78,8 @@ services = [
54
78
  CIService(
55
79
  name="github",
56
80
  dst_config_path=".github/workflows/example.yml",
57
- badge_md="[![Build](https://github.com/pypa/cibuildwheel/workflows/Build/badge.svg?branch={branch})](https://github.com/pypa/cibuildwheel/actions)",
81
+ badge_md="[![Build](https://github.com/pypa/cibuildwheel/actions/workflows/example.yml/badge.svg?branch={branch})](https://github.com/pypa/cibuildwheel/actions?query=branch%3A{branch})",
82
+ config_file_transform=github_config_file_transform,
58
83
  ),
59
84
  CIService(
60
85
  name="travis-ci",
@@ -93,6 +118,8 @@ def run_example_ci_configs(config_files=None):
93
118
 
94
119
  if len(config_files) == 0:
95
120
  config_files = Path("examples").glob("*-minimal.yml")
121
+ else:
122
+ config_files = [Path(f) for f in config_files]
96
123
 
97
124
  # check each CI service has at most 1 config file
98
125
  configs_by_service = set()
@@ -125,12 +152,15 @@ def run_example_ci_configs(config_files=None):
125
152
  dst_config_file = example_project / service.dst_config_path
126
153
 
127
154
  dst_config_file.parent.mkdir(parents=True, exist_ok=True)
128
- shutil.copyfile(config_file, dst_config_file)
155
+
156
+ contents = config_file.read_text(encoding="utf8")
157
+ contents = service.config_file_transform(contents)
158
+ dst_config_file.write_text(contents, encoding="utf8")
129
159
 
130
160
  subprocess.run(["git", "add", example_project], check=True)
131
161
  message = textwrap.dedent(
132
162
  f"""\
133
- Test example minimal configs
163
+ Test example CI configs
134
164
 
135
165
  Testing files: {[str(f) for f in config_files]}
136
166
  Generated from branch: {previous_branch}