This is an automated email from the ASF dual-hosted git repository.
bugraoz93 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 336a1199a1c Increment version of airflowctl for RC (#67295)
336a1199a1c is described below
commit 336a1199a1c9200d0bbb49f07477bdd24fc222d1
Author: Bugra Ozturk <[email protected]>
AuthorDate: Sat May 23 20:25:46 2026 +0200
Increment version of airflowctl for RC (#67295)
* Increment version of airflowctl for RC
* Change airflow-core usage for ctl
* Change airflow-core usage for ctl and amend installation in docker
* Prepare airflowctl for tests in CI
* Amend install airflow and provider to cover airflowctl
---
.github/workflows/test-providers.yml | 4 ++++
Dockerfile | 7 +++++--
airflow-core/pyproject.toml | 2 +-
airflow-ctl/src/airflowctl/__init__.py | 2 +-
scripts/docker/install_from_docker_context_files.sh | 7 +++++--
scripts/in_container/install_airflow_and_providers.py | 15 ++++++++++++---
6 files changed, 28 insertions(+), 9 deletions(-)
diff --git a/.github/workflows/test-providers.yml
b/.github/workflows/test-providers.yml
index db1f31f2453..671497af234 100644
--- a/.github/workflows/test-providers.yml
+++ b/.github/workflows/test-providers.yml
@@ -128,6 +128,10 @@ jobs:
run: >
breeze release-management prepare-task-sdk-distributions
--distribution-format ${{ matrix.package-format }}
+ - name: "Prepare airflow-ctl package: ${{ matrix.package-format }}"
+ run: >
+ breeze release-management prepare-airflow-ctl-distributions
+ --distribution-format ${{ matrix.package-format }}
- name: "Verify ${{ matrix.package-format }} packages with twine"
run: |
uv tool uninstall twine || true
diff --git a/Dockerfile b/Dockerfile
index 1afcd732052..9d4e63d74ce 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1048,8 +1048,11 @@ function
install_airflow_and_providers_from_docker_context_files(){
install_airflow_core_distribution=("apache-airflow-core==${AIRFLOW_VERSION}")
fi
- # Find Provider/TaskSDK/CTL distributions in docker-context files
- readarray -t airflow_distributions< <(python
/scripts/docker/get_distribution_specs.py
/docker-context-files/apache?airflow?{providers,task?sdk,airflowctl}*.{whl,tar.gz}
2>/dev/null || true)
+ # Find Provider/TaskSDK/CTL distributions in docker-context files.
+ # NOTE: the ctl wheel is named ``apache_airflow_ctl-*.whl`` (distribution
+ # ``apache-airflow-ctl``), not ``apache_airflow_airflowctl-*.whl`` — the
+ # glob must say ``ctl``, not ``airflowctl``.
+ readarray -t airflow_distributions< <(python
/scripts/docker/get_distribution_specs.py
/docker-context-files/apache?airflow?{providers,task?sdk,ctl}*.{whl,tar.gz}
2>/dev/null || true)
echo
echo "${COLOR_BLUE}Found provider distributions in docker-context-files
folder: ${airflow_distributions[*]}${COLOR_RESET}"
echo
diff --git a/airflow-core/pyproject.toml b/airflow-core/pyproject.toml
index 3158a361246..783ac958fa5 100644
--- a/airflow-core/pyproject.toml
+++ b/airflow-core/pyproject.toml
@@ -150,7 +150,7 @@ dependencies = [
"universal-pathlib>=0.3.8",
"uuid6>=2024.7.10",
"apache-airflow-task-sdk<1.4.0,>=1.3.0",
- "apache-airflow-ctl<0.1.5,>=0.1.4",
+ "apache-airflow-ctl<0.1.6,>=0.1.5",
# pre-installed providers
"apache-airflow-providers-common-compat>=1.7.4",
"apache-airflow-providers-common-io>=1.6.3",
diff --git a/airflow-ctl/src/airflowctl/__init__.py
b/airflow-ctl/src/airflowctl/__init__.py
index d2dd19e81e2..a085e738d83 100644
--- a/airflow-ctl/src/airflowctl/__init__.py
+++ b/airflow-ctl/src/airflowctl/__init__.py
@@ -19,4 +19,4 @@ from __future__ import annotations
__path__ = __import__("pkgutil").extend_path(__path__, __name__)
-__version__ = "0.1.4"
+__version__ = "0.1.5"
diff --git a/scripts/docker/install_from_docker_context_files.sh
b/scripts/docker/install_from_docker_context_files.sh
index 5ce45267f8f..089b0f2d74b 100644
--- a/scripts/docker/install_from_docker_context_files.sh
+++ b/scripts/docker/install_from_docker_context_files.sh
@@ -85,8 +85,11 @@ function
install_airflow_and_providers_from_docker_context_files(){
install_airflow_core_distribution=("apache-airflow-core==${AIRFLOW_VERSION}")
fi
- # Find Provider/TaskSDK/CTL distributions in docker-context files
- readarray -t airflow_distributions< <(python
/scripts/docker/get_distribution_specs.py
/docker-context-files/apache?airflow?{providers,task?sdk,airflowctl}*.{whl,tar.gz}
2>/dev/null || true)
+ # Find Provider/TaskSDK/CTL distributions in docker-context files.
+ # NOTE: the ctl wheel is named ``apache_airflow_ctl-*.whl`` (distribution
+ # ``apache-airflow-ctl``), not ``apache_airflow_airflowctl-*.whl`` — the
+ # glob must say ``ctl``, not ``airflowctl``.
+ readarray -t airflow_distributions< <(python
/scripts/docker/get_distribution_specs.py
/docker-context-files/apache?airflow?{providers,task?sdk,ctl}*.{whl,tar.gz}
2>/dev/null || true)
echo
echo "${COLOR_BLUE}Found provider distributions in docker-context-files
folder: ${airflow_distributions[*]}${COLOR_RESET}"
echo
diff --git a/scripts/in_container/install_airflow_and_providers.py
b/scripts/in_container/install_airflow_and_providers.py
index c8223f3eeff..4f203e8c6c3 100755
--- a/scripts/in_container/install_airflow_and_providers.py
+++ b/scripts/in_container/install_airflow_and_providers.py
@@ -1183,9 +1183,11 @@ def
_install_airflow_ctl_with_constraints(installation_spec: InstallationSpec, g
"pip",
"install",
]
- # if airflow is also being installed we should add airflow to the
base_install_providers_cmd
- # to avoid accidentally upgrading airflow to a version that is different
from installed in the
- # previous step
+ # Install the ctl distribution itself, plus pin airflow alongside (if it's
being
+ # installed) so the resolver does not accidentally upgrade airflow to a
version
+ # different from the one installed in the previous step.
+ if installation_spec.airflow_ctl_distribution:
+
base_install_airflow_ctl_cmd.append(installation_spec.airflow_ctl_distribution)
if installation_spec.airflow_distribution:
base_install_airflow_ctl_cmd.append(installation_spec.airflow_distribution)
install_airflow_ctl_cmd = base_install_airflow_ctl_cmd.copy()
@@ -1246,6 +1248,13 @@ def
_install_only_airflow_airflow_core_task_sdk_with_constraints(
f"{installation_spec.airflow_task_sdk_distribution} with
constraints"
)
console.print()
+ if installation_spec.airflow_ctl_distribution:
+
base_install_airflow_cmd.append(installation_spec.airflow_ctl_distribution)
+ console.print(
+ f"\n[bright_blue]Installing airflow ctl distribution alongside
core: "
+ f"{installation_spec.airflow_ctl_distribution}"
+ )
+ console.print()
install_airflow_cmd = base_install_airflow_cmd.copy()
if installation_spec.airflow_constraints_location:
console.print(f"[bright_blue]Use constraints:
{installation_spec.airflow_constraints_location}")