diff --git a/cibuildwheel/oci_container.py b/cibuildwheel/oci_container.py index 5e4edf74f..993514613 100644 --- a/cibuildwheel/oci_container.py +++ b/cibuildwheel/oci_container.py @@ -116,11 +116,14 @@ def options_summary(self) -> str | dict[str, str]: def _check_engine_version(engine: OCIContainerEngineConfig) -> None: try: version_string = call(engine.name, "version", "-f", "{{json .}}", capture_stdout=True) - version_info = json.loads(version_string.strip()) + # We are using lowercase keys for all dicts so we are not affected by casing of keys + version_info = json.loads( + version_string.strip(), object_pairs_hook=lambda inp: {k.lower(): v for k, v in inp} + ) match engine.name: case "docker": - client_api_version = FlexibleVersion(version_info["Client"]["ApiVersion"]) - server_api_version = FlexibleVersion(version_info["Server"]["ApiVersion"]) + client_api_version = FlexibleVersion(version_info["client"]["apiversion"]) + server_api_version = FlexibleVersion(version_info["server"]["apiversion"]) # --platform support was introduced in 1.32 as experimental, 1.41 removed the experimental flag version = min(client_api_version, server_api_version) minimum_version = FlexibleVersion("1.41") @@ -135,9 +138,9 @@ def _check_engine_version(engine: OCIContainerEngineConfig) -> None: ) case "podman": # podman uses the same version string for "Version" & "ApiVersion" - client_version = FlexibleVersion(version_info["Client"]["Version"]) - if "Server" in version_info: - server_version = FlexibleVersion(version_info["Server"]["Version"]) + client_version = FlexibleVersion(version_info["client"]["version"]) + if "server" in version_info: + server_version = FlexibleVersion(version_info["server"]["version"]) else: server_version = client_version # --platform support was introduced in v3 diff --git a/unit_test/oci_container_test.py b/unit_test/oci_container_test.py index b172fe6ee..e500bd1bf 100644 --- a/unit_test/oci_container_test.py +++ b/unit_test/oci_container_test.py @@ -628,6 +628,11 @@ def test_multiarch_image(container_engine, platform): '{"Client":{"Version":"24.0.0","ApiVersion":"1.43"},"Server":{"ApiVersion":"1.43"}}', nullcontext(), ), + ( + "docker", + '{"Client":{"Version":"29.0.0","ApiVersion":"1.52"},"Server":{"APIVersion":"1.52"}}', + nullcontext(), + ), ( "docker", '{"Client":{"ApiVersion":"1.43"},"Server":{"ApiVersion":"1.30"}}',