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] = []