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 4510a0f630b Install airflowctl into airflow core (#64943)
4510a0f630b is described below

commit 4510a0f630b146e6b2cd6db4e9a2860ba918b9ad
Author: Pratiksha Badheka <[email protected]>
AuthorDate: Wed May 13 01:44:06 2026 +0530

    Install airflowctl into airflow core (#64943)
    
    * install airflowctl into airflowcore
    
    * some small nits in pyproject.toml and tests
    
    * update version constraints for airflowctl in pyproject.toml
    
    * move the tests to to basic_tests
---
 airflow-core/pyproject.toml                        |  2 ++
 .../basic_tests/test_airflowctl_imports.py         | 38 ++++++++++++++++++++++
 uv.lock                                            |  2 ++
 3 files changed, 42 insertions(+)

diff --git a/airflow-core/pyproject.toml b/airflow-core/pyproject.toml
index c23b6f8d4b4..2bbf7f40e2e 100644
--- a/airflow-core/pyproject.toml
+++ b/airflow-core/pyproject.toml
@@ -150,6 +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",
     # pre-installed providers
     "apache-airflow-providers-common-compat>=1.7.4",
     "apache-airflow-providers-common-io>=1.6.3",
@@ -322,6 +323,7 @@ required-version = ">=0.11.8"
 
 [tool.uv.sources]
 apache-airflow-core = {workspace = true}
+apache-airflow-ctl = {workspace = true}
 apache-airflow-devel-common = { workspace = true }
 
 [tool.airflow]
diff --git 
a/airflow-e2e-tests/tests/airflow_e2e_tests/basic_tests/test_airflowctl_imports.py
 
b/airflow-e2e-tests/tests/airflow_e2e_tests/basic_tests/test_airflowctl_imports.py
new file mode 100644
index 00000000000..f7957f1a576
--- /dev/null
+++ 
b/airflow-e2e-tests/tests/airflow_e2e_tests/basic_tests/test_airflowctl_imports.py
@@ -0,0 +1,38 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+import subprocess
+import sys
+
+
+def test_airflowctl_is_importable():
+    # checks if airflowctl imports correctly
+    result = subprocess.run(
+        [
+            sys.executable,
+            "-c",
+            "import airflowctl; print('airflowctl imported successfully')",
+        ],
+        capture_output=True,
+        text=True,
+        check=False,
+    )
+    assert result.returncode == 0, (
+        f"airflowctl import failed!\nstdout: {result.stdout}\nstderr: 
{result.stderr}"
+    )
diff --git a/uv.lock b/uv.lock
index 692261ee168..03fd7190abf 100644
--- a/uv.lock
+++ b/uv.lock
@@ -1798,6 +1798,7 @@ dependencies = [
     { name = "a2wsgi" },
     { name = "aiosqlite" },
     { name = "alembic" },
+    { name = "apache-airflow-ctl" },
     { name = "apache-airflow-providers-common-compat" },
     { name = "apache-airflow-providers-common-io" },
     { name = "apache-airflow-providers-common-sql" },
@@ -1925,6 +1926,7 @@ requires-dist = [
     { name = "aiosqlite", specifier = ">=0.20.0,<0.22.0" },
     { name = "alembic", specifier = ">=1.13.1,<2.0" },
     { name = "apache-airflow-core", extras = ["graphviz", "gunicorn", 
"kerberos", "otel", "statsd"], marker = "extra == 'all'", editable = 
"airflow-core" },
+    { name = "apache-airflow-ctl", editable = "airflow-ctl" },
     { name = "apache-airflow-providers-common-compat", editable = 
"providers/common/compat" },
     { name = "apache-airflow-providers-common-io", editable = 
"providers/common/io" },
     { name = "apache-airflow-providers-common-sql", editable = 
"providers/common/sql" },

Reply via email to