From b70562f37a2c65580ef235073974d067233fa82a Mon Sep 17 00:00:00 2001 From: Joe Rickerby Date: Mon, 2 Mar 2026 11:24:40 +0000 Subject: [PATCH] Debug GraalPy/uv test failures on Windows (#2741) * Dont attempt uv frontend tests on gp311. * docs: note GraalPy 3.11 incompatibility with uv on Windows (#2751) * Initial plan * docs: note GraalPy311 incompatibility with uv/build[uv] on Windows Co-authored-by: joerick <1244307+joerick@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: joerick <1244307+joerick@users.noreply.github.com> * Skip both graalpy with uv for now * Docs updates --------- Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: joerick <1244307+joerick@users.noreply.github.com> --- docs/options.md | 5 +++++ test/conftest.py | 15 +++++++++++++-- test/utils.py | 6 +++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/docs/options.md b/docs/options.md index 90f9015e..e0012cee 100644 --- a/docs/options.md +++ b/docs/options.md @@ -482,6 +482,11 @@ uv currently does not support iOS or musllinux on s390x, ppc64le and riscv64. You can also use the `uv` backend directly; though currently multiple output files (from workspaces) are not supported. +!!! note + There is currently a compatibility issue between GraalPy and uv. If you + are building GraalPy wheels, use `build` or `pip` as the build frontend + instead of `build[uv]` or `uv`. + On Android and Pyodide, the "pip" frontend is not supported. You can specify extra arguments to pass to the build frontend using the diff --git a/test/conftest.py b/test/conftest.py index ad8ccff1..2a80e770 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -13,6 +13,7 @@ from cibuildwheel.selector import EnableGroup from cibuildwheel.typing import PLATFORMS from cibuildwheel.venv import find_uv +from . import utils from .utils import DEFAULT_CIBW_ENABLE, EMULATED_ARCHS, get_platform @@ -164,7 +165,7 @@ def build_frontend_env_nouv(request: pytest.FixtureRequest) -> dict[str, str]: @pytest.fixture(params=["pip", "build", "build[uv]", "uv"]) -def build_frontend_env(request: pytest.FixtureRequest) -> dict[str, str]: +def build_frontend_env(request: pytest.FixtureRequest) -> Generator[dict[str, str], None, None]: frontend = request.param marks = {m.name for m in request.node.iter_markers()} if "android" in marks: @@ -186,7 +187,17 @@ def build_frontend_env(request: pytest.FixtureRequest) -> dict[str, str]: if uv_path is not None and frontend == "build" and platform not in {"android", "ios"}: pytest.skip("No need to check build when uv is present") - return {"CIBW_BUILD_FRONTEND": frontend} + # temporary workaround: uv doesn't work with graalpy yet + uses_uv = "uv" in frontend + env: dict[str, str] = {"CIBW_BUILD_FRONTEND": frontend} + if uses_uv: + utils.include_graalpy_in_expected_wheels = False + env["CIBW_SKIP"] = "gp*" # skip graalpy when using uv, until uv supports it + try: + yield env + finally: + if uses_uv: + utils.include_graalpy_in_expected_wheels = True @pytest.fixture diff --git a/test/utils.py b/test/utils.py index 6acdc804..bb599abd 100644 --- a/test/utils.py +++ b/test/utils.py @@ -28,6 +28,10 @@ GRAALPY_ARCHS = ["x86_64", "AMD64", "aarch64", "arm64"] SINGLE_PYTHON_VERSION: Final[tuple[int, int]] = (3, 12) +# temporary workaround: set by build_frontend_env fixture to skip graalpy +# when uv is the build frontend (compatibility issue between graalpy and uv) +include_graalpy_in_expected_wheels: bool = True + _AARCH64_CAN_RUN_ARMV7: Final[bool] = Architecture.aarch64.value not in EMULATED_ARCHS and { None: Architecture.armv7l.value not in EMULATED_ARCHS, CIProvider.travis_ci: False, @@ -305,7 +309,7 @@ def _expected_wheels( "pp311-pypy311_pp73", ] - if EnableGroup.GraalPy in enable_groups: + if EnableGroup.GraalPy in enable_groups and include_graalpy_in_expected_wheels: python_abi_tags += [ "graalpy311-graalpy242_311_native", "graalpy312-graalpy250_312_native",