This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch v3-0-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/v3-0-test by this push:
new d34dcc17392 Turn task-sdk into peer-citizen same as other doc packages
(#52892) (#52896)
d34dcc17392 is described below
commit d34dcc173921f25ea8c17df56b1aa16d3b30b1ff
Author: Jarek Potiuk <[email protected]>
AuthorDate: Fri Jul 4 22:40:31 2025 +0200
Turn task-sdk into peer-citizen same as other doc packages (#52892) (#52896)
The task-sdk package did not have full integration with airflow
docs:
* did not have inventory mapping
* did not have a way to refer to it via doc:`task-sdk:` directive
8 did not have a development link from the devel index
This PR fixes all that.
(cherry picked from commit 244af72323dda93c2fd51ca642f1b9e7547226e6)
---
airflow-core/docs/index.rst | 2 +-
.../src/airflow_breeze/utils/publish_docs_to_s3.py | 2 +-
dev/breeze/tests/test_packages.py | 2 ++
.../src/sphinx_exts/airflow_intersphinx.py | 2 +-
.../docs_build/dev_index_template.html.jinja2 | 34 ++++++++++++++--------
.../src/sphinx_exts/docs_build/docs_builder.py | 3 ++
.../sphinx_exts/docs_build/fetch_inventories.py | 16 ++++++++--
.../src/sphinx_exts/docs_build/package_filter.py | 2 ++
task-sdk/docs/conf.py | 9 ++++++
9 files changed, 54 insertions(+), 18 deletions(-)
diff --git a/airflow-core/docs/index.rst b/airflow-core/docs/index.rst
index 1927774703f..d5fe1123044 100644
--- a/airflow-core/docs/index.rst
+++ b/airflow-core/docs/index.rst
@@ -39,7 +39,7 @@ Task SDK
For Airflow Task SDK, see the standalone reference & tutorial site:
- https://airflow.apache.org/docs/task-sdk/stable/
+:doc:`task-sdk:index`
Dags
-----------------------------------------
diff --git a/dev/breeze/src/airflow_breeze/utils/publish_docs_to_s3.py
b/dev/breeze/src/airflow_breeze/utils/publish_docs_to_s3.py
index eb64174e8df..42db0bc7165 100644
--- a/dev/breeze/src/airflow_breeze/utils/publish_docs_to_s3.py
+++ b/dev/breeze/src/airflow_breeze/utils/publish_docs_to_s3.py
@@ -30,7 +30,7 @@ from airflow_breeze.utils.parallel import
check_async_run_results, run_with_pool
PROVIDER_NAME_FORMAT = "apache-airflow-providers-{}"
-NON_SHORT_NAME_PACKAGES = ["docker-stack", "helm-chart", "apache-airflow"]
+NON_SHORT_NAME_PACKAGES = ["docker-stack", "helm-chart", "apache-airflow",
"task-sdk"]
PACKAGES_METADATA_EXCLUDE_NAMES = ["docker-stack", "apache-airflow-providers"]
diff --git a/dev/breeze/tests/test_packages.py
b/dev/breeze/tests/test_packages.py
index 420761a2995..fe9d32396cd 100644
--- a/dev/breeze/tests/test_packages.py
+++ b/dev/breeze/tests/test_packages.py
@@ -84,6 +84,7 @@ def
test_get_available_packages_include_non_provider_doc_packages_and_all_provid
def test_get_short_package_name():
assert get_short_package_name("apache-airflow") == "apache-airflow"
assert get_short_package_name("docker-stack") == "docker-stack"
+ assert get_short_package_name("task-sdk") == "task-sdk"
assert get_short_package_name("apache-airflow-providers-amazon") ==
"amazon"
assert get_short_package_name("apache-airflow-providers-apache-hdfs") ==
"apache.hdfs"
@@ -96,6 +97,7 @@ def test_error_on_get_short_package_name():
def test_get_long_package_name():
assert get_long_package_name("apache-airflow") == "apache-airflow"
assert get_long_package_name("docker-stack") == "docker-stack"
+ assert get_long_package_name("task-sdk") == "task-sdk"
assert get_long_package_name("amazon") == "apache-airflow-providers-amazon"
assert get_long_package_name("apache.hdfs") ==
"apache-airflow-providers-apache-hdfs"
diff --git a/devel-common/src/sphinx_exts/airflow_intersphinx.py
b/devel-common/src/sphinx_exts/airflow_intersphinx.py
index da32bf796cf..41f8d36659b 100644
--- a/devel-common/src/sphinx_exts/airflow_intersphinx.py
+++ b/devel-common/src/sphinx_exts/airflow_intersphinx.py
@@ -63,7 +63,7 @@ def _generate_provider_intersphinx_mapping() -> dict[str,
tuple[str, tuple[str,
provider_base_url,
(doc_inventory.as_posix() if doc_inventory.exists() else
cache_inventory.as_posix(),),
)
- for pkg_name in ["apache-airflow", "helm-chart"]:
+ for pkg_name in ["apache-airflow", "helm-chart", "task-sdk"]:
if os.environ.get("AIRFLOW_PACKAGE_NAME") == pkg_name:
continue
doc_inventory = GENERATED_PATH / "_build" / "docs" / pkg_name /
current_version / "objects.inv"
diff --git
a/devel-common/src/sphinx_exts/docs_build/dev_index_template.html.jinja2
b/devel-common/src/sphinx_exts/docs_build/dev_index_template.html.jinja2
index f4a4dcabb53..d5ea9176756 100644
--- a/devel-common/src/sphinx_exts/docs_build/dev_index_template.html.jinja2
+++ b/devel-common/src/sphinx_exts/docs_build/dev_index_template.html.jinja2
@@ -55,19 +55,16 @@
</p>
</div>
</div>
- <div class="row">
- <div class="col">
- <h2><a href="/docs/apache-airflow-providers/index.html">Providers
packages</a></h2>
- <p>
- Providers packages include integrations with third party integrations.
They are updated independently of the Apache Airflow core.
- </p>
- <ul class="list-providers">
- {% for provider in providers %}
- <li><a href="/docs/{{ provider['package-name']
}}/stable/index.html"><code>{{ provider['name'] }}</code></a></li>
- {% endfor %}
- </ul>
+
+ <div class="row">
+ <div class="col">
+ <h2><a href="/docs/task-sdk/stable/index.html">Task SDK</a></h2>
+ <p>
+ Task-SDK interface that is used to communicate with airflow
core from other components.
+ </p>
+ </div>
</div>
- </div>
+
<div class="row">
<div class="col-md order-md-1">
<img src="/docs/docker-stack/_images/docker-logo.png" alt="Docker -
logo" width="100" height="86">
@@ -90,6 +87,19 @@
</p>
</div>
</div>
+ <div class="row">
+ <div class="col">
+ <h2><a href="/docs/apache-airflow-providers/index.html">Providers
packages</a></h2>
+ <p>
+ Providers packages include integrations with third party
integrations. They are updated independently of the Apache Airflow core.
+ </p>
+ <ul class="list-providers">
+ {% for provider in providers %}
+ <li><a href="/docs/{{ provider['package-name']
}}/stable/index.html"><code>{{ provider['name'] }}</code></a></li>
+ {% endfor %}
+ </ul>
+ </div>
+ </div>
</div>
</body>
</html>
diff --git a/devel-common/src/sphinx_exts/docs_build/docs_builder.py
b/devel-common/src/sphinx_exts/docs_build/docs_builder.py
index 4b4c39b96d0..4cdc5edd637 100644
--- a/devel-common/src/sphinx_exts/docs_build/docs_builder.py
+++ b/devel-common/src/sphinx_exts/docs_build/docs_builder.py
@@ -49,6 +49,7 @@ class AirflowDocsBuilder:
self.is_airflow = False
self.is_chart = False
self.is_docker_stack = False
+ self.is_task_sdk = False
self.is_providers_summary = False
self.is_autobuild = False
if self.package_name.startswith("apache-airflow-providers-"):
@@ -61,6 +62,8 @@ class AirflowDocsBuilder:
self.is_airflow = True
if self.package_name == "helm-chart":
self.is_chart = True
+ if self.package_name == "task-sdk":
+ self.is_task_sdk = True
if self.package_name == "docker-stack":
self.is_docker_stack = True
if self.package_name == "apache-airflow-providers":
diff --git a/devel-common/src/sphinx_exts/docs_build/fetch_inventories.py
b/devel-common/src/sphinx_exts/docs_build/fetch_inventories.py
index f9aa771bda7..7975b81f6a1 100644
--- a/devel-common/src/sphinx_exts/docs_build/fetch_inventories.py
+++ b/devel-common/src/sphinx_exts/docs_build/fetch_inventories.py
@@ -93,7 +93,13 @@ def _is_outdated(path: str):
return delta > datetime.timedelta(hours=12)
-def fetch_inventories(clean_build: bool) -> list[str]:
+def should_be_refreshed(pkg_name: str, refresh_airflow_inventories: bool) ->
bool:
+ if pkg_name in ["helm-chart", "docker-stack", "task-sdk"] or
pkg_name.startswith("apache-airflow"):
+ return refresh_airflow_inventories
+ return False
+
+
+def fetch_inventories(clean_build: bool, refresh_airflow_inventories: bool =
False) -> list[str]:
"""Fetch all inventories for Airflow documentation packages and store in
cache."""
if clean_build:
shutil.rmtree(CACHE_PATH)
@@ -111,7 +117,7 @@ def fetch_inventories(clean_build: bool) -> list[str]:
(CACHE_PATH / pkg_name / "objects.inv").as_posix(),
)
)
- for pkg_name in ["apache-airflow", "helm-chart"]:
+ for pkg_name in ["apache-airflow", "helm-chart", "task-sdk"]:
to_download.append(
(
pkg_name,
@@ -136,7 +142,11 @@ def fetch_inventories(clean_build: bool) -> list[str]:
for pkg_name, doc_url in THIRD_PARTY_INDEXES.items()
)
- to_download = [(pkg_name, url, path) for pkg_name, url, path in
to_download if _is_outdated(path)]
+ to_download = [
+ (pkg_name, url, path)
+ for pkg_name, url, path in to_download
+ if _is_outdated(path) or should_be_refreshed(pkg_name,
refresh_airflow_inventories)
+ ]
if not to_download:
print("Nothing to do")
return []
diff --git a/devel-common/src/sphinx_exts/docs_build/package_filter.py
b/devel-common/src/sphinx_exts/docs_build/package_filter.py
index acdd0407ef2..f4d7c037232 100644
--- a/devel-common/src/sphinx_exts/docs_build/package_filter.py
+++ b/devel-common/src/sphinx_exts/docs_build/package_filter.py
@@ -58,6 +58,8 @@ def find_packages_to_build(available_packages: list[str],
package_filters: list[
package_name = "apache-airflow"
elif folder_name == "chart":
package_name = "helm-chart"
+ elif folder_name == "task-sdk":
+ package_name = "task-sdk"
else:
try:
import tomllib
diff --git a/task-sdk/docs/conf.py b/task-sdk/docs/conf.py
index 44f9d691b5f..b83fe2f1578 100644
--- a/task-sdk/docs/conf.py
+++ b/task-sdk/docs/conf.py
@@ -18,6 +18,7 @@
# under the License.
from __future__ import annotations
+import os
import sys
from pathlib import Path
@@ -35,9 +36,17 @@ CONF_DIR = Path(__file__).parent.absolute()
sys.path.insert(0, str(CONF_DIR.parent.parent.joinpath("devel-common", "src",
"sphinx_exts").resolve()))
sys.path.insert(0, str(CONF_DIR.parent.joinpath("src").resolve()))
+PACKAGE_NAME = "task-sdk"
+os.environ["AIRFLOW_PACKAGE_NAME"] = PACKAGE_NAME
+
PACKAGE_VERSION = airflow.sdk.__version__
project = "Apache Airflow Task SDK"
+# # The version info for the project you're documenting
+version = PACKAGE_VERSION
+# The full version, including alpha/beta/rc tags.
+release = PACKAGE_VERSION
+
language = "en"
locale_dirs: list[str] = []