This is an automated email from the ASF dual-hosted git repository.
amoghdesai pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new c0e9952314d Add pre-commit hook to prevent task SDK imports in airflow
core (#53700)
c0e9952314d is described below
commit c0e9952314d110c439825d382690117386bc4f47
Author: Amogh Desai <[email protected]>
AuthorDate: Fri Jul 25 11:56:13 2025 +0530
Add pre-commit hook to prevent task SDK imports in airflow core (#53700)
---
.pre-commit-config.yaml | 94 +++++++++++++++++
contributing-docs/08_static_code_checks.rst | 2 +
dev/breeze/doc/images/output_static-checks.svg | 128 ++++++++++++------------
dev/breeze/doc/images/output_static-checks.txt | 2 +-
dev/breeze/src/airflow_breeze/pre_commit_ids.py | 1 +
scripts/ci/pre_commit/check_sdk_imports.py | 78 +++++++++++++++
6 files changed, 242 insertions(+), 63 deletions(-)
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 048cda1db6e..8c22927419a 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1605,4 +1605,98 @@ repos:
types: [python]
files: ^providers/.*/src/airflow/providers/.*\.py$
require_serial: true
+ - id: check-sdk-imports
+ name: Check for SDK imports in core files
+ entry: ./scripts/ci/pre_commit/check_sdk_imports.py
+ language: python
+ types: [python]
+ files: ^airflow-core/src/airflow/
+ exclude: |
+ (?x)
+ # Allow SDK imports in these legitimate locations
+ ^airflow-core/src/airflow/example_dags/.*\.py$|
+
+ # TODO: These files need to be refactored to remove SDK coupling
+ ^airflow-core/src/airflow/__init__\.py$|
+ ^airflow-core/src/airflow/models/__init__\.py$|
+ ^airflow-core/src/airflow/api/common/mark_tasks\.py$|
+
^airflow-core/src/airflow/api_fastapi/core_api/datamodels/assets\.py$|
+ ^airflow-core/src/airflow/api_fastapi/core_api/datamodels/hitl\.py$|
+
^airflow-core/src/airflow/api_fastapi/core_api/datamodels/variables\.py$|
+ ^airflow-core/src/airflow/api_fastapi/core_api/routes/ui/grid\.py$|
+
^airflow-core/src/airflow/api_fastapi/core_api/routes/ui/structure\.py$|
+
^airflow-core/src/airflow/api_fastapi/core_api/services/ui/connections\.py$|
+ ^airflow-core/src/airflow/api_fastapi/core_api/services/ui/grid\.py$|
+ ^airflow-core/src/airflow/api_fastapi/execution_api/routes/hitl\.py$|
+
^airflow-core/src/airflow/api_fastapi/execution_api/routes/task_instances\.py$|
+ ^airflow-core/src/airflow/api_fastapi/logging/decorators\.py$|
+ ^airflow-core/src/airflow/assets/evaluation\.py$|
+ ^airflow-core/src/airflow/assets/manager\.py$|
+ ^airflow-core/src/airflow/cli/commands/connection_command\.py$|
+ ^airflow-core/src/airflow/cli/commands/task_command\.py$|
+ ^airflow-core/src/airflow/configuration\.py$|
+ ^airflow-core/src/airflow/dag_processing/collection\.py$|
+ ^airflow-core/src/airflow/dag_processing/manager\.py$|
+ ^airflow-core/src/airflow/dag_processing/processor\.py$|
+ ^airflow-core/src/airflow/datasets/metadata\.py$|
+ ^airflow-core/src/airflow/exceptions\.py$|
+ ^airflow-core/src/airflow/executors/local_executor\.py$|
+ ^airflow-core/src/airflow/jobs/triggerer_job_runner\.py$|
+ ^airflow-core/src/airflow/lineage/hook\.py$|
+ ^airflow-core/src/airflow/listeners/spec/asset\.py$|
+ ^airflow-core/src/airflow/listeners/spec/taskinstance\.py$|
+ ^airflow-core/src/airflow/logging/remote\.py$|
+ ^airflow-core/src/airflow/models/asset\.py$|
+ ^airflow-core/src/airflow/models/baseoperator\.py$|
+ ^airflow-core/src/airflow/models/connection\.py$|
+ ^airflow-core/src/airflow/models/dag\.py$|
+ ^airflow-core/src/airflow/models/dagbag\.py$|
+ ^airflow-core/src/airflow/models/dagrun\.py$|
+ ^airflow-core/src/airflow/models/mappedoperator\.py$|
+ ^airflow-core/src/airflow/models/operator\.py$|
+ ^airflow-core/src/airflow/models/param\.py$|
+ ^airflow-core/src/airflow/models/serialized_dag\.py$|
+ ^airflow-core/src/airflow/models/taskinstance\.py$|
+ ^airflow-core/src/airflow/models/taskinstancekey\.py$|
+ ^airflow-core/src/airflow/models/taskmap\.py$|
+ ^airflow-core/src/airflow/models/taskreschedule\.py$|
+ ^airflow-core/src/airflow/models/variable\.py$|
+ ^airflow-core/src/airflow/operators/subdag\.py$|
+ ^airflow-core/src/airflow/serialization/dag\.py$|
+ ^airflow-core/src/airflow/serialization/enums\.py$|
+ ^airflow-core/src/airflow/serialization/serialized_objects\.py$|
+ ^airflow-core/src/airflow/task/task_runner/bash_task_runner\.py$|
+ ^airflow-core/src/airflow/task/task_runner/standard_task_runner\.py$|
+ ^airflow-core/src/airflow/utils/dag_cycle_tester\.py$|
+ ^airflow-core/src/airflow/utils/dag_parsing_context\.py$|
+ ^airflow-core/src/airflow/utils/decorators\.py$|
+ ^airflow-core/src/airflow/utils/operator_helpers\.py$|
+ ^airflow-core/src/airflow/utils/session\.py$|
+ ^airflow-core/src/airflow/utils/task_group\.py$|
+ ^airflow-core/src/airflow/utils/trigger_rule\.py$|
+ ^airflow-core/src/airflow/utils/xcom\.py$|
+ ^airflow-core/src/airflow/providers_manager\.py$|
+ ^airflow-core/src/airflow/timetables/assets\.py$|
+ ^airflow-core/src/airflow/ti_deps/deps/prev_dagrun_dep\.py$|
+ ^airflow-core/src/airflow/utils/context\.py$|
+ ^airflow-core/src/airflow/models/taskmixin\.py$|
+ ^airflow-core/src/airflow/utils/edgemodifier\.py$|
+ ^airflow-core/src/airflow/utils/email\.py$|
+ ^airflow-core/src/airflow/ti_deps/deps/trigger_rule_dep\.py$|
+ ^airflow-core/src/airflow/utils/helpers\.py$|
+ ^airflow-core/src/airflow/ti_deps/deps/mapped_task_upstream_dep\.py$|
+ ^airflow-core/src/airflow/utils/types\.py$|
+ ^airflow-core/src/airflow/utils/dag_edges\.py$|
+ ^airflow-core/src/airflow/utils/cli\.py$|
+ ^airflow-core/src/airflow/timetables/base\.py$|
+ ^airflow-core/src/airflow/utils/dot_renderer\.py$|
+ ^airflow-core/src/airflow/models/xcom_arg\.py$|
+ ^airflow-core/src/airflow/plugins_manager\.py$|
+ ^airflow-core/src/airflow/models/xcom\.py$|
+ ^airflow-core/src/airflow/timetables/simple\.py$|
+ ^airflow-core/src/airflow/settings\.py$|
+ ^airflow-core/src/airflow/models/renderedtifields\.py$|
+ ^airflow-core/src/airflow/serialization/helpers\.py$|
+ ^airflow-core/src/airflow/models/expandinput\.py$
+ additional_dependencies: ['rich>=12.4.4']
## ONLY ADD PRE-COMMITS HERE THAT REQUIRE CI IMAGE
diff --git a/contributing-docs/08_static_code_checks.rst
b/contributing-docs/08_static_code_checks.rst
index 70569c1a8f3..81b7c4b43f4 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -227,6 +227,8 @@ require Breeze Docker image to be built locally.
+-----------------------------------------------------------+--------------------------------------------------------+---------+
| check-safe-filter-usage-in-html | Don't use safe
in templates | |
+-----------------------------------------------------------+--------------------------------------------------------+---------+
+| check-sdk-imports | Check for SDK
imports in core files | * |
++-----------------------------------------------------------+--------------------------------------------------------+---------+
| check-significant-newsfragments-are-valid | Check
significant newsfragments are valid | |
+-----------------------------------------------------------+--------------------------------------------------------+---------+
| check-sql-dependency-common-data-structure | Check dependency
of SQL providers | |
diff --git a/dev/breeze/doc/images/output_static-checks.svg
b/dev/breeze/doc/images/output_static-checks.svg
index 0857d08d9d6..20a18306dee 100644
--- a/dev/breeze/doc/images/output_static-checks.svg
+++ b/dev/breeze/doc/images/output_static-checks.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2270.4"
xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2294.7999999999997"
xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@@ -43,7 +43,7 @@
<defs>
<clipPath id="breeze-static-checks-clip-terminal">
- <rect x="0" y="0" width="1463.0" height="2219.4" />
+ <rect x="0" y="0" width="1463.0" height="2243.7999999999997" />
</clipPath>
<clipPath id="breeze-static-checks-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -315,9 +315,12 @@
<clipPath id="breeze-static-checks-line-89">
<rect x="0" y="2173.1" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="breeze-static-checks-line-90">
+ <rect x="0" y="2197.5" width="1464" height="24.65"/>
+ </clipPath>
</defs>
- <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1"
x="1" y="1" width="1480" height="2268.4" rx="8"/><text
class="breeze-static-checks-title" fill="#c5c8c6" text-anchor="middle" x="740"
y="27">Command: static-checks</text>
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1"
x="1" y="1" width="1480" height="2292.8" rx="8"/><text
class="breeze-static-checks-title" fill="#c5c8c6" text-anchor="middle" x="740"
y="27">Command: static-checks</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -359,65 +362,66 @@
</text><text class="breeze-static-checks-r5" x="0" y="727.6" textLength="12.2"
clip-path="url(#breeze-static-checks-line-29)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="727.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-29)">check-provider-docs-valid | check-provider-yaml-valid |                          </text><
[...]
</text><text class="breeze-static-checks-r5" x="0" y="752" textLength="12.2"
clip-path="url(#breeze-static-checks-line-30)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="752" textLength="988.2"
clip-path="url(#breeze-static-checks-line-30)">check-providers-subpackages-init-file-exist | check-pydevd-left-in-code |        </text><text
class="breeze-static-checks-r5" x="1451.8" y="752" textLength="12.2"
clip-path="url(#bree [...]
</text><text class="breeze-static-checks-r5" x="0" y="776.4" textLength="12.2"
clip-path="url(#breeze-static-checks-line-31)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="776.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-31)">check-pytest-mark-db-test-in-providers | check-revision-heads-map |              </text><text
class="breeze-static-checks-r5" x="1451.8" y="776.4" te [...]
-</text><text class="breeze-static-checks-r5" x="0" y="800.8" textLength="12.2"
clip-path="url(#breeze-static-checks-line-32)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="800.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-32)">check-safe-filter-usage-in-html | check-significant-newsfragments-are-valid |    </text><text
class="breeze-static-checks-r5" x="1451.8" y="800.8" textLength="12.2"
clip-path="url(#breeze-static-chec [...]
-</text><text class="breeze-static-checks-r5" x="0" y="825.2" textLength="12.2"
clip-path="url(#breeze-static-checks-line-33)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="825.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-33)">check-sql-dependency-common-data-structure |                               
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="849.6" textLength="12.2"
clip-path="url(#breeze-static-checks-line-34)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="849.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-34)">check-start-date-not-used-in-defaults | check-system-tests-present |             </text><text
class="breeze-static-checks-r5" x="1451.8" y="849.6" textLen [...]
-</text><text class="breeze-static-checks-r5" x="0" y="874" textLength="12.2"
clip-path="url(#breeze-static-checks-line-35)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="874" textLength="988.2"
clip-path="url(#breeze-static-checks-line-35)">check-system-tests-tocs | check-taskinstance-tis-attrs |                         </text><text
clas [...]
-</text><text class="breeze-static-checks-r5" x="0" y="898.4" textLength="12.2"
clip-path="url(#breeze-static-checks-line-36)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="898.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-36)">check-template-context-variable-in-sync | check-template-fields-valid |          </text><text
class="breeze-static-checks-r5" x="1451.8" y="898.4" textLength="12.2" clip
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="922.8" textLength="12.2"
clip-path="url(#breeze-static-checks-line-37)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="922.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-37)">check-tests-in-the-right-folders | check-tests-unittest-testcase |               </text><text
class="breeze-static-checks-r5" x="1451.8" y="922. [...]
-</text><text class="breeze-static-checks-r5" x="0" y="947.2" textLength="12.2"
clip-path="url(#breeze-static-checks-line-38)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="947.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-38)">check-urlparse-usage-in-code | check-xml | check-zip-file-is-not-committed |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="947.2" textLength="12.2"
clip-path="url(#bre [...]
-</text><text class="breeze-static-checks-r5" x="0" y="971.6" textLength="12.2"
clip-path="url(#breeze-static-checks-line-39)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="971.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-39)">codespell | compile-fab-assets | compile-ui-assets | compile-ui-assets-dev |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="971.6" textLength="12.2"
clip-path [...]
-</text><text class="breeze-static-checks-r5" x="0" y="996" textLength="12.2"
clip-path="url(#breeze-static-checks-line-40)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="996" textLength="988.2"
clip-path="url(#breeze-static-checks-line-40)">create-missing-init-py-files-tests | debug-statements | detect-private-key |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="996" textLength="12.2"
clip-path="url(#breeze-st [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1020.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1020.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-41)">doctoc | end-of-file-fixer | fix-encoding-pragma | flynt | gci |                 </text><text
class="b [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1044.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1044.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-42)">generate-airflow-diagrams | generate-airflowctl-datamodels |                     </text><text
class="breeze-stat [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1069.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1069.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-43)">generate-airflowctl-help-images | generate-openapi-spec |                        </text><text
cla [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1093.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1093.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-44)">generate-openapi-spec-fab | generate-pypi-readme | generate-tasksdk-datamodels | </text><text
class="breeze-static-checks-r5" x="1451.8" y="1093.6" textLength="12.2"
clip-path="url(#breeze-static-checks [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1118" textLength="12.2"
clip-path="url(#breeze-static-checks-line-45)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1118" textLength="988.2"
clip-path="url(#breeze-static-checks-line-45)">generate-volumes-for-sources | go-mockery | go-mod-tidy | gofmt | identity |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="1118" textLength="12.2" cl [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1142.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1142.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-46)">insert-license | kubeconform | lint-chart-schema | lint-dockerfile |             </text><text
class="breeze-static-checks-r5" x="145 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1166.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1166.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-47)">lint-helm-chart | lint-json-schema | lint-markdown | mixed-line-ending |         </text><text
class="breeze-static-checks-r5" x="1451.8" y="1166.8" text [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1191.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1191.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-48)">mypy-airflow-core | mypy-airflow-ctl | mypy-dev | mypy-devel-common |            </text><text
class="breeze-static-checks-r5" x="1451.8" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1215.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1215.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-49)">mypy-providers | mypy-task-sdk | pretty-format-json |                         
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1240" textLength="12.2"
clip-path="url(#breeze-static-checks-line-50)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1240" textLength="988.2"
clip-path="url(#breeze-static-checks-line-50)">prevent-deprecated-sqlalchemy-usage | provider-version-compat | pylint |         </text><text
class="breeze-static-checks-r5" x="1451.8" y="1240" textLength="12.2" cl [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1264.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1264.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-51)">python-no-log-warn | replace-bad-characters | rst-backticks | ruff | ruff-format </text><text
class="breeze-static-checks-r5" x="1451.8" y="1264.4" textLength="12.2"
clip-path="url(#breez [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1288.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1288.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-52)">| shellcheck | trailing-whitespace | ts-compile-lint-simple-auth-manager-ui |    </text><text
class="breeze-static-checks-r5" x="1451.8" y="1288.8" textLength="12.2"
clip-path="url(# [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1313.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1313.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-53)">ts-compile-lint-ui | update-black-version | update-breeze-cmd-output |           </text><text
class="breeze-static-checks-r5" x="1451.8" y="1313.2" text [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1337.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1337.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-54)">update-breeze-readme-config-hash | update-chart-dependencies | update-er-diagram </text><text
class="breeze-static-checks-r5" x="1451.8" y="1337.6" textLength="12.2"
clip-path="url(#breeze-static-checks-line [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1362" textLength="12.2"
clip-path="url(#breeze-static-checks-line-55)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1362" textLength="988.2"
clip-path="url(#breeze-static-checks-line-55)">| update-in-the-wild-to-be-sorted | update-inlined-dockerfile-scripts |          </text><text
class="breeze-static-checks-r5" x="1451.8" y="1362" textLength="12.2" cl [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1386.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1386.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-56)">update-installed-providers-to-be-sorted | update-installers-and-pre-commit |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="1386.4" textLength="12.2"
clip-path="url(#breeze-sta [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1410.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1410.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-57)">update-local-yml-file | update-migration-references |                           &#
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1435.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1435.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-58)">update-providers-build-files | update-providers-dependencies |                   </text><text
class="breeze-static-checks- [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1459.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1459.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-59)">update-pyproject-toml | update-reproducible-source-date-epoch |                  </text><text
class="breeze-static-checks-r5" x [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1484" textLength="12.2"
clip-path="url(#breeze-static-checks-line-60)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1484" textLength="988.2"
clip-path="url(#breeze-static-checks-line-60)">update-spelling-wordlist-to-be-sorted | update-supported-versions |              </text><text
class="breeze-static-checks-r5" x="1451.8" y="1484" textL [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1508.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1508.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-61)">update-vendored-in-k8s-json-schema | update-version | validate-chart-annotations </text><text
class="breeze-static-checks-r5" x="1451.8" y="1508.4" textLength="12.2"
clip-path="url(#breeze-static-checks-line [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1532.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1532.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-62)">| validate-operators-init | yamllint | zizmor)                           
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1557.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1557.2" textLength="268.4"
clip-path="url(#breeze-static-checks-line-63)">--show-diff-on-failure</text><text
class="breeze-static-checks-r6" x="402.6" y="1557.2" textLength="24.4"
clip-path="url(#breeze-static-checks-line-63)">-s</text><text
class="breeze-static-checks-r1" x="451.4" y="1557.2" textLength=" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1581.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1581.6" textLength="292.8"
clip-path="url(#breeze-static-checks-line-64)">--initialize-environment</text><text
class="breeze-static-checks-r1" x="451.4" y="1581.6" textLength="549"
clip-path="url(#breeze-static-checks-line-64)">Initialize environment before running checks.</text><text
c [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1606" textLength="12.2"
clip-path="url(#breeze-static-checks-line-65)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1606" textLength="353.8"
clip-path="url(#breeze-static-checks-line-65)">--max-initialization-attempts</text><text
class="breeze-static-checks-r1" x="451.4" y="1606" textLength="854"
clip-path="url(#breeze-static-checks-line-65)">Maximum number of attempts to initialize environme
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1630.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1630.4" textLength="854"
clip-path="url(#breeze-static-checks-line-66)">(INTEGER RANGE)                                   
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1654.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">│</text><text
class="breeze-static-checks-r5" x="451.4" y="1654.8" textLength="854"
clip-path="url(#breeze-static-checks-line-67)">[default: 3; 1<=x<=10]                                
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1679.2"
textLength="1464"
clip-path="url(#breeze-static-checks-line-68)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-static-checks-r1" x="1464" y="1679.2" textLength="12.2"
clip-path="url(#breeze-static-checks-line-68)">
-</text><text class="breeze-static-checks-r5" x="0" y="1703.6"
textLength="24.4" clip-path="url(#breeze-static-checks-line-69)">╭─</text><text
class="breeze-static-checks-r5" x="24.4" y="1703.6" textLength="463.6"
clip-path="url(#breeze-static-checks-line-69)"> Selecting files to run the checks on </text><text
class="breeze-static-checks-r5" x="488" y="1703.6" textLength="951.6"
clip-path="url(#breeze-static-checks-line-69)">──────────────────────── [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1728" textLength="12.2"
clip-path="url(#breeze-static-checks-line-70)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1728" textLength="73.2"
clip-path="url(#breeze-static-checks-line-70)">--file</text><text
class="breeze-static-checks-r6" x="256.2" y="1728" textLength="24.4"
clip-path="url(#breeze-static-checks-line-70)">-f</text><text
class="breeze-static-checks-r1" x="305" y="1728" textLength="427"
clip-path="url(#breeze [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1752.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1752.4" textLength="134.2"
clip-path="url(#breeze-static-checks-line-71)">--all-files</text><text
class="breeze-static-checks-r6" x="256.2" y="1752.4" textLength="24.4"
clip-path="url(#breeze-static-checks-line-71)">-a</text><text
class="breeze-static-checks-r1" x="305" y="1752.4" textLength="292.8" clip-p
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1776.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1776.8" textLength="146.4"
clip-path="url(#breeze-static-checks-line-72)">--commit-ref</text><text
class="breeze-static-checks-r6" x="256.2" y="1776.8" textLength="24.4"
clip-path="url(#breeze-static-checks-line-72)">-r</text><text
class="breeze-static-checks-r1" x="305" y="1776.8" textLength="1134.6" clip
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1801.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text
class="breeze-static-checks-r1" x="305" y="1801.2" textLength="183"
clip-path="url(#breeze-static-checks-line-73)">exclusive with </text><text
class="breeze-static-checks-r4" x="488" y="1801.2" textLength="158.6"
clip-path="url(#breeze-static-checks-line-73)">--last-commit</text><text
class="breeze-static-checks-r1" x="646.6" y="1801.2" te [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1825.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">│</text><text
class="breeze-static-checks-r7" x="305" y="1825.6" textLength="1134.6"
clip-path="url(#breeze-static-checks-line-74)">(TEXT)                                      
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1850" textLength="12.2"
clip-path="url(#breeze-static-checks-line-75)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1850" textLength="158.6"
clip-path="url(#breeze-static-checks-line-75)">--last-commit</text><text
class="breeze-static-checks-r6" x="256.2" y="1850" textLength="24.4"
clip-path="url(#breeze-static-checks-line-75)">-c</text><text
class="breeze-static-checks-r1" x="305" y="1850" textLength="793"
clip-path="url [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1874.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1874.4" textLength="207.4"
clip-path="url(#breeze-static-checks-line-76)">--only-my-changes</text><text
class="breeze-static-checks-r6" x="256.2" y="1874.4" textLength="24.4"
clip-path="url(#breeze-static-checks-line-76)">-m</text><text
class="breeze-static-checks-r1" x="305" y="1874.4" textLength="1134.6" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1898.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-77)">│</text><text
class="breeze-static-checks-r1" x="305" y="1898.8" textLength="1134.6"
clip-path="url(#breeze-static-checks-line-77)">branch and HEAD of your branch.                             
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1923.2"
textLength="1464"
clip-path="url(#breeze-static-checks-line-78)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-static-checks-r1" x="1464" y="1923.2" textLength="12.2"
clip-path="url(#breeze-static-checks-line-78)">
-</text><text class="breeze-static-checks-r5" x="0" y="1947.6"
textLength="24.4" clip-path="url(#breeze-static-checks-line-79)">╭─</text><text
class="breeze-static-checks-r5" x="24.4" y="1947.6" textLength="463.6"
clip-path="url(#breeze-static-checks-line-79)"> Building image before running checks </text><text
class="breeze-static-checks-r5" x="488" y="1947.6" textLength="951.6"
clip-path="url(#breeze-static-checks-line-79)">──────────────────────────────────
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1972" textLength="12.2"
clip-path="url(#breeze-static-checks-line-80)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1972" textLength="317.2"
clip-path="url(#breeze-static-checks-line-80)">--skip-image-upgrade-check</text><text
class="breeze-static-checks-r1" x="414.8" y="1972" textLength="536.8"
clip-path="url(#breeze-static-checks-line-80)">Skip checking if the CI image is up to
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1996.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1996.4" textLength="158.6"
clip-path="url(#breeze-static-checks-line-81)">--force-build</text><text
class="breeze-static-checks-r1" x="414.8" y="1996.4" textLength="707.6"
clip-path="url(#breeze-static-checks-line-81)">Force image build no matter if it is determined&
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="2020.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="2020.8" textLength="231.8"
clip-path="url(#breeze-static-checks-line-82)">--github-repository</text><text
class="breeze-static-checks-r6" x="366" y="2020.8" textLength="24.4"
clip-path="url(#breeze-static-checks-line-82)">-g</text><text
class="breeze-static-checks-r1" x="414.8" y="2020.8" textLength="585.6 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="2045.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="2045.2" textLength="109.8"
clip-path="url(#breeze-static-checks-line-83)">--builder</text><text
class="breeze-static-checks-r1" x="414.8" y="2045.2" textLength="756.4"
clip-path="url(#breeze-static-checks-line-83)">Buildx builder used to perform `docker buildx build` 
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="2069.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-84)">│</text><text
class="breeze-static-checks-r5" x="414.8" y="2069.6" textLength="756.4"
clip-path="url(#breeze-static-checks-line-84)">[default: autodetect]                                  &#
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="2094" textLength="1464"
clip-path="url(#breeze-static-checks-line-85)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-static-checks-r1" x="1464" y="2094" textLength="12.2"
clip-path="url(#breeze-static-checks-line-85)">
-</text><text class="breeze-static-checks-r5" x="0" y="2118.4"
textLength="24.4" clip-path="url(#breeze-static-checks-line-86)">╭─</text><text
class="breeze-static-checks-r5" x="24.4" y="2118.4" textLength="195.2"
clip-path="url(#breeze-static-checks-line-86)"> Common options </text><text
class="breeze-static-checks-r5" x="219.6" y="2118.4" textLength="1220"
clip-path="url(#breeze-static-checks-line-86)">──────────────────────────────────────────────────────────────────────
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="2142.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="2142.8" textLength="109.8"
clip-path="url(#breeze-static-checks-line-87)">--dry-run</text><text
class="breeze-static-checks-r6" x="158.6" y="2142.8" textLength="24.4"
clip-path="url(#breeze-static-checks-line-87)">-D</text><text
class="breeze-static-checks-r1" x="207.4" y="2142.8" textLength="719.8" clip-p
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="2167.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="2167.2" textLength="109.8"
clip-path="url(#breeze-static-checks-line-88)">--verbose</text><text
class="breeze-static-checks-r6" x="158.6" y="2167.2" textLength="24.4"
clip-path="url(#breeze-static-checks-line-88)">-v</text><text
class="breeze-static-checks-r1" x="207.4" y="2167.2" textLength="585.6" clip-p
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="2191.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-89)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="2191.6" textLength="73.2"
clip-path="url(#breeze-static-checks-line-89)">--help</text><text
class="breeze-static-checks-r6" x="158.6" y="2191.6" textLength="24.4"
clip-path="url(#breeze-static-checks-line-89)">-h</text><text
class="breeze-static-checks-r1" x="207.4" y="2191.6" textLength="329.4"
clip-path= [...]
-</text><text class="breeze-static-checks-r5" x="0" y="2216" textLength="1464"
clip-path="url(#breeze-static-checks-line-90)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-static-checks-r1" x="1464" y="2216" textLength="12.2"
clip-path="url(#breeze-static-checks-line-90)">
+</text><text class="breeze-static-checks-r5" x="0" y="800.8" textLength="12.2"
clip-path="url(#breeze-static-checks-line-32)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="800.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-32)">check-safe-filter-usage-in-html | check-sdk-imports |                           
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="825.2" textLength="12.2"
clip-path="url(#breeze-static-checks-line-33)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="825.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-33)">check-significant-newsfragments-are-valid |                               
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="849.6" textLength="12.2"
clip-path="url(#breeze-static-checks-line-34)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="849.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-34)">check-sql-dependency-common-data-structure |                               
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="874" textLength="12.2"
clip-path="url(#breeze-static-checks-line-35)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="874" textLength="988.2"
clip-path="url(#breeze-static-checks-line-35)">check-start-date-not-used-in-defaults | check-system-tests-present |             </text><text
class="breeze-static-checks-r5" x="1451.8" y="874" textLength="1 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="898.4" textLength="12.2"
clip-path="url(#breeze-static-checks-line-36)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="898.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-36)">check-system-tests-tocs | check-taskinstance-tis-attrs |                         </text><text
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="922.8" textLength="12.2"
clip-path="url(#breeze-static-checks-line-37)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="922.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-37)">check-template-context-variable-in-sync | check-template-fields-valid |          </text><text
class="breeze-static-checks-r5" x="1451.8" y="922.8" textLength="12.2" clip
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="947.2" textLength="12.2"
clip-path="url(#breeze-static-checks-line-38)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="947.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-38)">check-tests-in-the-right-folders | check-tests-unittest-testcase |               </text><text
class="breeze-static-checks-r5" x="1451.8" y="947. [...]
+</text><text class="breeze-static-checks-r5" x="0" y="971.6" textLength="12.2"
clip-path="url(#breeze-static-checks-line-39)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="971.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-39)">check-urlparse-usage-in-code | check-xml | check-zip-file-is-not-committed |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="971.6" textLength="12.2"
clip-path="url(#bre [...]
+</text><text class="breeze-static-checks-r5" x="0" y="996" textLength="12.2"
clip-path="url(#breeze-static-checks-line-40)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="996" textLength="988.2"
clip-path="url(#breeze-static-checks-line-40)">codespell | compile-fab-assets | compile-ui-assets | compile-ui-assets-dev |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="996" textLength="12.2"
clip-path="url( [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1020.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1020.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-41)">create-missing-init-py-files-tests | debug-statements | detect-private-key |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="1020.4" textLength="12.2"
clip-path="url(# [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1044.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1044.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-42)">doctoc | end-of-file-fixer | fix-encoding-pragma | flynt | gci |                 </text><text
class="b [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1069.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1069.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-43)">generate-airflow-diagrams | generate-airflowctl-datamodels |                     </text><text
class="breeze-stat [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1093.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1093.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-44)">generate-airflowctl-help-images | generate-openapi-spec |                        </text><text
cla [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1118" textLength="12.2"
clip-path="url(#breeze-static-checks-line-45)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1118" textLength="988.2"
clip-path="url(#breeze-static-checks-line-45)">generate-openapi-spec-fab | generate-pypi-readme | generate-tasksdk-datamodels | </text><text
class="breeze-static-checks-r5" x="1451.8" y="1118" textLength="12.2"
clip-path="url(#breeze-static-checks-line- [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1142.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1142.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-46)">generate-volumes-for-sources | go-mockery | go-mod-tidy | gofmt | identity |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="1142.4" textLength="12 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1166.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1166.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-47)">insert-license | kubeconform | lint-chart-schema | lint-dockerfile |             </text><text
class="breeze-static-checks-r5" x="145 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1191.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1191.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-48)">lint-helm-chart | lint-json-schema | lint-markdown | mixed-line-ending |         </text><text
class="breeze-static-checks-r5" x="1451.8" y="1191.2" text [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1215.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1215.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-49)">mypy-airflow-core | mypy-airflow-ctl | mypy-dev | mypy-devel-common |            </text><text
class="breeze-static-checks-r5" x="1451.8" [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1240" textLength="12.2"
clip-path="url(#breeze-static-checks-line-50)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1240" textLength="988.2"
clip-path="url(#breeze-static-checks-line-50)">mypy-providers | mypy-task-sdk | pretty-format-json |                          &#
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1264.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1264.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-51)">prevent-deprecated-sqlalchemy-usage | provider-version-compat | pylint |         </text><text
class="breeze-static-checks-r5" x="1451.8" y="1264.4" textLength="12 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1288.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1288.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-52)">python-no-log-warn | replace-bad-characters | rst-backticks | ruff | ruff-format </text><text
class="breeze-static-checks-r5" x="1451.8" y="1288.8" textLength="12.2"
clip-path="url(#breez [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1313.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1313.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-53)">| shellcheck | trailing-whitespace | ts-compile-lint-simple-auth-manager-ui |    </text><text
class="breeze-static-checks-r5" x="1451.8" y="1313.2" textLength="12.2"
clip-path="url(# [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1337.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1337.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-54)">ts-compile-lint-ui | update-black-version | update-breeze-cmd-output |           </text><text
class="breeze-static-checks-r5" x="1451.8" y="1337.6" text [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1362" textLength="12.2"
clip-path="url(#breeze-static-checks-line-55)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1362" textLength="988.2"
clip-path="url(#breeze-static-checks-line-55)">update-breeze-readme-config-hash | update-chart-dependencies | update-er-diagram </text><text
class="breeze-static-checks-r5" x="1451.8" y="1362" textLength="12.2"
clip-path="url(#breeze-static-checks-line-55)"> [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1386.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1386.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-56)">| update-in-the-wild-to-be-sorted | update-inlined-dockerfile-scripts |          </text><text
class="breeze-static-checks-r5" x="1451.8" y="1386.4" textLength="12 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1410.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1410.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-57)">update-installed-providers-to-be-sorted | update-installers-and-pre-commit |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="1410.8" textLength="12.2"
clip-path="url(#breeze-sta [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1435.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1435.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-58)">update-local-yml-file | update-migration-references |                           &#
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1459.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1459.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-59)">update-providers-build-files | update-providers-dependencies |                   </text><text
class="breeze-static-checks- [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1484" textLength="12.2"
clip-path="url(#breeze-static-checks-line-60)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1484" textLength="988.2"
clip-path="url(#breeze-static-checks-line-60)">update-pyproject-toml | update-reproducible-source-date-epoch |                  </text><text
class="breeze-static-checks-r5" x="14 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1508.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1508.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-61)">update-spelling-wordlist-to-be-sorted | update-supported-versions |              </text><text
class="breeze-static-checks-r5" x="1451.8" y="1508.4" [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1532.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1532.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-62)">update-vendored-in-k8s-json-schema | update-version | validate-chart-annotations </text><text
class="breeze-static-checks-r5" x="1451.8" y="1532.8" textLength="12.2"
clip-path="url(#breeze-static-checks-line [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1557.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1557.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-63)">| validate-operators-init | yamllint | zizmor)                           
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1581.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1581.6" textLength="268.4"
clip-path="url(#breeze-static-checks-line-64)">--show-diff-on-failure</text><text
class="breeze-static-checks-r6" x="402.6" y="1581.6" textLength="24.4"
clip-path="url(#breeze-static-checks-line-64)">-s</text><text
class="breeze-static-checks-r1" x="451.4" y="1581.6" textLength=" [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1606" textLength="12.2"
clip-path="url(#breeze-static-checks-line-65)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1606" textLength="292.8"
clip-path="url(#breeze-static-checks-line-65)">--initialize-environment</text><text
class="breeze-static-checks-r1" x="451.4" y="1606" textLength="549"
clip-path="url(#breeze-static-checks-line-65)">Initialize environment before running checks.</text><text
class=" [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1630.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1630.4" textLength="353.8"
clip-path="url(#breeze-static-checks-line-66)">--max-initialization-attempts</text><text
class="breeze-static-checks-r1" x="451.4" y="1630.4" textLength="854"
clip-path="url(#breeze-static-checks-line-66)">Maximum number of attempts to initialize env
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1654.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1654.8" textLength="854"
clip-path="url(#breeze-static-checks-line-67)">(INTEGER RANGE)                                   
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1679.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-68)">│</text><text
class="breeze-static-checks-r5" x="451.4" y="1679.2" textLength="854"
clip-path="url(#breeze-static-checks-line-68)">[default: 3; 1<=x<=10]                                
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1703.6"
textLength="1464"
clip-path="url(#breeze-static-checks-line-69)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-static-checks-r1" x="1464" y="1703.6" textLength="12.2"
clip-path="url(#breeze-static-checks-line-69)">
+</text><text class="breeze-static-checks-r5" x="0" y="1728" textLength="24.4"
clip-path="url(#breeze-static-checks-line-70)">╭─</text><text
class="breeze-static-checks-r5" x="24.4" y="1728" textLength="463.6"
clip-path="url(#breeze-static-checks-line-70)"> Selecting files to run the checks on </text><text
class="breeze-static-checks-r5" x="488" y="1728" textLength="951.6"
clip-path="url(#breeze-static-checks-line-70)">──────────────────────────────
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1752.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1752.4" textLength="73.2"
clip-path="url(#breeze-static-checks-line-71)">--file</text><text
class="breeze-static-checks-r6" x="256.2" y="1752.4" textLength="24.4"
clip-path="url(#breeze-static-checks-line-71)">-f</text><text
class="breeze-static-checks-r1" x="305" y="1752.4" textLength="427"
clip-path="url [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1776.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1776.8" textLength="134.2"
clip-path="url(#breeze-static-checks-line-72)">--all-files</text><text
class="breeze-static-checks-r6" x="256.2" y="1776.8" textLength="24.4"
clip-path="url(#breeze-static-checks-line-72)">-a</text><text
class="breeze-static-checks-r1" x="305" y="1776.8" textLength="292.8" clip-p
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1801.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1801.2" textLength="146.4"
clip-path="url(#breeze-static-checks-line-73)">--commit-ref</text><text
class="breeze-static-checks-r6" x="256.2" y="1801.2" textLength="24.4"
clip-path="url(#breeze-static-checks-line-73)">-r</text><text
class="breeze-static-checks-r1" x="305" y="1801.2" textLength="1134.6" clip
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1825.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">│</text><text
class="breeze-static-checks-r1" x="305" y="1825.6" textLength="183"
clip-path="url(#breeze-static-checks-line-74)">exclusive with </text><text
class="breeze-static-checks-r4" x="488" y="1825.6" textLength="158.6"
clip-path="url(#breeze-static-checks-line-74)">--last-commit</text><text
class="breeze-static-checks-r1" x="646.6" y="1825.6" te [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1850" textLength="12.2"
clip-path="url(#breeze-static-checks-line-75)">│</text><text
class="breeze-static-checks-r7" x="305" y="1850" textLength="1134.6"
clip-path="url(#breeze-static-checks-line-75)">(TEXT)                                      
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1874.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1874.4" textLength="158.6"
clip-path="url(#breeze-static-checks-line-76)">--last-commit</text><text
class="breeze-static-checks-r6" x="256.2" y="1874.4" textLength="24.4"
clip-path="url(#breeze-static-checks-line-76)">-c</text><text
class="breeze-static-checks-r1" x="305" y="1874.4" textLength="793" clip-p [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1898.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-77)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1898.8" textLength="207.4"
clip-path="url(#breeze-static-checks-line-77)">--only-my-changes</text><text
class="breeze-static-checks-r6" x="256.2" y="1898.8" textLength="24.4"
clip-path="url(#breeze-static-checks-line-77)">-m</text><text
class="breeze-static-checks-r1" x="305" y="1898.8" textLength="1134.6" [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1923.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-78)">│</text><text
class="breeze-static-checks-r1" x="305" y="1923.2" textLength="1134.6"
clip-path="url(#breeze-static-checks-line-78)">branch and HEAD of your branch.                             
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1947.6"
textLength="1464"
clip-path="url(#breeze-static-checks-line-79)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-static-checks-r1" x="1464" y="1947.6" textLength="12.2"
clip-path="url(#breeze-static-checks-line-79)">
+</text><text class="breeze-static-checks-r5" x="0" y="1972" textLength="24.4"
clip-path="url(#breeze-static-checks-line-80)">╭─</text><text
class="breeze-static-checks-r5" x="24.4" y="1972" textLength="463.6"
clip-path="url(#breeze-static-checks-line-80)"> Building image before running checks </text><text
class="breeze-static-checks-r5" x="488" y="1972" textLength="951.6"
clip-path="url(#breeze-static-checks-line-80)">────────────────────────────────────────
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1996.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1996.4" textLength="317.2"
clip-path="url(#breeze-static-checks-line-81)">--skip-image-upgrade-check</text><text
class="breeze-static-checks-r1" x="414.8" y="1996.4" textLength="536.8"
clip-path="url(#breeze-static-checks-line-81)">Skip checking if the CI image is up 
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="2020.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="2020.8" textLength="158.6"
clip-path="url(#breeze-static-checks-line-82)">--force-build</text><text
class="breeze-static-checks-r1" x="414.8" y="2020.8" textLength="707.6"
clip-path="url(#breeze-static-checks-line-82)">Force image build no matter if it is determined&
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="2045.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="2045.2" textLength="231.8"
clip-path="url(#breeze-static-checks-line-83)">--github-repository</text><text
class="breeze-static-checks-r6" x="366" y="2045.2" textLength="24.4"
clip-path="url(#breeze-static-checks-line-83)">-g</text><text
class="breeze-static-checks-r1" x="414.8" y="2045.2" textLength="585.6 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="2069.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-84)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="2069.6" textLength="109.8"
clip-path="url(#breeze-static-checks-line-84)">--builder</text><text
class="breeze-static-checks-r1" x="414.8" y="2069.6" textLength="756.4"
clip-path="url(#breeze-static-checks-line-84)">Buildx builder used to perform `docker buildx build` 
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="2094" textLength="12.2"
clip-path="url(#breeze-static-checks-line-85)">│</text><text
class="breeze-static-checks-r5" x="414.8" y="2094" textLength="756.4"
clip-path="url(#breeze-static-checks-line-85)">[default: autodetect]                                   
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="2118.4"
textLength="1464"
clip-path="url(#breeze-static-checks-line-86)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-static-checks-r1" x="1464" y="2118.4" textLength="12.2"
clip-path="url(#breeze-static-checks-line-86)">
+</text><text class="breeze-static-checks-r5" x="0" y="2142.8"
textLength="24.4" clip-path="url(#breeze-static-checks-line-87)">╭─</text><text
class="breeze-static-checks-r5" x="24.4" y="2142.8" textLength="195.2"
clip-path="url(#breeze-static-checks-line-87)"> Common options </text><text
class="breeze-static-checks-r5" x="219.6" y="2142.8" textLength="1220"
clip-path="url(#breeze-static-checks-line-87)">──────────────────────────────────────────────────────────────────────
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="2167.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="2167.2" textLength="109.8"
clip-path="url(#breeze-static-checks-line-88)">--dry-run</text><text
class="breeze-static-checks-r6" x="158.6" y="2167.2" textLength="24.4"
clip-path="url(#breeze-static-checks-line-88)">-D</text><text
class="breeze-static-checks-r1" x="207.4" y="2167.2" textLength="719.8" clip-p
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="2191.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-89)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="2191.6" textLength="109.8"
clip-path="url(#breeze-static-checks-line-89)">--verbose</text><text
class="breeze-static-checks-r6" x="158.6" y="2191.6" textLength="24.4"
clip-path="url(#breeze-static-checks-line-89)">-v</text><text
class="breeze-static-checks-r1" x="207.4" y="2191.6" textLength="585.6" clip-p
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="2216" textLength="12.2"
clip-path="url(#breeze-static-checks-line-90)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="2216" textLength="73.2"
clip-path="url(#breeze-static-checks-line-90)">--help</text><text
class="breeze-static-checks-r6" x="158.6" y="2216" textLength="24.4"
clip-path="url(#breeze-static-checks-line-90)">-h</text><text
class="breeze-static-checks-r1" x="207.4" y="2216" textLength="329.4"
clip-path="url(#br [...]
+</text><text class="breeze-static-checks-r5" x="0" y="2240.4"
textLength="1464"
clip-path="url(#breeze-static-checks-line-91)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-static-checks-r1" x="1464" y="2240.4" textLength="12.2"
clip-path="url(#breeze-static-checks-line-91)">
</text>
</g>
</g>
diff --git a/dev/breeze/doc/images/output_static-checks.txt
b/dev/breeze/doc/images/output_static-checks.txt
index c4ea9001bac..6e002ae8d30 100644
--- a/dev/breeze/doc/images/output_static-checks.txt
+++ b/dev/breeze/doc/images/output_static-checks.txt
@@ -1 +1 @@
-c3e2295a3b4cfc4073a1c8bea4ee4f3b
+574ddc53c1454f66d2db8d22bac539ce
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index a9d1b62c0b8..eb941f4deb7 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -77,6 +77,7 @@ PRE_COMMIT_LIST = [
"check-pytest-mark-db-test-in-providers",
"check-revision-heads-map",
"check-safe-filter-usage-in-html",
+ "check-sdk-imports",
"check-significant-newsfragments-are-valid",
"check-sql-dependency-common-data-structure",
"check-start-date-not-used-in-defaults",
diff --git a/scripts/ci/pre_commit/check_sdk_imports.py
b/scripts/ci/pre_commit/check_sdk_imports.py
new file mode 100755
index 00000000000..cdf40dc1842
--- /dev/null
+++ b/scripts/ci/pre_commit/check_sdk_imports.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import argparse
+import ast
+import sys
+from pathlib import Path
+
+sys.path.insert(0, str(Path(__file__).parent.resolve()))
+from common_precommit_utils import console
+
+
+def check_file_for_sdk_imports(file_path: Path) -> list[tuple[int, str]]:
+ """Check file for airflow.sdk imports. Returns list of (line_num,
import_statement)."""
+ try:
+ with open(file_path, encoding="utf-8") as f:
+ source = f.read()
+ tree = ast.parse(source, filename=str(file_path))
+ except (OSError, UnicodeDecodeError, SyntaxError):
+ return []
+
+ mismatches = []
+
+ for node in ast.walk(tree):
+ if isinstance(node, ast.ImportFrom):
+ if node.module and ("airflow.sdk" in node.module):
+ import_names = ", ".join(alias.name for alias in node.names)
+ statement = f"from {node.module} import {import_names}"
+ mismatches.append((node.lineno, statement))
+
+ return mismatches
+
+
+def main():
+ parser = argparse.ArgumentParser(description="Check for SDK imports in
airflow-core files")
+ parser.add_argument("files", nargs="*", help="Files to check")
+ args = parser.parse_args()
+
+ if not args.files:
+ return
+
+ files_to_check = [Path(f) for f in args.files if f.endswith(".py")]
+ total_violations = 0
+
+ for file_path in files_to_check:
+ mismatches = check_file_for_sdk_imports(file_path)
+ if mismatches:
+ console.print(f"[red]{file_path}[/red]:")
+ for line_num, statement in mismatches:
+ console.print(f" [yellow]Line {line_num}[/yellow]:
{statement}")
+ total_violations += len(mismatches)
+
+ if total_violations:
+ console.print()
+ console.print(f"[red]Found {total_violations} SDK import(s) in core
files[/red]")
+ sys.exit(1)
+
+
+if __name__ == "__main__":
+ main()
+ sys.exit(0)