Skip to content

Commit 93b5a99

Browse files
committed
feat: add manylinux armv7l
1 parent 4e93d91 commit 93b5a99

11 files changed

+79
-32
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Python wheels are great. Building them across **Mac, Linux, Windows**, on **mult
2222
What does it do?
2323
----------------
2424

25-
| | macOS Intel | macOS Apple Silicon | Windows 64bit | Windows 32bit | Windows Arm64 | manylinux<br/>musllinux x86_64 | manylinux<br/>musllinux i686 | manylinux<br/>musllinux aarch64 | manylinux<br/>musllinux ppc64le | manylinux<br/>musllinux s390x | musllinux armv7l | Pyodide |
25+
| | macOS Intel | macOS Apple Silicon | Windows 64bit | Windows 32bit | Windows Arm64 | manylinux<br/>musllinux x86_64 | manylinux<br/>musllinux i686 | manylinux<br/>musllinux aarch64 | manylinux<br/>musllinux ppc64le | manylinux<br/>musllinux s390x | manylinux<br/>musllinux armv7l | Pyodide |
2626
|----------------|----|-----|-----|-----|-----|----|-----|----|-----|-----|---|-----|
2727
| CPython 3.6 || N/A ||| N/A ||||||| N/A |
2828
| CPython 3.7 || N/A ||| N/A ||||||| N/A |

bin/generate_schema.py

+3
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@
113113
manylinux-aarch64-image:
114114
type: string
115115
description: Specify alternative manylinux / musllinux container images
116+
manylinux-armv7l-image:
117+
type: string
118+
description: Specify alternative manylinux / musllinux container images
116119
manylinux-i686-image:
117120
type: string
118121
description: Specify alternative manylinux / musllinux container images

bin/update_docker.py

+18
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from pathlib import Path
77

88
import requests
9+
from packaging.version import Version
910

1011
DIR = Path(__file__).parent.resolve()
1112
RESOURCES = DIR.parent / "cibuildwheel/resources"
@@ -53,6 +54,8 @@ class Image:
5354
Image("manylinux_2_28", "s390x", "quay.io/pypa/manylinux_2_28_s390x", None),
5455
Image("manylinux_2_28", "pypy_x86_64", "quay.io/pypa/manylinux_2_28_x86_64", None),
5556
Image("manylinux_2_28", "pypy_aarch64", "quay.io/pypa/manylinux_2_28_aarch64", None),
57+
# manylinux_2_31 images
58+
Image("manylinux_2_31", "armv7l", "ghcr.io/mayeut/manylinux_2_31", None),
5659
# musllinux_1_1 images
5760
Image("musllinux_1_1", "x86_64", "quay.io/pypa/musllinux_1_1_x86_64", None),
5861
Image("musllinux_1_1", "i686", "quay.io/pypa/musllinux_1_1_i686", None),
@@ -91,6 +94,21 @@ class Image:
9194
for (name, info) in tags_dict.items()
9295
if info["manifest_digest"] == latest_tag["manifest_digest"]
9396
)
97+
elif image.image_name.startswith("ghcr.io/"):
98+
repository = image.image_name[8:]
99+
response = requests.get(
100+
"https://ghcr.io/token", params={"scope": f"repository:{repository}:pull"}
101+
)
102+
response.raise_for_status()
103+
token = response.json()["token"]
104+
response = requests.get(
105+
f"https://ghcr.io/v2/{repository}/tags/list",
106+
headers={"Authorization": f"Bearer {token}"},
107+
)
108+
response.raise_for_status()
109+
ghcr_tags = [(Version(tag), tag) for tag in response.json()["tags"] if tag != "latest"]
110+
ghcr_tags.sort(reverse=True)
111+
tag_name = ghcr_tags[0][1]
94112
else:
95113
response = requests.get(f"https://hub.docker.com/v2/repositories/{image.image_name}/tags")
96114
response.raise_for_status()

cibuildwheel/logger.py

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"manylinux_aarch64": "manylinux aarch64",
2424
"manylinux_ppc64le": "manylinux ppc64le",
2525
"manylinux_s390x": "manylinux s390x",
26+
"manylinux_armv7l": "manylinux armv7l",
2627
"musllinux_x86_64": "musllinux x86_64",
2728
"musllinux_i686": "musllinux i686",
2829
"musllinux_aarch64": "musllinux aarch64",

cibuildwheel/resources/build-platforms.toml

+9
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,15 @@ python_configurations = [
4949
{ identifier = "cp312-manylinux_s390x", version = "3.12", path_str = "/opt/python/cp312-cp312" },
5050
{ identifier = "cp313-manylinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313" },
5151
{ identifier = "cp313t-manylinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313t" },
52+
{ identifier = "cp36-manylinux_armv7l", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
53+
{ identifier = "cp37-manylinux_armv7l", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
54+
{ identifier = "cp38-manylinux_armv7l", version = "3.8", path_str = "/opt/python/cp38-cp38" },
55+
{ identifier = "cp39-manylinux_armv7l", version = "3.9", path_str = "/opt/python/cp39-cp39" },
56+
{ identifier = "cp310-manylinux_armv7l", version = "3.10", path_str = "/opt/python/cp310-cp310" },
57+
{ identifier = "cp311-manylinux_armv7l", version = "3.11", path_str = "/opt/python/cp311-cp311" },
58+
{ identifier = "cp312-manylinux_armv7l", version = "3.12", path_str = "/opt/python/cp312-cp312" },
59+
{ identifier = "cp313-manylinux_armv7l", version = "3.13", path_str = "/opt/python/cp313-cp313" },
60+
{ identifier = "cp313t-manylinux_armv7l", version = "3.13", path_str = "/opt/python/cp313-cp313t" },
5261
{ identifier = "pp37-manylinux_aarch64", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" },
5362
{ identifier = "pp38-manylinux_aarch64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" },
5463
{ identifier = "pp39-manylinux_aarch64", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" },

cibuildwheel/resources/cibuildwheel.schema.json

+11
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,11 @@
272272
"description": "Specify alternative manylinux / musllinux container images",
273273
"title": "CIBW_MANYLINUX_AARCH64_IMAGE"
274274
},
275+
"manylinux-armv7l-image": {
276+
"type": "string",
277+
"description": "Specify alternative manylinux / musllinux container images",
278+
"title": "CIBW_MANYLINUX_ARMV7L_IMAGE"
279+
},
275280
"manylinux-i686-image": {
276281
"type": "string",
277282
"description": "Specify alternative manylinux / musllinux container images",
@@ -523,6 +528,9 @@
523528
"manylinux-aarch64-image": {
524529
"$ref": "#/properties/manylinux-aarch64-image"
525530
},
531+
"manylinux-armv7l-image": {
532+
"$ref": "#/properties/manylinux-armv7l-image"
533+
},
526534
"manylinux-i686-image": {
527535
"$ref": "#/properties/manylinux-i686-image"
528536
},
@@ -614,6 +622,9 @@
614622
"manylinux-aarch64-image": {
615623
"$ref": "#/properties/manylinux-aarch64-image"
616624
},
625+
"manylinux-armv7l-image": {
626+
"$ref": "#/properties/manylinux-armv7l-image"
627+
},
617628
"manylinux-i686-image": {
618629
"$ref": "#/properties/manylinux-i686-image"
619630
},

cibuildwheel/resources/defaults.toml

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ manylinux-i686-image = "manylinux2014"
2828
manylinux-aarch64-image = "manylinux2014"
2929
manylinux-ppc64le-image = "manylinux2014"
3030
manylinux-s390x-image = "manylinux2014"
31+
manylinux-armv7l-image = "manylinux_2_31"
3132
manylinux-pypy_x86_64-image = "manylinux2014"
3233
manylinux-pypy_i686-image = "manylinux2014"
3334
manylinux-pypy_aarch64-image = "manylinux2014"

cibuildwheel/resources/pinned_docker_images.cfg

+1
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,6 @@ manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
5353
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.10.21-1
5454

5555
[armv7l]
56+
manylinux_2_31 = ghcr.io/mayeut/manylinux_2_31:2024.10.20-2
5657
musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2024.10.21-1
5758

cibuildwheel/util.py

+1
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
"aarch64",
7474
"ppc64le",
7575
"s390x",
76+
"armv7l",
7677
"pypy_aarch64",
7778
"pypy_i686",
7879
)

0 commit comments

Comments
 (0)