This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new b1667f3e25c Skip Airflow 2 constraints for providers released after
May 2025 (#62800)
b1667f3e25c is described below
commit b1667f3e25c8878e4a9152dadfbcbee4424ea8a4
Author: Jarek Potiuk <[email protected]>
AuthorDate: Tue Mar 3 18:35:20 2026 +0100
Skip Airflow 2 constraints for providers released after May 2025 (#62800)
Providers released from May 2025 onward only target Airflow 3,
so scanning Airflow 2.x constraint files for them is unnecessary work
and can produce misleading associations.
The fab provider 1.5.* series is exempt because it still ships
backport fixes for Airflow 2.
Co-authored-by: Claude Opus 4.6 <[email protected]>
---
.../src/airflow_breeze/utils/provider_dependencies.py | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/dev/breeze/src/airflow_breeze/utils/provider_dependencies.py
b/dev/breeze/src/airflow_breeze/utils/provider_dependencies.py
index f7af453c68d..d7aa55a0727 100644
--- a/dev/breeze/src/airflow_breeze/utils/provider_dependencies.py
+++ b/dev/breeze/src/airflow_breeze/utils/provider_dependencies.py
@@ -324,9 +324,20 @@ def generate_providers_metadata_for_provider(
get_console().print(
f"[info]Checking provider {provider_id} version
{current_provider_version} released on {provider_date_released}"
)
- airflow_date_released = airflow_release_dates[all_airflow_releases[0]]
+ # For providers released after May 2025, skip Airflow 2.x constraint
files —
+ # those providers only target Airflow 3. The fab provider 1.5.*
series is exempt
+ # because it still ships backport fixes for Airflow 2.
+ skip_airflow_2 = provider_date_released >= "2025-05-01" and not (
+ provider_id == "fab" and
current_provider_version.startswith("1.5.")
+ )
+ effective_airflow_releases = (
+ [v for v in all_airflow_releases if not v.startswith("2.")]
+ if skip_airflow_2
+ else all_airflow_releases
+ )
+ airflow_date_released =
airflow_release_dates[effective_airflow_releases[0]]
last_airflow_version = START_AIRFLOW_VERSION_FROM
- for airflow_version in all_airflow_releases:
+ for airflow_version in effective_airflow_releases:
airflow_date_released = airflow_release_dates[airflow_version]
if get_verbose():
get_console().print(
@@ -379,7 +390,7 @@ def generate_providers_metadata_for_provider(
if last_airflow_version == START_AIRFLOW_VERSION_FROM:
# If we did not find any Airflow version that is associated with
this provider version
# we will add the latest released Airflow version
- last_airflow_version = all_airflow_releases[-1]
+ last_airflow_version = effective_airflow_releases[-1]
old_provider_metadata_for_version =
old_provider_metadata.get(current_provider_version, {})
new_provider_metadata_for_version = {
"associated_airflow_version": last_airflow_version,