This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a commit to branch v3-4-test
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/v3-4-test by this push:
     new 6a4d7181389 [v3-4-test] Always build airflow core and task sdk docs 
together in CI (#76443) (#76794)
6a4d7181389 is described below

commit 6a4d7181389fec26013aaf5402a8d3f000c29c91
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Tue Nov 10 04:41:16 2026 +0100

    [v3-4-test] Always build airflow core and task sdk docs together in CI 
(#76443) (#76794)
    
    (cherry picked from commit d23f21fa312b5f39f03dd10d372c0dd779956868)
    
    Co-authored-by: Amogh Desai <[email protected]>
---
 dev/breeze/doc/ci/04_selective_checks.md            |  4 +++-
 .../src/airflow_breeze/utils/selective_checks.py    | 12 ++++++++++--
 dev/breeze/tests/test_selective_checks.py           | 21 ++++++++++++++-------
 dev/breeze/tests/test_verification_plan.py          |  2 +-
 dev/breeze/tests/test_verify_commands.py            |  2 +-
 5 files changed, 29 insertions(+), 12 deletions(-)

diff --git a/dev/breeze/doc/ci/04_selective_checks.md 
b/dev/breeze/doc/ci/04_selective_checks.md
index 54813308355..4c14a33e999 100644
--- a/dev/breeze/doc/ci/04_selective_checks.md
+++ b/dev/breeze/doc/ci/04_selective_checks.md
@@ -598,7 +598,9 @@ together using `pytest-xdist` (pytest-xdist distributes the 
tests among parallel
 * If docs are build, the `docs-list-as-string` will determine which docs 
packages to build. This is based on
   several criteria: if any of the airflow core, charts, docker-stack, Apache 
Airflow Mypy, providers files or
   docs have changed, then corresponding packages are built (including 
cross-dependent providers). If any of the core files
-  changed, also providers docs are built because all providers depend on 
airflow docs. If any of the docs
+  changed, also providers docs are built because all providers depend on 
airflow docs. The `apache-airflow`
+  and `task-sdk` packages are always built together, because they release 
together and their docs can link
+  to each other's pages before those pages are published. If any of the docs
   build python files changed or when build is "canary" type in main - all docs 
packages are built.
 
 ## Skipping prek hooks (Static checks)
diff --git a/dev/breeze/src/airflow_breeze/utils/selective_checks.py 
b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
index 6d235b39713..f8c3524e801 100644
--- a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
+++ b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
@@ -2190,7 +2190,15 @@ class SelectiveChecks:
         ):
             return _ALL_DOCS_LIST
         packages = []
-        if any(file.startswith(("airflow-core/src/airflow/", 
"airflow-core/docs/")) for file in self._files):
+        # Core and Task SDK release together, so either side's docs may link 
to a page in the
+        # other that is not published yet. Building both resolves those links 
locally.
+        core_or_task_sdk_changed = any(
+            file.startswith(
+                ("airflow-core/src/airflow/", "airflow-core/docs/", 
"task-sdk/src/", "task-sdk/docs/")
+            )
+            for file in self._files
+        )
+        if core_or_task_sdk_changed:
             packages.append("apache-airflow")
         if any(file.startswith("providers-summary-docs/") for file in 
self._files):
             packages.append("apache-airflow-providers")
@@ -2198,7 +2206,7 @@ class SelectiveChecks:
             packages.append("helm-chart")
         if any(file.startswith("docker-stack-docs") for file in self._files):
             packages.append("docker-stack")
-        if any(file.startswith("task-sdk/src/") for file in self._files):
+        if core_or_task_sdk_changed:
             packages.append("task-sdk")
         if any(file.startswith("airflow-ctl/") for file in self._files):
             packages.append("apache-airflow-ctl")
diff --git a/dev/breeze/tests/test_selective_checks.py 
b/dev/breeze/tests/test_selective_checks.py
index fa31f782b16..8ec11a13d1c 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -3403,7 +3403,7 @@ def test_expected_output_fork_push(
                 "run-unit-tests": "true",
                 "skip-providers-tests": "false",
                 "docs-build": "true",
-                "docs-list-as-string": "apache-airflow helm-chart amazon 
apache.beam apache.cassandra "
+                "docs-list-as-string": "apache-airflow helm-chart task-sdk 
amazon apache.beam apache.cassandra "
                 "apache.kafka cncf.kubernetes common.ai common.compat 
common.messaging common.sql databricks facebook google hashicorp http 
microsoft.azure "
                 "microsoft.mssql mongo mysql openlineage oracle postgres "
                 "presto salesforce samba sftp ssh standard trino",
@@ -3451,7 +3451,7 @@ def test_expected_output_fork_push(
                 "run-unit-tests": "true",
                 "skip-providers-tests": "true",
                 "docs-build": "true",
-                "docs-list-as-string": "apache-airflow",
+                "docs-list-as-string": "apache-airflow task-sdk",
                 "skip-prek-hooks": (
                     
"check-provider-yaml-valid,check-ts-sdk-supervisor-schema,identity,ktlint,lint-helm-chart,"
                     
"mypy-airflow-ctl,mypy-airflow-ctl-tests,mypy-airflow-e2e-tests,"
@@ -3736,7 +3736,7 @@ def test_upgrade_to_newer_dependencies(
         pytest.param(
             ("providers/airbyte/docs/some_file.rst", 
"airflow-core/docs/docs.rst"),
             {
-                "docs-list-as-string": "apache-airflow airbyte common.compat",
+                "docs-list-as-string": "apache-airflow task-sdk airbyte 
common.compat",
             },
             id="Airbyte provider and airflow core docs changed",
         ),
@@ -3747,17 +3747,24 @@ def test_upgrade_to_newer_dependencies(
                 "providers-summary-docs/docs.rst",
             ),
             {
-                "docs-list-as-string": "apache-airflow 
apache-airflow-providers airbyte common.compat",
+                "docs-list-as-string": "apache-airflow 
apache-airflow-providers task-sdk airbyte common.compat",
             },
             id="Airbyte provider and airflow core and common provider docs 
changed",
         ),
         pytest.param(
             ("airflow-core/docs/docs.rst",),
             {
-                "docs-list-as-string": "apache-airflow",
+                "docs-list-as-string": "apache-airflow task-sdk",
             },
             id="Only Airflow docs changed",
         ),
+        pytest.param(
+            ("task-sdk/docs/index.rst",),
+            {
+                "docs-list-as-string": "apache-airflow task-sdk",
+            },
+            id="Only Task SDK docs changed",
+        ),
         pytest.param(
             ("dev/mypy/docs/index.rst",),
             {
@@ -3780,7 +3787,7 @@ def test_upgrade_to_newer_dependencies(
         pytest.param(
             ("airflow-core/src/airflow/test.py",),
             {
-                "docs-list-as-string": "apache-airflow",
+                "docs-list-as-string": "apache-airflow task-sdk",
             },
             id="Core files changed. Apache-Airflow docs should also be built",
         ),
@@ -3792,7 +3799,7 @@ def test_upgrade_to_newer_dependencies(
         pytest.param(
             ("airflow-core/src/airflow/test.py", "chart/airflow/values.yaml"),
             {
-                "docs-list-as-string": "apache-airflow helm-chart",
+                "docs-list-as-string": "apache-airflow helm-chart task-sdk",
             },
             id="Core files and helm chart files changed. Apache Airflow and 
helm chart docs to build",
         ),
diff --git a/dev/breeze/tests/test_verification_plan.py 
b/dev/breeze/tests/test_verification_plan.py
index 6a5d10250d3..77e1dd92b0f 100644
--- a/dev/breeze/tests/test_verification_plan.py
+++ b/dev/breeze/tests/test_verification_plan.py
@@ -83,7 +83,7 @@ def test_docs_only_change_mirrors_the_ci_cell():
     files = ("airflow-core/docs/index.rst",)
     sc = _selective_checks(files)
     result = build_local_verification_plan(sc, files, "main", 
full_tests_needed=False)
-    assert [item["command"] for item in result["items"]] == ["breeze 
build-docs apache-airflow"]
+    assert [item["command"] for item in result["items"]] == ["breeze 
build-docs apache-airflow task-sdk"]
 
 
 def test_core_change_splits_db_and_non_db_cells():
diff --git a/dev/breeze/tests/test_verify_commands.py 
b/dev/breeze/tests/test_verify_commands.py
index 005f9962086..999cf03756d 100644
--- a/dev/breeze/tests/test_verify_commands.py
+++ b/dev/breeze/tests/test_verify_commands.py
@@ -99,7 +99,7 @@ def test_json_output_keeps_stdout_parseable(mock_files, 
monkeypatch):
     }
     assert payload["changed_files"] == ["airflow-core/docs/index.rst"]
     assert payload["items"] == [
-        {"kind": "docs", "command": "breeze build-docs apache-airflow", 
"runs_in": "breeze"}
+        {"kind": "docs", "command": "breeze build-docs apache-airflow 
task-sdk", "runs_in": "breeze"}
     ]
 
 

Reply via email to