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

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


The following commit(s) were added to refs/heads/v3-3-test by this push:
     new 1797fceb648 [v3-3-test] Run OTel integration tests when span-emitting 
task runner code changes (#69250) (#69285)
1797fceb648 is described below

commit 1797fceb64809a40a51f8e3a2d0b31bdb9697b67
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Jul 3 22:31:26 2026 +0200

    [v3-3-test] Run OTel integration tests when span-emitting task runner code 
changes (#69250) (#69285)
    
    The otel core integration was only triggered by observability sources,
    so PRs changing the spans the task runner emits (like #67877) or the
    otel integration tests themselves passed CI without running the tests
    that assert the span hierarchy, and breakage surfaced only in canary
    builds.
    (cherry picked from commit 529843127c79e4c8a496275e4344f655b6661468)
    
    Co-authored-by: Jason(Zhe-You) Liu 
<[email protected]>
    Co-authored-by: Jarek Potiuk <[email protected]>
---
 dev/breeze/doc/ci/04_selective_checks.md                | 1 +
 dev/breeze/src/airflow_breeze/utils/selective_checks.py | 4 ++++
 dev/breeze/tests/test_selective_checks.py               | 2 ++
 3 files changed, 7 insertions(+)

diff --git a/dev/breeze/doc/ci/04_selective_checks.md 
b/dev/breeze/doc/ci/04_selective_checks.md
index 5dbaf289f9e..67374350ded 100644
--- a/dev/breeze/doc/ci/04_selective_checks.md
+++ b/dev/breeze/doc/ci/04_selective_checks.md
@@ -244,6 +244,7 @@ representative examples (file → effect):
 | `scripts/ci/prek/check_*.py` (static-check hook)       | CI image + static 
checks, **no full matrix**                         | prek hooks are static 
checks → `Prek files` carve-out |
 | the generated OpenAPI spec                             | **full matrix**     
                                                 | the API *contract* ripples 
to UI codegen + every client |
 | `chart/templates/...yaml` (on `main`)                  | `run_helm_tests` (+ 
PROD image)                                      | matches `HELM_FILES`; Helm 
tests only on `main` |
+| `task-sdk/.../task_runner.py` or `airflow-core/tests/integration/otel/...` | 
the `otel` core integration                       | matches `OTEL_FILES`; the 
otel integration tests assert the span hierarchy task_runner emits |
 | `airflow-core/src/airflow/ui/...tsx` only              | `run_ui_tests`, 
**no** unit tests                                    | "only new-UI files" 
short-circuit skips Python unit tests |
 
 The "complexity" you feel reading the code is just *many* such rules stacked 
up — each one on its own
diff --git a/dev/breeze/src/airflow_breeze/utils/selective_checks.py 
b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
index fcaf8ae5c0a..93cd502df04 100644
--- a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
+++ b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
@@ -464,6 +464,10 @@ CI_FILE_GROUP_MATCHES: HashableDict[FileGroupForCi] = 
HashableDict(
             r"^airflow-core/src/airflow/observability/.*",
             r"^shared/observability/src/airflow_shared/observability/.*",
             r"^airflow-core/src/airflow/utils/span_status\.py$",
+            # The otel integration tests assert the exact span hierarchy that
+            # task_runner emits, so changes to either must exercise the 
integration.
+            r"^airflow-core/tests/integration/otel/.*",
+            r"^task-sdk/src/airflow/sdk/execution_time/task_runner\.py$",
         ],
         FileGroupForCi.CELERY_FILES: [
             # Core executor sources - redis is celery's broker/result backend, 
so the
diff --git a/dev/breeze/tests/test_selective_checks.py 
b/dev/breeze/tests/test_selective_checks.py
index 7b2848a6f46..552e0db77ed 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -3419,6 +3419,8 @@ def 
test_testable_providers_integrations_excludes_arm_disabled_on_arm():
     [
         pytest.param("airflow-core/src/airflow/security/kerberos.py", 
"kerberos", id="kerberos-source"),
         pytest.param("airflow-core/src/airflow/observability/stats.py", 
"otel", id="otel-source"),
+        pytest.param("airflow-core/tests/integration/otel/test_otel.py", 
"otel", id="otel-integration-tests"),
+        pytest.param("task-sdk/src/airflow/sdk/execution_time/task_runner.py", 
"otel", id="otel-task-runner"),
         pytest.param("airflow-core/src/airflow/executors/executor_loader.py", 
"redis", id="celery-source"),
     ],
 )

Reply via email to