69 lines
2.0 KiB
Python
69 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
import subprocess
|
|
from typing import Generator
|
|
|
|
import pytest
|
|
|
|
from cibuildwheel.util import detect_ci_provider, find_uv
|
|
|
|
from .utils import EMULATED_ARCHS, platform
|
|
|
|
|
|
def pytest_addoption(parser) -> None:
|
|
parser.addoption(
|
|
"--run-emulation",
|
|
action="store",
|
|
default=None,
|
|
help="run emulation tests",
|
|
choices=("all", *EMULATED_ARCHS),
|
|
)
|
|
parser.addoption("--run-podman", action="store_true", default=False, help="run podman tests")
|
|
parser.addoption(
|
|
"--run-cp38-universal2",
|
|
action="store_true",
|
|
default=False,
|
|
help="macOS cp38 uses the universal2 installer",
|
|
)
|
|
|
|
|
|
@pytest.fixture(params=["pip", "build"])
|
|
def build_frontend_env_nouv(request: pytest.FixtureRequest) -> dict[str, str]:
|
|
frontend = request.param
|
|
if platform == "pyodide" and frontend == "pip":
|
|
pytest.skip("Can't use pip as build frontend for pyodide platform")
|
|
|
|
return {"CIBW_BUILD_FRONTEND": frontend}
|
|
|
|
|
|
@pytest.fixture()
|
|
def build_frontend_env(build_frontend_env_nouv: dict[str, str]) -> dict[str, str]:
|
|
frontend = build_frontend_env_nouv["CIBW_BUILD_FRONTEND"]
|
|
if frontend != "build" or platform == "pyodide" or find_uv() is None:
|
|
return build_frontend_env_nouv
|
|
|
|
return {"CIBW_BUILD_FRONTEND": "build[uv]"}
|
|
|
|
|
|
@pytest.fixture()
|
|
def docker_cleanup() -> Generator[None, None, None]:
|
|
def get_images() -> set[str]:
|
|
if detect_ci_provider() is None or platform != "linux":
|
|
return set()
|
|
images = subprocess.run(
|
|
["docker", "image", "ls", "--format", "{{json .ID}}"],
|
|
text=True,
|
|
check=True,
|
|
stdout=subprocess.PIPE,
|
|
).stdout
|
|
return {json.loads(image.strip()) for image in images.splitlines() if image.strip()}
|
|
|
|
images_before = get_images()
|
|
try:
|
|
yield
|
|
finally:
|
|
images_after = get_images()
|
|
for image in images_after - images_before:
|
|
subprocess.run(["docker", "rmi", image], check=False)
|