This is an automated email from the ASF dual-hosted git repository. jedcunningham 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 b55022e2e97 Fix version validation script for building docker images (#50668) b55022e2e97 is described below commit b55022e2e9741c99a868a38f506a80720973e9f0 Author: Kaxil Naik <kaxiln...@apache.org> AuthorDate: Fri May 16 01:02:46 2025 +0530 Fix version validation script for building docker images (#50668) Example failure: https://github.com/apache/airflow/actions/runs/15053245013/job/42312930970 Previously, the script used string-based sorting of PyPI releases, which caused versions like 2.11.0 to be incorrectly excluded (e.g. sorted behind 2.9.x). This commit updates the logic to use semantic versioning via `packaging.version.Version`. Before: ``` ❯ uv run scripts/ci/airflow_version_check.py 2.11.0rc1 Version 2.11.0rc1 is not a valid Airflow version Available versions: (first available 30 versions): ['3.0.1rc1', '3.0.1', '3.0.0rc4', '3.0.0rc3', '3.0.0rc2', '3.0.0rc1.post4', '3.0.0rc1.post3', '3.0.0rc1.post2', '3.0.0rc1.post1', '3.0.0rc1', '3.0.0b4', '3.0.0', '2.9.3rc1', '2.9.3', '2.9.2rc1', '2.9.2', '2.9.1rc2', '2.9.1rc1', '2.9.1', '2.9.0rc3', '2.9.0rc2', '2.9.0rc1', '2.9.0b2', '2.9.0b1', '2.9.0', '2.8.4rc1', '2.8.4', '2.8.3rc1', '2.8.3', '2.8.2rc3'] ``` After: ``` ❯ uv run scripts/ci/airflow_version_check.py 2.11.0rc1 Checking constraints file: https://raw.githubusercontent.com/apache/airflow/constraints-2.11.0rc1/constraints-3.9.txt Constraints file found for version 2.11.0rc1, Python 3.9 airflowVersion=2.11.0rc1 airflowVersion=2.11.0rc1 skipLatest=true skipLatest=true ``` --- scripts/ci/airflow_version_check.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/scripts/ci/airflow_version_check.py b/scripts/ci/airflow_version_check.py index 6d2655fafce..3b6cf453651 100755 --- a/scripts/ci/airflow_version_check.py +++ b/scripts/ci/airflow_version_check.py @@ -31,7 +31,7 @@ import sys from pathlib import Path import requests -from packaging.version import Version +from packaging.version import Version, parse from rich.console import Console console = Console(color_system="standard", stderr=True, width=400) @@ -46,18 +46,19 @@ def check_airflow_version(airflow_version: Version) -> tuple[str, bool]: """ latest = False url = "https://pypi.org/pypi/apache-airflow/json" - max_versions_shown = 30 try: response = requests.get(url) response.raise_for_status() data = response.json() latest_version = Version(data["info"]["version"]) - valid_versions = list(reversed(data["releases"].keys()))[:max_versions_shown] - if str(airflow_version) not in valid_versions: - console.print(f"[red]Version {airflow_version} is not a valid Airflow version") - console.print( - f"Available versions: (first available {max_versions_shown} versions):", valid_versions - ) + all_versions = sorted( + (parse(v) for v in data["releases"].keys()), + reverse=True, + ) + if airflow_version not in all_versions: + console.print(f"[red]Version {airflow_version} is not a valid Airflow release version.") + console.print("[yellow]Available versions (latest 30 shown):") + console.print([str(v) for v in all_versions[:30]]) sys.exit(1) if airflow_version == latest_version: latest = True