From 29a699e765565dc7942924280f4f5198cdb2ffac Mon Sep 17 00:00:00 2001 From: rjgoyln <151457491+rjgoyln@users.noreply.github.com> Date: Wed, 5 Aug 2026 13:43:59 +0800 Subject: [PATCH] [v3-3-test] Fix provider distribution builds failing with flit 4 (#71118) * Fix provider distribution builds failing with flit 4 flit 4.0 removed the --setup-py/--no-setup-py options, so every flit-backed provider build now aborts during argument parsing as soon as flit 4 resolves. Not generating setup.py has been flit's default since well before the 3.12 floor breeze requires, so no longer asking for it explicitly leaves the built distributions unchanged. * Cap flit below 4 so provider distributions keep valid metadata `flit build` does not use PEP 517 build isolation, so whichever flit_core is installed becomes the backend for every provider distribution and the `flit_core==3.12.0` pin each provider declares never applies on the path we release from. flit_core 4.0.1 writes Import-Name and Import-Namespace without a trailing newline (https://github.com/pypa/flit/issues/813), consuming the blank line that separates the metadata headers from the description, so the resulting METADATA parses with MissingHeaderBodySeparatorDefect. Removal of the cap is tracked at https://github.com/apache/airflow/issues/71121. * Drop the flit flag regression test The assertion mirrors the argv literal it guards and mocks away the argument parser that actually rejected the flag, so it detects reverts rather than the class of breakage it was written for. The provider distribution build jobs cover that. * Rest the flit cap on the unvalidated backend rather than the 4.0.1 defect flit 4.0.2 fixed the METADATA corruption the comment cited, but the reason to hold the backend at 3.12.0 is that nothing has exercised flit 4 against provider distributions or the reproducible-build checks. --------- (cherry picked from commit 9a85faa9c55b907bd105ee41567bb7d55dab9f31) Co-authored-by: rjgoyln <151457491+rjgoyln@users.noreply.github.com> Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com> --- dev/breeze/pyproject.toml | 8 ++++++-- .../prepare_providers/provider_distributions.py | 2 +- dev/breeze/uv.lock | 4 ++-- uv.lock | 4 ++-- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/dev/breeze/pyproject.toml b/dev/breeze/pyproject.toml index 96a637857afe3..122b67729c0a6 100644 --- a/dev/breeze/pyproject.toml +++ b/dev/breeze/pyproject.toml @@ -47,8 +47,12 @@ dependencies = [ "black>=26.1.0", "click>=8.3.0", "filelock>=3.13.0", - "flit>=3.12.0", - "flit-core>=3.12.0", + # Capped below 4 because `flit build` has no PEP 517 isolation: the installed flit_core is + # what builds every provider distribution, so the `flit_core==` pin they declare never + # applies. Adopting the 4.x backend is tracked at + # https://github.com/apache/airflow/issues/71121 + "flit>=3.12.0,<4", + "flit-core>=3.12.0,<4", "google-api-python-client>=2.142.0", "google-auth-httplib2>=0.2.0", "google-auth-oauthlib>=1.2.0", diff --git a/dev/breeze/src/airflow_breeze/prepare_providers/provider_distributions.py b/dev/breeze/src/airflow_breeze/prepare_providers/provider_distributions.py index ff4ce0b0a0332..459b66a013ccf 100644 --- a/dev/breeze/src/airflow_breeze/prepare_providers/provider_distributions.py +++ b/dev/breeze/src/airflow_breeze/prepare_providers/provider_distributions.py @@ -251,7 +251,7 @@ def build_provider_distribution( build_backend = provider_info.get("build-system", "flit_core") build_env = {"SOURCE_DATE_EPOCH": str(get_provider_details(provider_id).source_date_epoch)} if build_backend == "flit_core": - command: list[str] = [sys.executable, "-m", "flit", "build", "--no-setup-py", "--use-vcs"] + command: list[str] = [sys.executable, "-m", "flit", "build", "--use-vcs"] console_print( "[warning]Workaround wheel-only package bug in flit by building both and removing sdist." ) diff --git a/dev/breeze/uv.lock b/dev/breeze/uv.lock index 49aa70ea7a951..3441e1155caf6 100644 --- a/dev/breeze/uv.lock +++ b/dev/breeze/uv.lock @@ -68,8 +68,8 @@ requires-dist = [ { name = "boto3", specifier = ">=1.37.2" }, { name = "click", specifier = ">=8.3.0" }, { name = "filelock", specifier = ">=3.13.0" }, - { name = "flit", specifier = ">=3.12.0" }, - { name = "flit-core", specifier = ">=3.12.0" }, + { name = "flit", specifier = ">=3.12.0,<4" }, + { name = "flit-core", specifier = ">=3.12.0,<4" }, { name = "gitpython", specifier = ">=3.1.40" }, { name = "google-api-python-client", specifier = ">=2.142.0" }, { name = "google-auth-httplib2", specifier = ">=0.2.0" }, diff --git a/uv.lock b/uv.lock index 6f593f9fb857a..36ead8dbe9483 100644 --- a/uv.lock +++ b/uv.lock @@ -1889,8 +1889,8 @@ requires-dist = [ { name = "boto3", specifier = ">=1.37.2" }, { name = "click", specifier = ">=8.3.0" }, { name = "filelock", specifier = ">=3.13.0" }, - { name = "flit", specifier = ">=3.12.0" }, - { name = "flit-core", specifier = ">=3.12.0" }, + { name = "flit", specifier = ">=3.12.0,<4" }, + { name = "flit-core", specifier = ">=3.12.0,<4" }, { name = "gitpython", specifier = ">=3.1.40" }, { name = "google-api-python-client", specifier = ">=2.142.0" }, { name = "google-auth-httplib2", specifier = ">=0.2.0" },