diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index f3ae2f604..5e3829760 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -37,7 +37,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
- os: [ubuntu-latest, windows-latest, macos-13, macos-14]
+ os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-13, macos-14]
python_version: ['3.13']
include:
- os: ubuntu-latest
@@ -89,7 +89,7 @@ jobs:
with:
package-dir: sample_proj
output-dir: wheelhouse_only
- only: cp312-${{ runner.os == 'Linux' && 'manylinux_x86_64' || (runner.os == 'Windows' && 'win_amd64' || 'macosx_x86_64') }}
+ only: cp312-${{ runner.os == 'Linux' && (runner.arch == 'ARM64' && 'manylinux_aarch64' || 'manylinux_x86_64') || (runner.os == 'Windows' && 'win_amd64' || 'macosx_x86_64') }}
- name: Create custom configuration file
shell: bash
@@ -124,7 +124,7 @@ jobs:
- name: Test cibuildwheel
run: |
- uv run bin/run_tests.py --run-podman
+ uv run bin/run_tests.py ${{ (runner.os == 'Linux' && runner.arch == 'X64') && '--run-podman' || '' }}
emulated-archs:
name: Get qemu emulated architectures
diff --git a/.github/workflows/update-dependencies.yml b/.github/workflows/update-dependencies.yml
index 8b4a09998..465056c5d 100644
--- a/.github/workflows/update-dependencies.yml
+++ b/.github/workflows/update-dependencies.yml
@@ -33,8 +33,6 @@ jobs:
- uses: actions/checkout@v4
- uses: wntrblm/nox@2024.10.09
- with:
- python-versions: "3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13"
- name: "Run update: dependencies"
run: nox --force-color -s update_constraints
diff --git a/README.md b/README.md
index 986ef5537..705089d80 100644
--- a/README.md
+++ b/README.md
@@ -38,6 +38,7 @@ While cibuildwheel itself requires a recent Python version to run (we support th
| PyPy 3.8 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A |
| PyPy 3.9 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A |
| PyPy 3.10 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A |
+| PyPy 3.11 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A |
¹ PyPy is only supported for manylinux wheels.
² Windows arm64 support is experimental.
@@ -59,7 +60,7 @@ Usage
| | Linux | macOS | Windows | Linux ARM | macOS ARM | Windows ARM |
|-----------------|-------|-------|---------|-----------|-----------|-------------|
-| GitHub Actions | ✅ | ✅ | ✅ | ✅¹ | ✅ | ✅² |
+| GitHub Actions | ✅ | ✅ | ✅ | ✅ | ✅ | ✅² |
| Azure Pipelines | ✅ | ✅ | ✅ | | ✅ | ✅² |
| Travis CI | ✅ | | ✅ | ✅ | | |
| AppVeyor | ✅ | ✅ | ✅ | | ✅ | ✅² |
@@ -88,7 +89,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
- os: [ubuntu-latest, windows-latest, macos-13, macos-latest]
+ os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-13, macos-latest]
steps:
- uses: actions/checkout@v4
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index fa720d84a..6541244ca 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -19,7 +19,7 @@ jobs:
python ./bin/run_tests.py
- job: macos_38
- pool: {vmImage: 'macOS-12'}
+ pool: {vmImage: 'macOS-13'}
steps:
- task: UsePythonVersion@0
inputs:
diff --git a/bin/update_docker.py b/bin/update_docker.py
index e090f3f0f..f70b98934 100755
--- a/bin/update_docker.py
+++ b/bin/update_docker.py
@@ -55,7 +55,7 @@ class Image:
Image("manylinux_2_28", "pypy_x86_64", "quay.io/pypa/manylinux_2_28_x86_64", None),
Image("manylinux_2_28", "pypy_aarch64", "quay.io/pypa/manylinux_2_28_aarch64", None),
# manylinux_2_31 images
- Image("manylinux_2_31", "armv7l", "ghcr.io/mayeut/manylinux_2_31", None),
+ Image("manylinux_2_31", "armv7l", "quay.io/pypa/manylinux_2_31_armv7l", None),
# musllinux_1_1 images
Image("musllinux_1_1", "x86_64", "quay.io/pypa/musllinux_1_1_x86_64", None),
Image("musllinux_1_1", "i686", "quay.io/pypa/musllinux_1_1_i686", None),
diff --git a/cibuildwheel/resources/build-platforms.toml b/cibuildwheel/resources/build-platforms.toml
index 2c2fbede9..b2a83445c 100644
--- a/cibuildwheel/resources/build-platforms.toml
+++ b/cibuildwheel/resources/build-platforms.toml
@@ -22,6 +22,7 @@ python_configurations = [
{ identifier = "pp38-manylinux_x86_64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" },
{ identifier = "pp39-manylinux_x86_64", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" },
{ identifier = "pp310-manylinux_x86_64", version = "3.10", path_str = "/opt/python/pp310-pypy310_pp73" },
+ { identifier = "pp311-manylinux_x86_64", version = "3.11", path_str = "/opt/python/pp311-pypy311_pp73" },
{ identifier = "cp36-manylinux_aarch64", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
{ identifier = "cp37-manylinux_aarch64", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
{ identifier = "cp38-manylinux_aarch64", version = "3.8", path_str = "/opt/python/cp38-cp38" },
@@ -62,10 +63,12 @@ python_configurations = [
{ identifier = "pp38-manylinux_aarch64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" },
{ identifier = "pp39-manylinux_aarch64", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" },
{ identifier = "pp310-manylinux_aarch64", version = "3.10", path_str = "/opt/python/pp310-pypy310_pp73" },
+ { identifier = "pp311-manylinux_aarch64", version = "3.11", path_str = "/opt/python/pp311-pypy311_pp73" },
{ identifier = "pp37-manylinux_i686", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" },
{ identifier = "pp38-manylinux_i686", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" },
{ identifier = "pp39-manylinux_i686", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" },
{ identifier = "pp310-manylinux_i686", version = "3.10", path_str = "/opt/python/pp310-pypy310_pp73" },
+ { identifier = "pp311-manylinux_i686", version = "3.11", path_str = "/opt/python/pp311-pypy311_pp73" },
{ identifier = "cp36-musllinux_x86_64", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
{ identifier = "cp37-musllinux_x86_64", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
{ identifier = "cp38-musllinux_x86_64", version = "3.8", path_str = "/opt/python/cp38-cp38" },
@@ -138,22 +141,24 @@ python_configurations = [
{ identifier = "cp311-macosx_x86_64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.9/python-3.11.9-macos11.pkg" },
{ identifier = "cp311-macosx_arm64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.9/python-3.11.9-macos11.pkg" },
{ identifier = "cp311-macosx_universal2", version = "3.11", url = "https://www.python.org/ftp/python/3.11.9/python-3.11.9-macos11.pkg" },
- { identifier = "cp312-macosx_x86_64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.7/python-3.12.7-macos11.pkg" },
- { identifier = "cp312-macosx_arm64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.7/python-3.12.7-macos11.pkg" },
- { identifier = "cp312-macosx_universal2", version = "3.12", url = "https://www.python.org/ftp/python/3.12.7/python-3.12.7-macos11.pkg" },
- { identifier = "cp313-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg" },
- { identifier = "cp313-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg" },
- { identifier = "cp313-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg" },
- { identifier = "cp313t-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg" },
- { identifier = "cp313t-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg" },
- { identifier = "cp313t-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg" },
+ { identifier = "cp312-macosx_x86_64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.9/python-3.12.9-macos11.pkg" },
+ { identifier = "cp312-macosx_arm64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.9/python-3.12.9-macos11.pkg" },
+ { identifier = "cp312-macosx_universal2", version = "3.12", url = "https://www.python.org/ftp/python/3.12.9/python-3.12.9-macos11.pkg" },
+ { identifier = "cp313-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.2/python-3.13.2-macos11.pkg" },
+ { identifier = "cp313-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.2/python-3.13.2-macos11.pkg" },
+ { identifier = "cp313-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.2/python-3.13.2-macos11.pkg" },
+ { identifier = "cp313t-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.2/python-3.13.2-macos11.pkg" },
+ { identifier = "cp313t-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.2/python-3.13.2-macos11.pkg" },
+ { identifier = "cp313t-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.2/python-3.13.2-macos11.pkg" },
{ identifier = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-osx64.tar.bz2" },
{ identifier = "pp38-macosx_x86_64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_x86_64.tar.bz2" },
{ identifier = "pp38-macosx_arm64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_arm64.tar.bz2" },
{ identifier = "pp39-macosx_x86_64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-macos_x86_64.tar.bz2" },
{ identifier = "pp39-macosx_arm64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-macos_arm64.tar.bz2" },
- { identifier = "pp310-macosx_x86_64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.17-macos_x86_64.tar.bz2" },
- { identifier = "pp310-macosx_arm64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.17-macos_arm64.tar.bz2" },
+ { identifier = "pp310-macosx_x86_64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.18-macos_x86_64.tar.bz2" },
+ { identifier = "pp310-macosx_arm64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.18-macos_arm64.tar.bz2" },
+ { identifier = "pp311-macosx_x86_64", version = "3.11", url = "https://downloads.python.org/pypy/pypy3.11-v7.3.18-macos_x86_64.tar.bz2" },
+ { identifier = "pp311-macosx_arm64", version = "3.11", url = "https://downloads.python.org/pypy/pypy3.11-v7.3.18-macos_arm64.tar.bz2" },
]
[windows]
@@ -170,25 +175,26 @@ python_configurations = [
{ identifier = "cp310-win_amd64", version = "3.10.11", arch = "64" },
{ identifier = "cp311-win32", version = "3.11.9", arch = "32" },
{ identifier = "cp311-win_amd64", version = "3.11.9", arch = "64" },
- { identifier = "cp312-win32", version = "3.12.7", arch = "32" },
- { identifier = "cp312-win_amd64", version = "3.12.7", arch = "64" },
- { identifier = "cp313-win32", version = "3.13.0", arch = "32" },
- { identifier = "cp313t-win32", version = "3.13.0", arch = "32" },
- { identifier = "cp313-win_amd64", version = "3.13.0", arch = "64" },
- { identifier = "cp313t-win_amd64", version = "3.13.0", arch = "64" },
+ { identifier = "cp312-win32", version = "3.12.9", arch = "32" },
+ { identifier = "cp312-win_amd64", version = "3.12.9", arch = "64" },
+ { identifier = "cp313-win32", version = "3.13.2", arch = "32" },
+ { identifier = "cp313t-win32", version = "3.13.2", arch = "32" },
+ { identifier = "cp313-win_amd64", version = "3.13.2", arch = "64" },
+ { identifier = "cp313t-win_amd64", version = "3.13.2", arch = "64" },
{ identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" },
{ identifier = "cp310-win_arm64", version = "3.10.11", arch = "ARM64" },
{ identifier = "cp311-win_arm64", version = "3.11.9", arch = "ARM64" },
- { identifier = "cp312-win_arm64", version = "3.12.7", arch = "ARM64" },
- { identifier = "cp313-win_arm64", version = "3.13.0", arch = "ARM64" },
- { identifier = "cp313t-win_arm64", version = "3.13.0", arch = "ARM64" },
+ { identifier = "cp312-win_arm64", version = "3.12.9", arch = "ARM64" },
+ { identifier = "cp313-win_arm64", version = "3.13.2", arch = "ARM64" },
+ { identifier = "cp313t-win_arm64", version = "3.13.2", arch = "ARM64" },
{ identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-win64.zip" },
{ identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-win64.zip" },
{ identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-win64.zip" },
- { identifier = "pp310-win_amd64", version = "3.10", arch = "64", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.17-win64.zip" },
+ { identifier = "pp310-win_amd64", version = "3.10", arch = "64", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.18-win64.zip" },
+ { identifier = "pp311-win_amd64", version = "3.11", arch = "64", url = "https://downloads.python.org/pypy/pypy3.11-v7.3.18-win64.zip" },
]
[pyodide]
python_configurations = [
- { identifier = "cp312-pyodide_wasm32", version = "3.12", pyodide_version = "0.26.4", pyodide_build_version = "0.29.0", emscripten_version = "3.1.58", node_version = "v20" },
+ { identifier = "cp312-pyodide_wasm32", version = "3.12", pyodide_version = "0.27.0", pyodide_build_version = "0.29.2", emscripten_version = "3.1.58", node_version = "v20" },
]
diff --git a/cibuildwheel/resources/constraints-pyodide312.txt b/cibuildwheel/resources/constraints-pyodide312.txt
index a0fcc3bee..fec783780 100644
--- a/cibuildwheel/resources/constraints-pyodide312.txt
+++ b/cibuildwheel/resources/constraints-pyodide312.txt
@@ -2,7 +2,7 @@
# nox -s update_constraints
annotated-types==0.7.0
# via pydantic
-anyio==4.6.2.post1
+anyio==4.8.0
# via httpx
auditwheel-emscripten==0.0.16
# via pyodide-build
@@ -10,26 +10,26 @@ build==1.2.2.post1
# via
# -r .nox/update_constraints/tmp/constraints-pyodide.in
# pyodide-build
-certifi==2024.8.30
+certifi==2025.1.31
# via
# httpcore
# httpx
# requests
-charset-normalizer==3.4.0
+charset-normalizer==3.4.1
# via requests
-click==8.1.7
+click==8.1.8
# via typer
-cmake==3.31.0.1
+cmake==3.31.4
# via pyodide-build
distlib==0.3.9
# via virtualenv
-filelock==3.16.1
+filelock==3.17.0
# via virtualenv
h11==0.14.0
# via httpcore
httpcore==1.0.7
# via httpx
-httpx==0.27.2
+httpx==0.28.1
# via unearth
idna==3.10
# via
@@ -48,19 +48,19 @@ packaging==24.2
# build
# pyodide-build
# unearth
-pip==24.3.1
+pip==25.0.1
# via -r .nox/update_constraints/tmp/constraints-pyodide.in
platformdirs==4.3.6
# via virtualenv
-pydantic==2.10.0
+pydantic==2.10.6
# via
# pyodide-build
# pyodide-lock
-pydantic-core==2.27.0
+pydantic-core==2.27.2
# via pydantic
-pygments==2.18.0
+pygments==2.19.1
# via rich
-pyodide-build==0.29.0
+pyodide-build==0.29.2
# via -r .nox/update_constraints/tmp/constraints-pyodide.in
pyodide-cli==0.2.4
# via
@@ -79,35 +79,34 @@ rich==13.9.4
# pyodide-build
# pyodide-cli
# typer
-ruamel-yaml==0.18.6
+ruamel-yaml==0.18.10
# via pyodide-build
ruamel-yaml-clib==0.2.12
# via ruamel-yaml
shellingham==1.5.4
# via typer
sniffio==1.3.1
- # via
- # anyio
- # httpx
-typer==0.13.1
+ # via anyio
+typer==0.15.1
# via
# auditwheel-emscripten
# pyodide-build
# pyodide-cli
typing-extensions==4.12.2
# via
+ # anyio
# pydantic
# pydantic-core
# typer
unearth==0.17.2
# via pyodide-build
-urllib3==2.2.3
+urllib3==2.3.0
# via requests
-virtualenv==20.27.1
+virtualenv==20.29.2
# via
# build
# pyodide-build
-wheel==0.45.0
+wheel==0.45.1
# via
# auditwheel-emscripten
# pyodide-build
diff --git a/cibuildwheel/resources/constraints-python310.txt b/cibuildwheel/resources/constraints-python310.txt
index 04f6ef2dc..a65ea62b1 100644
--- a/cibuildwheel/resources/constraints-python310.txt
+++ b/cibuildwheel/resources/constraints-python310.txt
@@ -4,13 +4,13 @@ altgraph==0.17.4
# via macholib
build==1.2.2.post1
# via -r cibuildwheel/resources/constraints.in
-delocate==0.12.0
+delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in
distlib==0.3.9
# via virtualenv
-filelock==3.16.1
+filelock==3.17.0
# via virtualenv
-importlib-metadata==8.5.0
+importlib-metadata==8.6.1
# via build
macholib==1.16.3
# via delocate
@@ -18,17 +18,17 @@ packaging==24.2
# via
# build
# delocate
-pip==24.3.1
+pip==25.0.1
# via -r cibuildwheel/resources/constraints.in
platformdirs==4.3.6
# via virtualenv
pyproject-hooks==1.2.0
# via build
-tomli==2.1.0
+tomli==2.2.1
# via build
typing-extensions==4.12.2
# via delocate
-virtualenv==20.27.1
+virtualenv==20.29.2
# via -r cibuildwheel/resources/constraints.in
zipp==3.21.0
# via importlib-metadata
diff --git a/cibuildwheel/resources/constraints-python311.txt b/cibuildwheel/resources/constraints-python311.txt
index 6b9c935ec..ff8b1b1f7 100644
--- a/cibuildwheel/resources/constraints-python311.txt
+++ b/cibuildwheel/resources/constraints-python311.txt
@@ -4,11 +4,11 @@ altgraph==0.17.4
# via macholib
build==1.2.2.post1
# via -r cibuildwheel/resources/constraints.in
-delocate==0.12.0
+delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in
distlib==0.3.9
# via virtualenv
-filelock==3.16.1
+filelock==3.17.0
# via virtualenv
macholib==1.16.3
# via delocate
@@ -16,7 +16,7 @@ packaging==24.2
# via
# build
# delocate
-pip==24.3.1
+pip==25.0.1
# via -r cibuildwheel/resources/constraints.in
platformdirs==4.3.6
# via virtualenv
@@ -24,5 +24,5 @@ pyproject-hooks==1.2.0
# via build
typing-extensions==4.12.2
# via delocate
-virtualenv==20.27.1
+virtualenv==20.29.2
# via -r cibuildwheel/resources/constraints.in
diff --git a/cibuildwheel/resources/constraints-python312.txt b/cibuildwheel/resources/constraints-python312.txt
index 6b9c935ec..ff8b1b1f7 100644
--- a/cibuildwheel/resources/constraints-python312.txt
+++ b/cibuildwheel/resources/constraints-python312.txt
@@ -4,11 +4,11 @@ altgraph==0.17.4
# via macholib
build==1.2.2.post1
# via -r cibuildwheel/resources/constraints.in
-delocate==0.12.0
+delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in
distlib==0.3.9
# via virtualenv
-filelock==3.16.1
+filelock==3.17.0
# via virtualenv
macholib==1.16.3
# via delocate
@@ -16,7 +16,7 @@ packaging==24.2
# via
# build
# delocate
-pip==24.3.1
+pip==25.0.1
# via -r cibuildwheel/resources/constraints.in
platformdirs==4.3.6
# via virtualenv
@@ -24,5 +24,5 @@ pyproject-hooks==1.2.0
# via build
typing-extensions==4.12.2
# via delocate
-virtualenv==20.27.1
+virtualenv==20.29.2
# via -r cibuildwheel/resources/constraints.in
diff --git a/cibuildwheel/resources/constraints-python313.txt b/cibuildwheel/resources/constraints-python313.txt
index 6b9c935ec..ff8b1b1f7 100644
--- a/cibuildwheel/resources/constraints-python313.txt
+++ b/cibuildwheel/resources/constraints-python313.txt
@@ -4,11 +4,11 @@ altgraph==0.17.4
# via macholib
build==1.2.2.post1
# via -r cibuildwheel/resources/constraints.in
-delocate==0.12.0
+delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in
distlib==0.3.9
# via virtualenv
-filelock==3.16.1
+filelock==3.17.0
# via virtualenv
macholib==1.16.3
# via delocate
@@ -16,7 +16,7 @@ packaging==24.2
# via
# build
# delocate
-pip==24.3.1
+pip==25.0.1
# via -r cibuildwheel/resources/constraints.in
platformdirs==4.3.6
# via virtualenv
@@ -24,5 +24,5 @@ pyproject-hooks==1.2.0
# via build
typing-extensions==4.12.2
# via delocate
-virtualenv==20.27.1
+virtualenv==20.29.2
# via -r cibuildwheel/resources/constraints.in
diff --git a/cibuildwheel/resources/constraints-python38.txt b/cibuildwheel/resources/constraints-python38.txt
index 95b03162c..c5892095e 100644
--- a/cibuildwheel/resources/constraints-python38.txt
+++ b/cibuildwheel/resources/constraints-python38.txt
@@ -18,17 +18,17 @@ packaging==24.2
# via
# build
# delocate
-pip==24.3.1
+pip==25.0.1
# via -r cibuildwheel/resources/constraints.in
platformdirs==4.3.6
# via virtualenv
pyproject-hooks==1.2.0
# via build
-tomli==2.1.0
+tomli==2.2.1
# via build
typing-extensions==4.12.2
# via delocate
-virtualenv==20.27.1
+virtualenv==20.29.2
# via -r cibuildwheel/resources/constraints.in
zipp==3.20.2
# via importlib-metadata
diff --git a/cibuildwheel/resources/constraints-python39.txt b/cibuildwheel/resources/constraints-python39.txt
index 04f6ef2dc..a65ea62b1 100644
--- a/cibuildwheel/resources/constraints-python39.txt
+++ b/cibuildwheel/resources/constraints-python39.txt
@@ -4,13 +4,13 @@ altgraph==0.17.4
# via macholib
build==1.2.2.post1
# via -r cibuildwheel/resources/constraints.in
-delocate==0.12.0
+delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in
distlib==0.3.9
# via virtualenv
-filelock==3.16.1
+filelock==3.17.0
# via virtualenv
-importlib-metadata==8.5.0
+importlib-metadata==8.6.1
# via build
macholib==1.16.3
# via delocate
@@ -18,17 +18,17 @@ packaging==24.2
# via
# build
# delocate
-pip==24.3.1
+pip==25.0.1
# via -r cibuildwheel/resources/constraints.in
platformdirs==4.3.6
# via virtualenv
pyproject-hooks==1.2.0
# via build
-tomli==2.1.0
+tomli==2.2.1
# via build
typing-extensions==4.12.2
# via delocate
-virtualenv==20.27.1
+virtualenv==20.29.2
# via -r cibuildwheel/resources/constraints.in
zipp==3.21.0
# via importlib-metadata
diff --git a/cibuildwheel/resources/constraints.txt b/cibuildwheel/resources/constraints.txt
index 6b9c935ec..ff8b1b1f7 100644
--- a/cibuildwheel/resources/constraints.txt
+++ b/cibuildwheel/resources/constraints.txt
@@ -4,11 +4,11 @@ altgraph==0.17.4
# via macholib
build==1.2.2.post1
# via -r cibuildwheel/resources/constraints.in
-delocate==0.12.0
+delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in
distlib==0.3.9
# via virtualenv
-filelock==3.16.1
+filelock==3.17.0
# via virtualenv
macholib==1.16.3
# via delocate
@@ -16,7 +16,7 @@ packaging==24.2
# via
# build
# delocate
-pip==24.3.1
+pip==25.0.1
# via -r cibuildwheel/resources/constraints.in
platformdirs==4.3.6
# via virtualenv
@@ -24,5 +24,5 @@ pyproject-hooks==1.2.0
# via build
typing-extensions==4.12.2
# via delocate
-virtualenv==20.27.1
+virtualenv==20.29.2
# via -r cibuildwheel/resources/constraints.in
diff --git a/cibuildwheel/resources/nodejs.toml b/cibuildwheel/resources/nodejs.toml
index 6d3f3f8c2..91a71f773 100644
--- a/cibuildwheel/resources/nodejs.toml
+++ b/cibuildwheel/resources/nodejs.toml
@@ -1,3 +1,3 @@
url = "https://nodejs.org/dist/"
-v22 = "v22.11.0"
-v20 = "v20.18.0"
+v22 = "v22.14.0"
+v20 = "v20.18.3"
diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg
index 75b031913..e02006975 100644
--- a/cibuildwheel/resources/pinned_docker_images.cfg
+++ b/cibuildwheel/resources/pinned_docker_images.cfg
@@ -1,58 +1,58 @@
[x86_64]
manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-04-29-76807b8
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
-manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.11.16-1
+manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.02.23-1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463
-manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.11.16-1
+manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.02.23-1
musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024.10.26-1
-musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024.11.16-1
+musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2025.02.23-1
[i686]
manylinux1 = quay.io/pypa/manylinux1_i686:2024-04-29-76807b8
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
-manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.11.16-1
+manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.02.23-1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463
musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024.10.26-1
-musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024.11.16-1
+musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2025.02.23-1
[pypy_x86_64]
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
-manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.11.16-1
+manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.02.23-1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463
-manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.11.16-1
+manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.02.23-1
[pypy_i686]
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
-manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.11.16-1
+manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.02.23-1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463
[aarch64]
-manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.11.16-1
+manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.02.23-1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
-manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.11.16-1
+manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.02.23-1
musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024.10.26-1
-musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024.11.16-1
+musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2025.02.23-1
[ppc64le]
-manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024.11.16-1
+manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2025.02.23-1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463
-manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024.11.16-1
+manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2025.02.23-1
musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024.10.26-1
-musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024.11.16-1
+musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2025.02.23-1
[s390x]
-manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024.11.16-1
+manylinux2014 = quay.io/pypa/manylinux2014_s390x:2025.02.23-1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463
-manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024.11.16-1
+manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2025.02.23-1
musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024.10.26-1
-musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024.11.16-1
+musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2025.02.23-1
[pypy_aarch64]
-manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.11.16-1
+manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.02.23-1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
-manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.11.16-1
+manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.02.23-1
[armv7l]
-manylinux_2_31 = ghcr.io/mayeut/manylinux_2_31:2024.11.16-1
-musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2024.11.16-1
+manylinux_2_31 = quay.io/pypa/manylinux_2_31_armv7l:2025.02.23-1
+musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2025.02.23-1
diff --git a/cibuildwheel/resources/virtualenv.toml b/cibuildwheel/resources/virtualenv.toml
index 2a5981d3a..cb13b37a9 100644
--- a/cibuildwheel/resources/virtualenv.toml
+++ b/cibuildwheel/resources/virtualenv.toml
@@ -1,2 +1,2 @@
py36 = { version = "20.21.1", url = "https://github.com/pypa/get-virtualenv/blob/20.21.1/public/virtualenv.pyz?raw=true" }
-default = { version = "20.27.1", url = "https://github.com/pypa/get-virtualenv/blob/20.27.1/public/virtualenv.pyz?raw=true" }
+default = { version = "20.29.1", url = "https://github.com/pypa/get-virtualenv/blob/20.29.1/public/virtualenv.pyz?raw=true" }
diff --git a/docs/options.md b/docs/options.md
index 327bfe1f8..2856d62b9 100644
--- a/docs/options.md
+++ b/docs/options.md
@@ -302,6 +302,7 @@ When setting the options, you can use shell-style globbing syntax, as per [fnmat
| PyPy3.8 v7.3 | pp38-macosx_x86_64
pp38-macosx_arm64 | pp38-win_amd64 | pp38-manylinux_x86_64
pp38-manylinux_i686 | pp38-manylinux_aarch64 |
| PyPy3.9 v7.3 | pp39-macosx_x86_64
pp39-macosx_arm64 | pp39-win_amd64 | pp39-manylinux_x86_64
pp39-manylinux_i686 | pp39-manylinux_aarch64 |
| PyPy3.10 v7.3 | pp310-macosx_x86_64
pp310-macosx_arm64 | pp310-win_amd64 | pp310-manylinux_x86_64
pp310-manylinux_i686 | pp310-manylinux_aarch64 |
+| PyPy3.11 v7.3 | pp311-macosx_x86_64
pp311-macosx_arm64 | pp311-win_amd64 | pp311-manylinux_x86_64
pp311-manylinux_i686 | pp311-manylinux_aarch64 |
The list of supported and currently selected build identifiers can also be retrieved by passing the `--print-build-identifiers` flag to cibuildwheel.
The format is `python_tag-platform_tag`, with tags similar to those in [PEP 425](https://www.python.org/dev/peps/pep-0425/#details).
@@ -1188,23 +1189,23 @@ Platform-specific environment variables are also available:
The available options are:
-| Option | Default | Future default* |
-|-----------------------------------|----------------------------------------------------------------------------------------------|-----------------------------------------------------------------|
-| CIBW_MANYLINUX_X86_64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_x86_64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_x86_64) |
-| CIBW_MANYLINUX_I686_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_i686) | |
-| CIBW_MANYLINUX_PYPY_X86_64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_x86_64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_x86_64) |
-| CIBW_MANYLINUX_AARCH64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_aarch64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_aarch64) |
-| CIBW_MANYLINUX_PPC64LE_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_ppc64le) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_ppc64le) |
-| CIBW_MANYLINUX_S390X_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_s390x) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_s390x) |
-| CIBW_MANYLINUX_ARMV7L_IMAGE | [`manylinux_2_31`](https://github.com/mayeut/manylinux-ubuntu/pkgs/container/manylinux_2_31) | |
-| CIBW_MANYLINUX_PYPY_AARCH64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_aarch64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_aarch64) |
-| CIBW_MANYLINUX_PYPY_I686_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_i686) | |
-| CIBW_MUSLLINUX_X86_64_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_x86_64) | |
-| CIBW_MUSLLINUX_I686_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_i686) | |
-| CIBW_MUSLLINUX_AARCH64_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_aarch64) | |
-| CIBW_MUSLLINUX_PPC64LE_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_ppc64le) | |
-| CIBW_MUSLLINUX_S390X_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_s390x) | |
-| CIBW_MUSLLINUX_ARMV7L_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_armv7l) | |
+| Option | Default | Future default* |
+|-----------------------------------|----------------------------------------------------------------|-----------------------------------------------------------------|
+| CIBW_MANYLINUX_X86_64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_x86_64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_x86_64) |
+| CIBW_MANYLINUX_I686_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_i686) | |
+| CIBW_MANYLINUX_PYPY_X86_64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_x86_64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_x86_64) |
+| CIBW_MANYLINUX_AARCH64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_aarch64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_aarch64) |
+| CIBW_MANYLINUX_PPC64LE_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_ppc64le) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_ppc64le) |
+| CIBW_MANYLINUX_S390X_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_s390x) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_s390x) |
+| CIBW_MANYLINUX_ARMV7L_IMAGE | [`manylinux_2_31`](https://quay.io/pypa/manylinux_2_31_armv7l) | |
+| CIBW_MANYLINUX_PYPY_AARCH64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_aarch64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_aarch64) |
+| CIBW_MANYLINUX_PYPY_I686_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_i686) | |
+| CIBW_MUSLLINUX_X86_64_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_x86_64) | |
+| CIBW_MUSLLINUX_I686_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_i686) | |
+| CIBW_MUSLLINUX_AARCH64_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_aarch64) | |
+| CIBW_MUSLLINUX_PPC64LE_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_ppc64le) | |
+| CIBW_MUSLLINUX_S390X_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_s390x) | |
+| CIBW_MUSLLINUX_ARMV7L_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_armv7l) | |
* The default is scheduled to change in a cibuildwheel release on or after 6th May 2025 - if you don't want the new default, you should set the value to `manylinux2014`.
diff --git a/examples/azure-pipelines-minimal.yml b/examples/azure-pipelines-minimal.yml
index dfe3ec1ef..11476c562 100644
--- a/examples/azure-pipelines-minimal.yml
+++ b/examples/azure-pipelines-minimal.yml
@@ -14,7 +14,7 @@ jobs:
inputs: {pathtoPublish: 'wheelhouse'}
- job: macos
- pool: {vmImage: 'macOS-12'}
+ pool: {vmImage: 'macOS-13'}
steps:
- task: UsePythonVersion@0
- bash: |
diff --git a/examples/github-deploy.yml b/examples/github-deploy.yml
index 23cf6cea2..433adf5b3 100644
--- a/examples/github-deploy.yml
+++ b/examples/github-deploy.yml
@@ -17,7 +17,7 @@ jobs:
strategy:
matrix:
# macos-13 is an intel runner, macos-14 is apple silicon
- os: [ubuntu-latest, windows-latest, macos-13, macos-14]
+ os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-13, macos-14]
steps:
- uses: actions/checkout@v4
diff --git a/examples/github-minimal.yml b/examples/github-minimal.yml
index b83d8210c..d857b6448 100644
--- a/examples/github-minimal.yml
+++ b/examples/github-minimal.yml
@@ -9,7 +9,7 @@ jobs:
strategy:
matrix:
# macos-13 is an intel runner, macos-14 is apple silicon
- os: [ubuntu-latest, windows-latest, macos-13, macos-14]
+ os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-13, macos-14]
steps:
- uses: actions/checkout@v4
diff --git a/examples/github-with-qemu.yml b/examples/github-with-qemu.yml
index 390b872ee..ed4836a9c 100644
--- a/examples/github-with-qemu.yml
+++ b/examples/github-with-qemu.yml
@@ -9,13 +9,13 @@ jobs:
strategy:
matrix:
# macos-13 is an intel runner, macos-14 is apple silicon
- os: [ubuntu-latest, windows-latest, macos-13, macos-14]
+ os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-13, macos-14]
steps:
- uses: actions/checkout@v4
- name: Set up QEMU
- if: runner.os == 'Linux'
+ if: runner.os == 'Linux' && runner.arch == 'X64'
uses: docker/setup-qemu-action@v3
with:
platforms: all
@@ -23,9 +23,13 @@ jobs:
- name: Build wheels
uses: pypa/cibuildwheel@v2.22.0
env:
- # configure cibuildwheel to build native archs ('auto'), and some
- # emulated ones
- CIBW_ARCHS_LINUX: auto aarch64 ppc64le s390x
+ # configure cibuildwheel on Linux to build native archs ('auto'),
+ # and to split the remaining architectures between the x86_64 and
+ # ARM runners
+ # armv7l can be built without QEMU on GitHub Actions ARM runners but that's
+ # not the case on all ARM64 hardware hence 'auto armv7l' for native archs
+ # on the GHA ARM64 runner
+ CIBW_ARCHS_LINUX: ${{ runner.arch == 'X64' && 'auto ppc64le s390x' || 'auto armv7l' }}
- uses: actions/upload-artifact@v4
with:
diff --git a/test/utils.py b/test/utils.py
index aa23638d6..51fb8ce88 100644
--- a/test/utils.py
+++ b/test/utils.py
@@ -210,6 +210,7 @@ def expected_wheels(
"pp38-pypy38_pp73",
"pp39-pypy39_pp73",
"pp310-pypy310_pp73",
+ "pp311-pypy311_pp73",
]
if platform == "macos" and machine_arch == "arm64":
@@ -225,6 +226,7 @@ def expected_wheels(
"pp38-pypy38_pp73",
"pp39-pypy39_pp73",
"pp310-pypy310_pp73",
+ "pp311-pypy311_pp73",
]
if single_python:
diff --git a/unit_test/oci_container_test.py b/unit_test/oci_container_test.py
index 11d991d11..7c8e8456e 100644
--- a/unit_test/oci_container_test.py
+++ b/unit_test/oci_container_test.py
@@ -8,6 +8,7 @@
import subprocess
import sys
import textwrap
+import time
from contextlib import nullcontext
from pathlib import Path, PurePath, PurePosixPath
@@ -138,14 +139,28 @@ def test_cwd(container_engine):
assert container.call(["pwd"], capture_output=True, cwd="/opt") == "/opt\n"
-@pytest.mark.skipif(
- pm == "s390x" and detect_ci_provider() == CIProvider.travis_ci,
- reason="test is flaky on this platform, see https://github.com/pypa/cibuildwheel/pull/1961#issuecomment-2334678966",
-)
def test_container_removed(container_engine):
+ # test is flaky on some platforms, implement retry for 5 second
+ timeout = 50 # * 100 ms = 5s
with OCIContainer(
engine=container_engine, image=DEFAULT_IMAGE, oci_platform=DEFAULT_OCI_PLATFORM
) as container:
+ assert container.name is not None
+ container_name = container.name
+ for _ in range(timeout):
+ docker_containers_listing = subprocess.run(
+ f"{container.engine.name} container ls",
+ shell=True,
+ check=True,
+ stdout=subprocess.PIPE,
+ text=True,
+ ).stdout
+ if container_name in docker_containers_listing:
+ break
+ time.sleep(0.1)
+ assert container_name in docker_containers_listing
+
+ for _ in range(timeout):
docker_containers_listing = subprocess.run(
f"{container.engine.name} container ls",
shell=True,
@@ -153,18 +168,10 @@ def test_container_removed(container_engine):
stdout=subprocess.PIPE,
text=True,
).stdout
- assert container.name is not None
- assert container.name in docker_containers_listing
- old_container_name = container.name
-
- docker_containers_listing = subprocess.run(
- f"{container.engine.name} container ls",
- shell=True,
- check=True,
- stdout=subprocess.PIPE,
- text=True,
- ).stdout
- assert old_container_name not in docker_containers_listing
+ if container_name not in docker_containers_listing:
+ break
+ time.sleep(0.1)
+ assert container_name not in docker_containers_listing
def test_large_environment(container_engine):
diff --git a/unit_test/option_prepare_test.py b/unit_test/option_prepare_test.py
index 9d6e2c430..d80f69616 100644
--- a/unit_test/option_prepare_test.py
+++ b/unit_test/option_prepare_test.py
@@ -27,6 +27,7 @@
"pp38",
"pp39",
"pp310",
+ "pp311",
}
@@ -158,7 +159,7 @@ def test_build_with_override_launches(monkeypatch, tmp_path):
assert identifiers == {
f"{x}-manylinux_x86_64"
for x in ALL_IDS
- - {"cp36", "cp310", "cp311", "cp312", "cp313", "pp37", "pp38", "pp39", "pp310"}
+ - {"cp36", "cp310", "cp311", "cp312", "cp313", "pp37", "pp38", "pp39", "pp310", "pp311"}
}
assert kwargs["options"].build_options("cp37-manylinux_x86_64").before_all == ""
@@ -169,7 +170,7 @@ def test_build_with_override_launches(monkeypatch, tmp_path):
identifiers = {x.identifier for x in kwargs["platform_configs"]}
assert identifiers == {
f"{x}-manylinux_x86_64"
- for x in ["cp310", "cp311", "cp312", "cp313", "pp37", "pp38", "pp39", "pp310"]
+ for x in ["cp310", "cp311", "cp312", "cp313", "pp37", "pp38", "pp39", "pp310", "pp311"]
}
kwargs = build_in_container.call_args_list[3][1]