Skip to content

Commit 4928e48

Browse files
committed
feat: add manylinux_2_34
1 parent 3a0db72 commit 4928e48

File tree

5 files changed

+115
-78
lines changed

5 files changed

+115
-78
lines changed

bin/update_docker.py

+57-43
Original file line numberDiff line numberDiff line change
@@ -20,55 +20,69 @@ class Image:
2020
tag: str | None # Set this to pin the image
2121

2222

23+
class PyPAImage(Image):
24+
def __init__(self, manylinux_version: str, platform: str, tag: str | None):
25+
platform_no_pypy = platform[5:] if platform.startswith("pypy_") else platform
26+
image_name = f"quay.io/pypa/{manylinux_version}_{platform_no_pypy}"
27+
super().__init__(manylinux_version, platform, image_name, tag)
28+
29+
2330
images = [
24-
# manylinux1 images
25-
Image("manylinux1", "x86_64", "quay.io/pypa/manylinux1_x86_64", None),
26-
Image("manylinux1", "i686", "quay.io/pypa/manylinux1_i686", None),
27-
# manylinux2010 images
28-
Image("manylinux2010", "x86_64", "quay.io/pypa/manylinux2010_x86_64", None),
29-
Image("manylinux2010", "i686", "quay.io/pypa/manylinux2010_i686", None),
30-
Image("manylinux2010", "pypy_x86_64", "quay.io/pypa/manylinux2010_x86_64", None),
31-
Image("manylinux2010", "pypy_i686", "quay.io/pypa/manylinux2010_i686", None),
31+
# manylinux1 images, EOL -> use tag
32+
PyPAImage("manylinux1", "x86_64", "2024-04-29-76807b8"),
33+
PyPAImage("manylinux1", "i686", "2024-04-29-76807b8"),
34+
# manylinux2010 images, EOL -> use tag
35+
PyPAImage("manylinux2010", "x86_64", "2022-08-05-4535177"),
36+
PyPAImage("manylinux2010", "i686", "2022-08-05-4535177"),
37+
PyPAImage("manylinux2010", "pypy_x86_64", "2022-08-05-4535177"),
38+
PyPAImage("manylinux2010", "pypy_i686", "2022-08-05-4535177"),
3239
# manylinux2014 images
33-
Image("manylinux2014", "x86_64", "quay.io/pypa/manylinux2014_x86_64", None),
34-
Image("manylinux2014", "i686", "quay.io/pypa/manylinux2014_i686", None),
35-
Image("manylinux2014", "aarch64", "quay.io/pypa/manylinux2014_aarch64", None),
36-
Image("manylinux2014", "ppc64le", "quay.io/pypa/manylinux2014_ppc64le", None),
37-
Image("manylinux2014", "s390x", "quay.io/pypa/manylinux2014_s390x", None),
38-
Image("manylinux2014", "pypy_x86_64", "quay.io/pypa/manylinux2014_x86_64", None),
39-
Image("manylinux2014", "pypy_i686", "quay.io/pypa/manylinux2014_i686", None),
40-
Image("manylinux2014", "pypy_aarch64", "quay.io/pypa/manylinux2014_aarch64", None),
41-
# manylinux_2_24 images
42-
Image("manylinux_2_24", "x86_64", "quay.io/pypa/manylinux_2_24_x86_64", None),
43-
Image("manylinux_2_24", "i686", "quay.io/pypa/manylinux_2_24_i686", None),
44-
Image("manylinux_2_24", "aarch64", "quay.io/pypa/manylinux_2_24_aarch64", None),
45-
Image("manylinux_2_24", "ppc64le", "quay.io/pypa/manylinux_2_24_ppc64le", None),
46-
Image("manylinux_2_24", "s390x", "quay.io/pypa/manylinux_2_24_s390x", None),
47-
Image("manylinux_2_24", "pypy_x86_64", "quay.io/pypa/manylinux_2_24_x86_64", None),
48-
Image("manylinux_2_24", "pypy_i686", "quay.io/pypa/manylinux_2_24_i686", None),
49-
Image("manylinux_2_24", "pypy_aarch64", "quay.io/pypa/manylinux_2_24_aarch64", None),
40+
PyPAImage("manylinux2014", "x86_64", None),
41+
PyPAImage("manylinux2014", "i686", None),
42+
PyPAImage("manylinux2014", "aarch64", None),
43+
PyPAImage("manylinux2014", "ppc64le", None),
44+
PyPAImage("manylinux2014", "s390x", None),
45+
PyPAImage("manylinux2014", "pypy_x86_64", None),
46+
PyPAImage("manylinux2014", "pypy_i686", None),
47+
PyPAImage("manylinux2014", "pypy_aarch64", None),
48+
# manylinux_2_24 images, EOL -> use tag
49+
PyPAImage("manylinux_2_24", "x86_64", "2022-12-26-0d38463"),
50+
PyPAImage("manylinux_2_24", "i686", "2022-12-26-0d38463"),
51+
PyPAImage("manylinux_2_24", "aarch64", "2022-12-26-0d38463"),
52+
PyPAImage("manylinux_2_24", "ppc64le", "2022-12-26-0d38463"),
53+
PyPAImage("manylinux_2_24", "s390x", "2022-12-26-0d38463"),
54+
PyPAImage("manylinux_2_24", "pypy_x86_64", "2022-12-26-0d38463"),
55+
PyPAImage("manylinux_2_24", "pypy_i686", "2022-12-26-0d38463"),
56+
PyPAImage("manylinux_2_24", "pypy_aarch64", "2022-12-26-0d38463"),
5057
# manylinux_2_28 images
51-
Image("manylinux_2_28", "x86_64", "quay.io/pypa/manylinux_2_28_x86_64", None),
52-
Image("manylinux_2_28", "aarch64", "quay.io/pypa/manylinux_2_28_aarch64", None),
53-
Image("manylinux_2_28", "ppc64le", "quay.io/pypa/manylinux_2_28_ppc64le", None),
54-
Image("manylinux_2_28", "s390x", "quay.io/pypa/manylinux_2_28_s390x", None),
55-
Image("manylinux_2_28", "pypy_x86_64", "quay.io/pypa/manylinux_2_28_x86_64", None),
56-
Image("manylinux_2_28", "pypy_aarch64", "quay.io/pypa/manylinux_2_28_aarch64", None),
58+
PyPAImage("manylinux_2_28", "x86_64", None),
59+
PyPAImage("manylinux_2_28", "aarch64", None),
60+
PyPAImage("manylinux_2_28", "ppc64le", None),
61+
PyPAImage("manylinux_2_28", "s390x", None),
62+
PyPAImage("manylinux_2_28", "pypy_x86_64", None),
63+
PyPAImage("manylinux_2_28", "pypy_aarch64", None),
5764
# manylinux_2_31 images
5865
Image("manylinux_2_31", "armv7l", "ghcr.io/mayeut/manylinux_2_31", None),
59-
# musllinux_1_1 images
60-
Image("musllinux_1_1", "x86_64", "quay.io/pypa/musllinux_1_1_x86_64", None),
61-
Image("musllinux_1_1", "i686", "quay.io/pypa/musllinux_1_1_i686", None),
62-
Image("musllinux_1_1", "aarch64", "quay.io/pypa/musllinux_1_1_aarch64", None),
63-
Image("musllinux_1_1", "ppc64le", "quay.io/pypa/musllinux_1_1_ppc64le", None),
64-
Image("musllinux_1_1", "s390x", "quay.io/pypa/musllinux_1_1_s390x", None),
66+
# manylinux_2_34 images
67+
PyPAImage("manylinux_2_34", "x86_64", None),
68+
PyPAImage("manylinux_2_34", "aarch64", None),
69+
PyPAImage("manylinux_2_34", "ppc64le", None),
70+
PyPAImage("manylinux_2_34", "s390x", None),
71+
PyPAImage("manylinux_2_34", "pypy_x86_64", None),
72+
PyPAImage("manylinux_2_34", "pypy_aarch64", None),
73+
# musllinux_1_1 images, EOL -> use tag
74+
PyPAImage("musllinux_1_1", "x86_64", "2024.10.26-1"),
75+
PyPAImage("musllinux_1_1", "i686", "2024.10.26-1"),
76+
PyPAImage("musllinux_1_1", "aarch64", "2024.10.26-1"),
77+
PyPAImage("musllinux_1_1", "ppc64le", "2024.10.26-1"),
78+
PyPAImage("musllinux_1_1", "s390x", "2024.10.26-1"),
6579
# musllinux_1_2 images
66-
Image("musllinux_1_2", "x86_64", "quay.io/pypa/musllinux_1_2_x86_64", None),
67-
Image("musllinux_1_2", "i686", "quay.io/pypa/musllinux_1_2_i686", None),
68-
Image("musllinux_1_2", "aarch64", "quay.io/pypa/musllinux_1_2_aarch64", None),
69-
Image("musllinux_1_2", "ppc64le", "quay.io/pypa/musllinux_1_2_ppc64le", None),
70-
Image("musllinux_1_2", "s390x", "quay.io/pypa/musllinux_1_2_s390x", None),
71-
Image("musllinux_1_2", "armv7l", "quay.io/pypa/musllinux_1_2_armv7l", None),
80+
PyPAImage("musllinux_1_2", "x86_64", None),
81+
PyPAImage("musllinux_1_2", "i686", None),
82+
PyPAImage("musllinux_1_2", "aarch64", None),
83+
PyPAImage("musllinux_1_2", "ppc64le", None),
84+
PyPAImage("musllinux_1_2", "s390x", None),
85+
PyPAImage("musllinux_1_2", "armv7l", None),
7286
]
7387

7488
config = configparser.ConfigParser()
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,64 @@
11
[x86_64]
22
manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-04-29-76807b8
33
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
4-
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.11.16-1
4+
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.11.24-1
55
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463
6-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.11.16-1
6+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.11.24-1
7+
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2024.11.24-1
78
musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024.10.26-1
8-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024.11.16-1
9+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024.11.24-1
910

1011
[i686]
1112
manylinux1 = quay.io/pypa/manylinux1_i686:2024-04-29-76807b8
1213
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
13-
manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.11.16-1
14+
manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.11.24-1
1415
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463
1516
musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024.10.26-1
16-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024.11.16-1
17+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024.11.24-1
1718

1819
[pypy_x86_64]
1920
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
20-
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.11.16-1
21+
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.11.24-1
2122
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463
22-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.11.16-1
23+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.11.24-1
24+
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2024.11.24-1
2325

2426
[pypy_i686]
2527
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
26-
manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.11.16-1
28+
manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.11.24-1
2729
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463
2830

2931
[aarch64]
30-
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.11.16-1
32+
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.11.24-1
3133
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
32-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.11.16-1
34+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.11.24-1
35+
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2024.11.24-1
3336
musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024.10.26-1
34-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024.11.16-1
37+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024.11.24-1
3538

3639
[ppc64le]
37-
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024.11.16-1
40+
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024.11.24-1
3841
manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463
39-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024.11.16-1
42+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024.11.24-1
43+
manylinux_2_34 = quay.io/pypa/manylinux_2_34_ppc64le:2024.11.24-1
4044
musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024.10.26-1
41-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024.11.16-1
45+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024.11.24-1
4246

4347
[s390x]
44-
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024.11.16-1
48+
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024.11.24-1
4549
manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463
46-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024.11.16-1
50+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024.11.24-1
51+
manylinux_2_34 = quay.io/pypa/manylinux_2_34_s390x:2024.11.24-1
4752
musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024.10.26-1
48-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024.11.16-1
53+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024.11.24-1
4954

5055
[pypy_aarch64]
51-
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.11.16-1
56+
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.11.24-1
5257
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
53-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.11.16-1
58+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.11.24-1
59+
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2024.11.24-1
5460

5561
[armv7l]
56-
manylinux_2_31 = ghcr.io/mayeut/manylinux_2_31:2024.11.16-1
57-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2024.11.16-1
62+
manylinux_2_31 = ghcr.io/mayeut/manylinux_2_31:2024.11.24-1
63+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2024.11.24-1
5864

docs/options.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -1211,14 +1211,14 @@ The available options are:
12111211
Set the Docker image to be used for building [manylinux / musllinux](https://github.com/pypa/manylinux) wheels.
12121212

12131213
For `CIBW_MANYLINUX_*_IMAGE`, except `CIBW_MANYLINUX_ARMV7L_IMAGE`, the value of this option can either be set to `manylinux1`, `manylinux2010`, `manylinux2014`, `manylinux_2_24` or `manylinux_2_28` to use a pinned version of the [official manylinux images](https://github.com/pypa/manylinux). Alternatively, set these options to any other valid Docker image name. For PyPy, the `manylinux1` image is not available. For architectures other
1214-
than x86 (x86\_64 and i686) `manylinux2014`, `manylinux_2_24` or `manylinux_2_28` must be used, because the first version of the manylinux specification that supports additional architectures is `manylinux2014`. `manylinux_2_28` is not supported for `i686` architecture.
1214+
than x86 (x86\_64 and i686) `manylinux2014`, `manylinux_2_24`, `manylinux_2_28` or `manylinux_2_34` must be used, because the first version of the manylinux specification that supports additional architectures is `manylinux2014`. `manylinux_2_28` and `manylinux_2_34` are not supported for `i686` architecture.
12151215
For `CIBW_MANYLINUX_ARMV7L_IMAGE`, the value of this option can either be set to `manylinux_2_31` or a custom image. Support is experimental for now. The `manylinux_2_31` value is only available for `armv7`.
12161216

12171217
For `CIBW_MUSLLINUX_*_IMAGE`, the value of this option can either be set to `musllinux_1_1` or `musllinux_1_2` to use a pinned version of the [official musllinux images](https://github.com/pypa/musllinux). Alternatively, set these options to any other valid Docker image name.
12181218

12191219
If this option is blank, it will fall though to the next available definition (environment variable -> pyproject.toml -> default).
12201220

1221-
If setting a custom image, you'll need to make sure it can be used in the same way as the default images: all necessary Python and pip versions need to be present in `/opt/python/`, and the auditwheel tool needs to be present for cibuildwheel to work. Apart from that, the architecture and relevant shared system libraries need to be compatible to the relevant standard to produce valid manylinux1/manylinux2010/manylinux2014/manylinux_2_24/manylinux_2_28/musllinux_1_1/musllinux_1_2 wheels (see [pypa/manylinux on GitHub](https://github.com/pypa/manylinux), [PEP 513](https://www.python.org/dev/peps/pep-0513/), [PEP 571](https://www.python.org/dev/peps/pep-0571/), [PEP 599](https://www.python.org/dev/peps/pep-0599/), [PEP 600](https://www.python.org/dev/peps/pep-0600/) and [PEP 656](https://www.python.org/dev/peps/pep-0656/) for more details).
1221+
If setting a custom image, you'll need to make sure it can be used in the same way as the default images: all necessary Python and pip versions need to be present in `/opt/python/`, and the auditwheel tool needs to be present for cibuildwheel to work. Apart from that, the architecture and relevant shared system libraries need to be compatible to the relevant standard to produce valid manylinux1/manylinux2010/manylinux2014/manylinux_2_24/manylinux_2_28/manylinux_2_34/musllinux_1_1/musllinux_1_2 wheels (see [pypa/manylinux on GitHub](https://github.com/pypa/manylinux), [PEP 513](https://www.python.org/dev/peps/pep-0513/), [PEP 571](https://www.python.org/dev/peps/pep-0571/), [PEP 599](https://www.python.org/dev/peps/pep-0599/), [PEP 600](https://www.python.org/dev/peps/pep-0600/) and [PEP 656](https://www.python.org/dev/peps/pep-0656/) for more details).
12221222

12231223
Auditwheel detects the version of the manylinux / musllinux standard in the image through the `AUDITWHEEL_PLAT` environment variable, as cibuildwheel has no way of detecting the correct `--plat` command line argument to pass to auditwheel for a custom image. If a custom image does not correctly set this `AUDITWHEEL_PLAT` environment variable, the `CIBW_ENVIRONMENT` option can be used to do so (e.g., `CIBW_ENVIRONMENT='AUDITWHEEL_PLAT="manylinux2010_$(uname -m)"'`).
12241224

test/test_manylinuxXXXX_only.py

+27-12
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <stdlib.h>
1616
#include <stdint.h>
1717
#include <math.h>
18+
#include <pthread.h>
1819
1920
#if !defined(__GLIBC_PREREQ)
2021
#error "Must run on a glibc linux environment"
@@ -31,9 +32,16 @@
3132
),
3233
spam_c_function_add=textwrap.dedent(
3334
r"""
34-
#if __GLIBC_PREREQ(2, 28)
35+
#if __GLIBC_PREREQ(2, 34)
36+
// pthread_mutexattr_init was moved to libc.so.6 in manylinux_2_34+
37+
pthread_mutexattr_t attr;
38+
sts = pthread_mutexattr_init(&attr);
39+
if (sts == 0) {
40+
pthread_mutexattr_destroy(&attr);
41+
}
42+
#elif __GLIBC_PREREQ(2, 28)
3543
// thrd_equal & thrd_current are only available in manylinux_2_28+
36-
sts = thrd_equal(thrd_current(), thrd_current()) ? 0 : 1;;
44+
sts = thrd_equal(thrd_current(), thrd_current()) ? 0 : 1;
3745
#elif __GLIBC_PREREQ(2, 24)
3846
// nextupf is only available in manylinux_2_24+
3947
sts = (int)nextupf(0.0F);
@@ -51,17 +59,24 @@
5159

5260
@pytest.mark.parametrize(
5361
"manylinux_image",
54-
["manylinux1", "manylinux2010", "manylinux2014", "manylinux_2_24", "manylinux_2_28"],
62+
[
63+
"manylinux1",
64+
"manylinux2010",
65+
"manylinux2014",
66+
"manylinux_2_24",
67+
"manylinux_2_28",
68+
"manylinux_2_34",
69+
],
5570
)
5671
@pytest.mark.usefixtures("docker_cleanup")
5772
def test(manylinux_image, tmp_path):
5873
if utils.platform != "linux":
5974
pytest.skip("the container image test is only relevant to the linux build")
60-
elif platform.machine() not in ["x86_64", "i686"]:
61-
if manylinux_image in ["manylinux1", "manylinux2010"]:
62-
pytest.skip("manylinux1 and 2010 doesn't exist for non-x86 architectures")
63-
elif manylinux_image == "manylinux_2_28" and platform.machine() == "i686":
64-
pytest.skip("manylinux_2_28 doesn't exist for i686 architecture")
75+
elif platform.machine() not in {"x86_64", "i686"}:
76+
if manylinux_image in {"manylinux1", "manylinux2010"}:
77+
pytest.skip(f"{manylinux_image} doesn't exist for non-x86 architectures")
78+
elif manylinux_image in {"manylinux_2_28", "manylinux_2_34"} and platform.machine() == "i686":
79+
pytest.skip(f"{manylinux_image} doesn't exist for i686 architecture")
6580

6681
project_dir = tmp_path / "project"
6782
project_with_manylinux_symbols.generate(project_dir)
@@ -90,8 +105,8 @@ def test(manylinux_image, tmp_path):
90105
if manylinux_image in {"manylinux_2_24"}:
91106
# We don't have a manylinux_2_24 image for PyPy 3.10+, CPython 3.12+
92107
add_env["CIBW_SKIP"] = "pp31* cp312* cp313*"
93-
if manylinux_image == "manylinux_2_28" and platform.machine() == "x86_64":
94-
# We don't have a manylinux_2_28 image for i686
108+
if manylinux_image in {"manylinux_2_28", "manylinux_2_34"} and platform.machine() == "x86_64":
109+
# We don't have a manylinux_2_28+ image for i686
95110
add_env["CIBW_ARCHS"] = "x86_64"
96111

97112
actual_wheels = utils.cibuildwheel_run(project_dir, add_env=add_env)
@@ -131,8 +146,8 @@ def test(manylinux_image, tmp_path):
131146
if "-pp31" not in w and "-cp312" not in w and "-cp313" not in w
132147
]
133148

134-
if manylinux_image == "manylinux_2_28" and platform.machine() == "x86_64":
135-
# We don't have a manylinux_2_28 image for i686
149+
if manylinux_image in {"manylinux_2_28", "manylinux_2_34"} and platform.machine() == "x86_64":
150+
# We don't have a manylinux_2_28+ image for i686
136151
expected_wheels = [w for w in expected_wheels if "i686" not in w]
137152

138153
assert set(actual_wheels) == set(expected_wheels)

unit_test/main_tests/main_options_test.py

+2
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ def test_empty_selector(monkeypatch):
8484
("x86_64", "manylinux2014", "quay.io/pypa/manylinux2014_x86_64:*"),
8585
("x86_64", "manylinux_2_24", "quay.io/pypa/manylinux_2_24_x86_64:*"),
8686
("x86_64", "manylinux_2_28", "quay.io/pypa/manylinux_2_28_x86_64:*"),
87+
("x86_64", "manylinux_2_34", "quay.io/pypa/manylinux_2_34_x86_64:*"),
8788
("x86_64", "custom_image", "custom_image"),
8889
("i686", None, "quay.io/pypa/manylinux2014_i686:*"),
8990
("i686", "manylinux1", "quay.io/pypa/manylinux1_i686:*"),
@@ -97,6 +98,7 @@ def test_empty_selector(monkeypatch):
9798
("pypy_x86_64", "manylinux2014", "quay.io/pypa/manylinux2014_x86_64:*"),
9899
("pypy_x86_64", "manylinux_2_24", "quay.io/pypa/manylinux_2_24_x86_64:*"),
99100
("pypy_x86_64", "manylinux_2_28", "quay.io/pypa/manylinux_2_28_x86_64:*"),
101+
("pypy_x86_64", "manylinux_2_34", "quay.io/pypa/manylinux_2_34_x86_64:*"),
100102
("pypy_x86_64", "custom_image", "custom_image"),
101103
],
102104
)

0 commit comments

Comments
 (0)