feat: add musllinux armv7l (#2017)
* feature: add musllinux armv7l * fix: local armv7l images * fix python 3.8 tests * address review comments --------- Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
This commit is contained in:
co-authored by
Henry Schreiner
parent
dfd01af9aa
commit
9fad66fcfb
@@ -179,6 +179,7 @@ def test_archs_platform_all(platform, intercepted_build_args, monkeypatch):
|
||||
Architecture.aarch64,
|
||||
Architecture.ppc64le,
|
||||
Architecture.s390x,
|
||||
Architecture.armv7l,
|
||||
}
|
||||
elif platform == "windows":
|
||||
assert options.globals.architectures == {
|
||||
|
||||
@@ -535,16 +535,33 @@ def test_disable_host_mount(tmp_path: Path, container_engine, config, should_hav
|
||||
container.call(["cat", host_mount_path], capture_output=True)
|
||||
|
||||
|
||||
def test_local_image(container_engine):
|
||||
local_image = f"cibw_test_{container_engine.name}_local:latest"
|
||||
@pytest.mark.parametrize("platform", list(OCIPlatform))
|
||||
def test_local_image(container_engine, platform, tmp_path: Path):
|
||||
if (
|
||||
detect_ci_provider() in {CIProvider.travis_ci}
|
||||
and pm in {"s390x", "ppc64le"}
|
||||
and platform != DEFAULT_OCI_PLATFORM
|
||||
):
|
||||
pytest.skip("Skipping test because docker on this platform does not support QEMU")
|
||||
if container_engine.name == "podman" and platform == OCIPlatform.ARMV7:
|
||||
# both GHA & local macOS arm64 podman desktop are failing
|
||||
pytest.xfail("podman fails with armv7l images")
|
||||
|
||||
remote_image = "debian:12-slim"
|
||||
platform_name = platform.value.replace("/", "_")
|
||||
local_image = f"cibw_{container_engine.name}_{platform_name}_local:latest"
|
||||
dockerfile = tmp_path / "Dockerfile"
|
||||
dockerfile.write_text(f"FROM {remote_image}")
|
||||
subprocess.run(
|
||||
[container_engine.name, "pull", f"--platform={DEFAULT_OCI_PLATFORM.value}", DEFAULT_IMAGE],
|
||||
[container_engine.name, "pull", f"--platform={platform.value}", remote_image],
|
||||
check=True,
|
||||
)
|
||||
subprocess.run([container_engine.name, "image", "tag", DEFAULT_IMAGE, local_image], check=True)
|
||||
with OCIContainer(
|
||||
engine=container_engine, image=local_image, oci_platform=DEFAULT_OCI_PLATFORM
|
||||
):
|
||||
subprocess.run(
|
||||
[container_engine.name, "build", f"--platform={platform.value}", "-t", local_image, "."],
|
||||
check=True,
|
||||
cwd=tmp_path,
|
||||
)
|
||||
with OCIContainer(engine=container_engine, image=local_image, oci_platform=platform):
|
||||
pass
|
||||
|
||||
|
||||
@@ -556,27 +573,32 @@ def test_multiarch_image(container_engine, platform):
|
||||
and platform != DEFAULT_OCI_PLATFORM
|
||||
):
|
||||
pytest.skip("Skipping test because docker on this platform does not support QEMU")
|
||||
if container_engine.name == "podman" and platform == OCIPlatform.ARMV7:
|
||||
# both GHA & local macOS arm64 podman desktop are failing
|
||||
pytest.xfail("podman fails with armv7l images")
|
||||
with OCIContainer(
|
||||
engine=container_engine, image="debian:12-slim", oci_platform=platform
|
||||
) as container:
|
||||
output = container.call(["uname", "-m"], capture_output=True)
|
||||
output_map = {
|
||||
OCIPlatform.i386: "i686",
|
||||
OCIPlatform.AMD64: "x86_64",
|
||||
OCIPlatform.ARM64: "aarch64",
|
||||
OCIPlatform.PPC64LE: "ppc64le",
|
||||
OCIPlatform.S390X: "s390x",
|
||||
output_map_kernel = {
|
||||
OCIPlatform.i386: ("i686",),
|
||||
OCIPlatform.AMD64: ("x86_64",),
|
||||
OCIPlatform.ARMV7: ("armv7l", "armv8l"),
|
||||
OCIPlatform.ARM64: ("aarch64",),
|
||||
OCIPlatform.PPC64LE: ("ppc64le",),
|
||||
OCIPlatform.S390X: ("s390x",),
|
||||
}
|
||||
assert output_map[platform] == output.strip()
|
||||
assert output.strip() in output_map_kernel[platform]
|
||||
output = container.call(["dpkg", "--print-architecture"], capture_output=True)
|
||||
output_map = {
|
||||
output_map_dpkg = {
|
||||
OCIPlatform.i386: "i386",
|
||||
OCIPlatform.AMD64: "amd64",
|
||||
OCIPlatform.ARMV7: "armhf",
|
||||
OCIPlatform.ARM64: "arm64",
|
||||
OCIPlatform.PPC64LE: "ppc64el",
|
||||
OCIPlatform.S390X: "s390x",
|
||||
}
|
||||
assert output_map[platform] == output.strip()
|
||||
assert output_map_dpkg[platform] == output.strip()
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
|
||||
Reference in New Issue
Block a user