This is an automated email from the ASF dual-hosted git repository.
vatsrahul1001 pushed a commit to branch v3-4-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/v3-4-test by this push:
new fe0af19a441 [v3-4-test] Exclude the current unreleased branch version
from the providers compatibility matrix (#74997) (#75012)
fe0af19a441 is described below
commit fe0af19a4412b6bf7db9f2e774259c6400956d62
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Sun Oct 18 22:40:20 2026 +0530
[v3-4-test] Exclude the current unreleased branch version from the
providers compatibility matrix (#74997) (#75012)
* Exclude the current unreleased branch version from the providers
compatibility matrix
The version-bump commit that opens a vX-Y-test branch adds the new X.Y.0 to
PROVIDERS_COMPATIBILITY_TESTS_MATRIX, but that version is not released until
GA. Until then the OpenLineage and provider compatibility jobs try to pull
apache/airflow:X.Y.0 (image and PyPI package) and fail for the whole beta and
RC phase, leaving the branch CI red when it needs to be green to cut the RC.
Drop the matrix entry whose airflow-version equals the current branch
version so those jobs skip it while unreleased. The entry runs again once the
branch bumps to the next patch and X.Y.0 is a real release, so no coverage is
lost on main or on released versions.
* Autospec the get_airflow_version mock in the compat matrix test
Generated-by: Claude Opus 5
---------
(cherry picked from commit 7d9e14b16637bcd45b034c50079f8660e37e04e3)
Co-authored-by: Rahul Vats <[email protected]>
Co-authored-by: Rahul Vats <[email protected]>
Co-authored-by: Jarek Potiuk <[email protected]>
---
dev/breeze/doc/ci/04_selective_checks.md | 2 +-
.../src/airflow_breeze/utils/selective_checks.py | 14 +++++++-
dev/breeze/tests/test_selective_checks.py | 38 +++++++++++++++++++++-
3 files changed, 51 insertions(+), 3 deletions(-)
diff --git a/dev/breeze/doc/ci/04_selective_checks.md
b/dev/breeze/doc/ci/04_selective_checks.md
index f2955c32214..2f788e669f4 100644
--- a/dev/breeze/doc/ci/04_selective_checks.md
+++ b/dev/breeze/doc/ci/04_selective_checks.md
@@ -635,7 +635,7 @@ GitHub Actions to pass the list of parameters to a command
to execute
| postgres-exclude | Which versions of
Postgres to exclude for tests as JSON array
| [] | |
| postgres-versions | Which versions of
Postgres to use for tests as JSON array
| \['12'\] | |
| prod-image-build | Whether PROD image
build is needed
| true | |
-| providers-compatibility-tests-matrix | Matrix of
providers compatibility tests: (python_version, airflow_version,
removed_providers) | \[{}\] | |
+| providers-compatibility-tests-matrix | Matrix of
providers compatibility tests: (python_version, airflow_version,
removed_providers). Excludes unbuilt python versions and the entry whose
airflow_version equals the current branch version (unreleased on a vX-Y-test
branch until GA) | \[{}\] | |
| providers-test-types-list-as-strings-in-json | Which test types
should be run for unit tests for providers
| Providers Providers\[-google\] | * |
| pyproject-toml-changed | When
pyproject.toml changed in the PR.
| false | |
| python-versions | List of python
versions to use for that build
| \['3.11'\] | |
diff --git a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
index 511ebc96e01..82f18b2df9d 100644
--- a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
+++ b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
@@ -66,6 +66,7 @@ from airflow_breeze.global_constants import (
SelectiveTestType,
all_helm_test_packages,
all_selective_core_test_types,
+ get_airflow_version,
providers_test_type,
)
from airflow_breeze.utils.console import console_print, get_console
@@ -2132,12 +2133,23 @@ class SelectiveChecks:
@cached_property
def providers_compatibility_tests_matrix(self) -> str:
- """Provider compatibility input matrix for the current run. Filter out
python versions not built"""
+ """Provider compatibility input matrix for the current run.
+
+ Filters out python versions that are not built. Also drops the entry
whose
+ ``airflow-version`` matches the current branch version: on a
``vX-Y-test``
+ branch the just-bumped ``X.Y.0`` is added to the matrix by the
version-bump
+ commit before it is released, so compat jobs that pull the released
+ ``apache/airflow:X.Y.0`` image/package would fail until GA. The entry
starts
+ running again once the branch bumps to the next patch (``X.Y.1``) and
``X.Y.0``
+ is a real release.
+ """
+ current_airflow_version = get_airflow_version()
return json.dumps(
[
check
for check in PROVIDERS_COMPATIBILITY_TESTS_MATRIX
if check["python-version"] in self.python_versions
+ and check["airflow-version"] != current_airflow_version
]
)
diff --git a/dev/breeze/tests/test_selective_checks.py
b/dev/breeze/tests/test_selective_checks.py
index a4846a09756..81a233db9d2 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -38,6 +38,7 @@ from airflow_breeze.global_constants import (
NUMBER_OF_LOW_DEP_SLICES,
PROVIDERS_COMPATIBILITY_TESTS_MATRIX,
GithubEvents,
+ get_airflow_version,
)
from airflow_breeze.utils.functools_cache import clearable_cache
from airflow_breeze.utils.packages import get_available_distributions
@@ -3524,6 +3525,7 @@ def test_has_migrations(files: tuple[str, ...],
has_migrations: bool):
check
for check in PROVIDERS_COMPATIBILITY_TESTS_MATRIX
if check["python-version"] ==
DEFAULT_PYTHON_MAJOR_MINOR_VERSION
+ and check["airflow-version"] != get_airflow_version()
]
),
},
@@ -3531,7 +3533,15 @@ def test_has_migrations(files: tuple[str, ...],
has_migrations: bool):
),
pytest.param(
("all versions",),
- {"providers-compatibility-tests-matrix":
json.dumps(PROVIDERS_COMPATIBILITY_TESTS_MATRIX)},
+ {
+ "providers-compatibility-tests-matrix": json.dumps(
+ [
+ check
+ for check in PROVIDERS_COMPATIBILITY_TESTS_MATRIX
+ if check["airflow-version"] != get_airflow_version()
+ ]
+ )
+ },
id="full tests",
),
],
@@ -3547,6 +3557,32 @@ def test_provider_compatibility_checks(labels:
tuple[str, ...], expected_outputs
assert_outputs_are_printed(expected_outputs, str(stderr))
+@patch("airflow_breeze.utils.selective_checks.get_airflow_version",
autospec=True)
+def
test_provider_compatibility_matrix_excludes_current_unreleased_version(mock_get_airflow_version):
+ # The current branch's own version is added to the matrix by the
version-bump commit before it is
+ # released; it must be excluded so compat jobs don't try to pull an
image/package that is not published yet.
+ current_version =
PROVIDERS_COMPATIBILITY_TESTS_MATRIX[-1]["airflow-version"]
+ mock_get_airflow_version.return_value = current_version
+ stderr = SelectiveChecks(
+ files=(),
+ commit_ref=NEUTRAL_COMMIT,
+ github_event=GithubEvents.PULL_REQUEST,
+ pr_labels=("all versions",),
+ default_branch="main",
+ )
+ expected = json.dumps(
+ [
+ check
+ for check in PROVIDERS_COMPATIBILITY_TESTS_MATRIX
+ if check["airflow-version"] != current_version
+ ]
+ )
+ assert_outputs_are_printed({"providers-compatibility-tests-matrix":
expected}, str(stderr))
+ assert f'"airflow-version": "{current_version}"' not in
get_outputs_from_stderr(str(stderr)).get(
+ "providers-compatibility-tests-matrix", ""
+ )
+
+
@pytest.mark.parametrize(
("files", "expected_outputs", "default_branch", "pr_labels"),
[