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 <ja...@potiuk.com>
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] = []

Reply via email to