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

potiuk 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 85640d38893 Make sure all test version imports come from test_common 
(#52425)
85640d38893 is described below

commit 85640d38893cc462f752ab8ff33fa60d9132c254
Author: Jarek Potiuk <[email protected]>
AuthorDate: Sat Jun 28 23:46:29 2025 +0200

    Make sure all test version imports come from test_common (#52425)
---
 .pre-commit-config.yaml                            |   7 +
 contributing-docs/08_static_code_checks.rst        |   2 +
 dev/breeze/doc/images/output_static-checks.svg     | 172 +++++++++++----------
 dev/breeze/doc/images/output_static-checks.txt     |   2 +-
 dev/breeze/src/airflow_breeze/pre_commit_ids.py    |   1 +
 .../tests/system/amazon/aws/example_sagemaker.py   |   2 +-
 .../amazon/aws/tests/test_aws_auth_manager.py      |   2 +-
 .../tests/system/amazon/aws/utils/__init__.py      |   3 +-
 .../aws/auth_manager/cli/test_avp_commands.py      |   2 +-
 .../amazon/aws/auth_manager/cli/test_definition.py |   2 +-
 .../amazon/aws/auth_manager/routes/test_login.py   |   2 +-
 .../aws/auth_manager/test_aws_auth_manager.py      |   2 +-
 .../tests/unit/amazon/aws/links/test_athena.py     |   2 +-
 .../tests/unit/amazon/aws/links/test_batch.py      |   2 +-
 .../tests/unit/amazon/aws/links/test_comprehend.py |   2 +-
 .../tests/unit/amazon/aws/links/test_datasync.py   |   2 +-
 .../amazon/tests/unit/amazon/aws/links/test_ec2.py |   2 +-
 .../amazon/tests/unit/amazon/aws/links/test_emr.py |   2 +-
 .../tests/unit/amazon/aws/links/test_glue.py       |   2 +-
 .../tests/unit/amazon/aws/links/test_logs.py       |   2 +-
 .../tests/unit/amazon/aws/links/test_sagemaker.py  |   2 +-
 .../aws/links/test_sagemaker_unified_studio.py     |   2 +-
 .../unit/amazon/aws/links/test_step_function.py    |   2 +-
 .../tests/unit/apache/beam/operators/test_beam.py  |   3 +-
 .../cncf/kubernetes/cli/test_kubernetes_command.py |   2 +-
 .../cncf/kubernetes/decorators/test_kubernetes.py  |   2 +-
 .../kubernetes/decorators/test_kubernetes_cmd.py   |   3 +-
 .../decorators/test_kubernetes_commons.py          |   2 +-
 .../cncf/kubernetes/test_template_rendering.py     |   2 +-
 .../common/io/example_file_transfer_local_to_s3.py |   3 +-
 .../io/tests/unit/common/io/xcom/test_backend.py   |   2 +-
 .../databricks/plugins/test_databricks_workflow.py |   2 +-
 .../tests/unit/dbt/cloud/operators/test_dbt.py     |   3 +-
 .../tests/unit/docker/decorators/test_docker.py    |   2 +-
 .../kubernetes_engine/example_kubernetes_engine.py |   2 +-
 .../example_kubernetes_engine_async.py             |   2 +-
 .../google/cloud/translate/example_translate.py    |   3 +-
 .../unit/google/cloud/links/test_base_link.py      |   3 +-
 .../unit/google/cloud/links/test_cloud_run.py      |   3 +-
 .../tests/unit/google/cloud/links/test_dataplex.py |   3 +-
 .../unit/google/cloud/links/test_translate.py      |   2 +-
 .../unit/google/cloud/operators/test_dataproc.py   |   2 +-
 .../common/auth_backend/test_google_openid.py      |   2 +-
 .../unit/microsoft/azure/operators/test_adx.py     |   3 +-
 .../unit/microsoft/azure/operators/test_synapse.py |   3 +-
 .../tests/unit/openlineage/extractors/test_base.py |   2 +-
 .../unit/openlineage/plugins/test_listener.py      |   3 +-
 .../openlineage/utils/test_selective_enable.py     |   2 +-
 .../tests/unit/openlineage/utils/test_utils.py     |   3 +-
 .../unit/snowflake/decorators/test_snowpark.py     |   3 +-
 .../tests/unit/standard/operators/test_python.py   |   3 +-
 .../standard/sensors/test_external_task_sensor.py  |   3 +-
 .../tests/unit/standard/sensors/test_time_delta.py |   2 +-
 .../tests/unit/standard/sensors/test_weekday.py    |   2 +-
 .../tests/unit/standard/triggers/test_file.py      |   3 +-
 .../pre_commit/check_airflow_v_imports_in_tests.py |  81 ++++++++++
 56 files changed, 247 insertions(+), 135 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 265f52fd1c2..e8e0a5d525c 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -413,6 +413,13 @@ repos:
           ^airflow_breeze/templates/PROVIDER_README_TEMPLATE\.rst\.jinja2$
         additional_dependencies: ['rich>=12.4.4','requests>=2.31.0']
         require_serial: true
+      - id: check-airflow-v-imports-in-tests
+        name: Check AIRFLOW_V imports in tests
+        language: python
+        entry: ./scripts/ci/pre_commit/check_airflow_v_imports_in_tests.py
+        pass_filenames: true
+        files: ^providers/.*/tests/.+\.py$
+        additional_dependencies: ['rich>=12.4.4']
       - id: ruff
         name: Run 'ruff' for extremely fast Python linting
         description: "Run 'ruff' for extremely fast Python linting"
diff --git a/contributing-docs/08_static_code_checks.rst 
b/contributing-docs/08_static_code_checks.rst
index 70fd44db68d..9d6c1b764a0 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -129,6 +129,8 @@ require Breeze Docker image to be built locally.
 
+-----------------------------------------------------------+--------------------------------------------------------+---------+
 | check-airflow-providers-bug-report-template               | Sort 
airflow-bug-report provider list                  |         |
 
+-----------------------------------------------------------+--------------------------------------------------------+---------+
+| check-airflow-v-imports-in-tests                          | Check AIRFLOW_V 
imports in tests                       |         |
++-----------------------------------------------------------+--------------------------------------------------------+---------+
 | check-apache-license-rat                                  | Check if 
licenses are OK for Apache                    |         |
 
+-----------------------------------------------------------+--------------------------------------------------------+---------+
 | check-base-operator-partial-arguments                     | Check 
BaseOperator and partial() arguments             |         |
diff --git a/dev/breeze/doc/images/output_static-checks.svg 
b/dev/breeze/doc/images/output_static-checks.svg
index 0e6fb97574d..5331a9867ce 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 2246.0" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 2270.4" 
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="2195.0" />
+      <rect x="0" y="0" width="1463.0" height="2219.4" />
     </clipPath>
     <clipPath id="breeze-static-checks-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -312,9 +312,12 @@
 <clipPath id="breeze-static-checks-line-88">
     <rect x="0" y="2148.7" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-static-checks-line-89">
+    <rect x="0" y="2173.1" 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="2244" rx="8"/><text 
class="breeze-static-checks-title" fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;static-checks</text>
+    <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:&#160;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"/>
@@ -333,87 +336,88 @@
 </text><text class="breeze-static-checks-r5" x="0" y="166.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-6)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="166.4" textLength="73.2" 
clip-path="url(#breeze-static-checks-line-6)">--type</text><text 
class="breeze-static-checks-r6" x="402.6" y="166.4" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-6)">-t</text><text 
class="breeze-static-checks-r1" x="451.4" y="166.4" textLength="988.2" 
clip-path="url(#b [...]
 </text><text class="breeze-static-checks-r5" x="0" y="190.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-7)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="190.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-7)">(all&#160;|&#160;bandit&#160;|&#160;blacken-docs&#160;|&#160;check-aiobotocore-optional&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><te
 [...]
 </text><text class="breeze-static-checks-r5" x="0" y="215.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-8)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="215.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-8)">check-airflow-k8s-not-used&#160;|&#160;check-airflow-providers-bug-report-template&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="215.2" textLength="12.2" 
clip-path="url(#breez [...]
-</text><text class="breeze-static-checks-r5" x="0" y="239.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-9)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="239.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-9)">check-apache-license-rat&#160;|&#160;check-base-operator-partial-arguments&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="239.6" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="264" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-10)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="264" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-10)">check-base-operator-usage&#160;|&#160;check-boring-cyborg-configuration&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="288.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-11)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="288.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-11)">check-breeze-top-dependencies-limited&#160;|&#160;check-builtin-literals&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451. [...]
-</text><text class="breeze-static-checks-r5" x="0" y="312.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-12)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="312.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-12)">check-changelog-format&#160;|&#160;check-changelog-has-no-duplicates&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static [...]
-</text><text class="breeze-static-checks-r5" x="0" y="337.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-13)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="337.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-13)">check-cncf-k8s-only-for-executors&#160;|&#160;check-code-deprecations&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-chec [...]
-</text><text class="breeze-static-checks-r5" x="0" y="361.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-14)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="361.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-14)">check-common-compat-used-for-openlineage&#160;|&#160;check-core-deprecation-classes&#160;|&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="361.6" textLength="12.2" 
clip-path="url(#breeze-s [...]
-</text><text class="breeze-static-checks-r5" x="0" y="386" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-15)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="386" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-15)">check-decorated-operator-implements-custom-name&#160;|&#160;check-default-configuration&#160;|&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="386" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-15)">│</ [...]
-</text><text class="breeze-static-checks-r5" x="0" y="410.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-16)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="410.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-16)">check-deferrable-default&#160;|&#160;check-docstring-param-types&#160;|&#160;check-example-dags-urls&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="410.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-16 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="434.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-17)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="434.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-17)">|&#160;check-executables-have-shebangs&#160;|&#160;check-extra-packages-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="434.8" textLen [...]
-</text><text class="breeze-static-checks-r5" x="0" y="459.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-18)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="459.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-18)">check-extras-order&#160;|&#160;check-fab-migrations&#160;|&#160;check-for-inclusive-language&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="459.2" textLength="12.2" 
clip-path [...]
-</text><text class="breeze-static-checks-r5" x="0" y="483.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-19)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="483.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-19)">check-get-lineage-collector-providers&#160;|&#160;check-hooks-apply&#160;|&#160;check-i18n-json&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="483.6" textLength="12.2" 
clip-path="url(#breeze-s [...]
-</text><text class="breeze-static-checks-r5" x="0" y="508" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-20)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="508" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-20)">check-imports-in-providers&#160;|&#160;check-incorrect-use-of-LoggingMixin&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="508" tex [...]
-</text><text class="breeze-static-checks-r5" x="0" y="532.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-21)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="532.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-21)">check-init-decorator-arguments&#160;|&#160;check-integrations-list-consistent&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="532.4" textLength=" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="556.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-22)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="556.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-22)">check-lazy-logging&#160;|&#160;check-links-to-example-dags-do-not-use-hardcoded-versions&#160;|&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="556.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-22)">│< [...]
-</text><text class="breeze-static-checks-r5" x="0" y="581.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-23)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="581.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-23)">check-merge-conflict&#160;|&#160;check-min-python-version&#160;|&#160;check-newsfragments-are-valid&#160;|</text><text
 class="breeze-static-checks-r5" x="1451.8" y="581.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-23 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="605.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-24)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="605.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-24)">check-no-airflow-deprecation-in-providers&#160;|&#160;check-no-providers-in-core-examples&#160;|</text><text
 class="breeze-static-checks-r5" x="1451.8" y="605.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-24)">│</text [...]
-</text><text class="breeze-static-checks-r5" x="0" y="630" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-25)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="630" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-25)">check-only-new-session-with-provide-session&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="654.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-26)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="654.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-26)">check-persist-credentials-disabled-in-github-workflows&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="bre [...]
-</text><text class="breeze-static-checks-r5" x="0" y="678.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-27)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="678.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-27)">check-pre-commit-information-consistent&#160;|&#160;check-provide-create-sessions-imports&#160;|</text><text
 class="breeze-static-checks-r5" x="1451.8" y="678.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-27)">│</text [...]
-</text><text class="breeze-static-checks-r5" x="0" y="703.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-28)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="703.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-28)">check-provider-docs-valid&#160;|&#160;check-provider-yaml-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><
 [...]
-</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-providers-subpackages-init-file-exist&#160;|&#160;check-pydevd-left-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="727.6" textLength="12.2" 
clip-path="url [...]
-</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-pytest-mark-db-test-in-providers&#160;|&#160;check-revision-heads-map&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="752" textLeng [...]
-</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-safe-filter-usage-in-html&#160;|&#160;check-significant-newsfragments-are-valid&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="776.4" textLength="12.2" 
clip-path="url(#breeze-static-chec [...]
-</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-sql-dependency-common-data-structure&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
-</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-start-date-not-used-in-defaults&#160;|&#160;check-system-tests-present&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="825.2" textLen [...]
-</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-system-tests-tocs&#160;|&#160;check-taskinstance-tis-attrs&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
  [...]
-</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-template-context-variable-in-sync&#160;|&#160;check-template-fields-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="874" textLength="12.2" 
clip-path= [...]
-</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-tests-in-the-right-folders&#160;|&#160;check-tests-unittest-testcase&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="898. [...]
-</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-urlparse-usage-in-code&#160;|&#160;check-xml&#160;|&#160;check-zip-file-is-not-committed&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="922.8" textLength="12.2" 
clip-path="url(#bre [...]
-</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)">codespell&#160;|&#160;compile-fab-assets&#160;|&#160;compile-ui-assets&#160;|&#160;compile-ui-assets-dev&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="947.2" textLength="12.2" 
clip-path [...]
-</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)">create-missing-init-py-files-tests&#160;|&#160;debug-statements&#160;|&#160;detect-private-key&#160;|&#160;&#160;&#160;&#160;&#160;</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)">doctoc&#160;|&#160;end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;gci&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze- [...]
-</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)">generate-airflow-diagrams&#160;|&#160;generate-airflowctl-datamodels&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-stat [...]
-</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-airflowctl-help-images&#160;|&#160;generate-openapi-spec&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 cla [...]
-</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-openapi-spec-fab&#160;|&#160;generate-pypi-readme&#160;|&#160;generate-tasksdk-datamodels&#160;|&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1069.2" textLength="12.2" 
clip-path="url(#breeze-static-checks [...]
-</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-volumes-for-sources&#160;|&#160;go-mockery&#160;|&#160;go-mod-tidy&#160;|&#160;gofmt&#160;|&#160;identity&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1093.6" textLength="12 [...]
-</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)">insert-license&#160;|&#160;kubeconform&#160;|&#160;lint-chart-schema&#160;|&#160;lint-dockerfile&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" [...]
-</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)">lint-helm-chart&#160;|&#160;lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;mixed-line-ending&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1142.4" text [...]
-</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)">mypy-airflow-core&#160;|&#160;mypy-airflow-ctl&#160;|&#160;mypy-dev&#160;|&#160;mypy-devel-common&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8"  [...]
-</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-providers&#160;|&#160;mypy-task-sdk&#160;|&#160;pretty-format-json&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
-</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)">prevent-deprecated-sqlalchemy-usage&#160;|&#160;pylint&#160;|&#160;python-no-log-warn&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</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)">replace-bad-characters&#160;|&#160;rst-backticks&#160;|&#160;ruff&#160;|&#160;ruff-format&#160;|&#160;shellcheck&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1240" textLength [...]
-</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)">trailing-whitespace&#160;|&#160;ts-compile-lint-simple-auth-manager-ui&#160;|&#160;ts-compile-lint-ui</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1264.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-51)" [...]
-</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)">|&#160;update-black-version&#160;|&#160;update-breeze-cmd-output&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
-</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)">update-breeze-readme-config-hash&#160;|&#160;update-chart-dependencies&#160;|&#160;update-er-diagram&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1313.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line [...]
-</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)">|&#160;update-in-the-wild-to-be-sorted&#160;|&#160;update-inlined-dockerfile-scripts&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1337.6" textLength="12 [...]
-</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-installed-providers-to-be-sorted&#160;|&#160;update-installers-and-pre-commit&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1362" textLength="12.2" 
clip-path="url(#breeze-static-ch [...]
-</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-local-yml-file&#160;|&#160;update-migration-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
-</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-providers-build-files&#160;|&#160;update-providers-dependencies&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks- [...]
-</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-pyproject-toml&#160;|&#160;update-reproducible-source-date-epoch&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x [...]
-</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-spelling-wordlist-to-be-sorted&#160;|&#160;update-supported-versions&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1459.6" [...]
-</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-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;validate-chart-annotations&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1484" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-60)"> [...]
-</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)">|&#160;validate-operators-init&#160;|&#160;yamllint&#160;|&#160;zizmor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
-</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-r4" x="24.4" y="1532.8" textLength="268.4" 
clip-path="url(#breeze-static-checks-line-62)">--show-diff-on-failure</text><text
 class="breeze-static-checks-r6" x="402.6" y="1532.8" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-62)">-s</text><text 
class="breeze-static-checks-r1" x="451.4" y="1532.8" textLength=" [...]
-</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="292.8" 
clip-path="url(#breeze-static-checks-line-63)">--initialize-environment</text><text
 class="breeze-static-checks-r1" x="451.4" y="1557.2" textLength="549" 
clip-path="url(#breeze-static-checks-line-63)">Initialize&#160;environment&#160;before&#160;running&#160;checks.</text><text
 c [...]
-</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="353.8" 
clip-path="url(#breeze-static-checks-line-64)">--max-initialization-attempts</text><text
 class="breeze-static-checks-r1" x="451.4" y="1581.6" textLength="854" 
clip-path="url(#breeze-static-checks-line-64)">Maximum&#160;number&#160;of&#160;attempts&#160;to&#160;initialize&#160;env
 [...]
-</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-r7" x="451.4" y="1606" textLength="854" 
clip-path="url(#breeze-static-checks-line-65)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
-</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-r5" x="451.4" y="1630.4" textLength="854" 
clip-path="url(#breeze-static-checks-line-66)">[default:&#160;3;&#160;1&lt;=x&lt;=10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1654.8" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-67)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r1" x="1464" y="1654.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-67)">
-</text><text class="breeze-static-checks-r5" x="0" y="1679.2" 
textLength="24.4" clip-path="url(#breeze-static-checks-line-68)">╭─</text><text 
class="breeze-static-checks-r5" x="24.4" y="1679.2" textLength="463.6" 
clip-path="url(#breeze-static-checks-line-68)">&#160;Selecting&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on&#160;</text><text
 class="breeze-static-checks-r5" x="488" y="1679.2" textLength="951.6" 
clip-path="url(#breeze-static-checks-line-68)">──────────────────────── [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1703.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-69)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1703.6" textLength="73.2" 
clip-path="url(#breeze-static-checks-line-69)">--file</text><text 
class="breeze-static-checks-r6" x="256.2" y="1703.6" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-69)">-f</text><text 
class="breeze-static-checks-r1" x="305" y="1703.6" textLength="427" 
clip-path="url [...]
-</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="134.2" 
clip-path="url(#breeze-static-checks-line-70)">--all-files</text><text 
class="breeze-static-checks-r6" x="256.2" y="1728" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-70)">-a</text><text 
class="breeze-static-checks-r1" x="305" y="1728" textLength="292.8" 
clip-path="url [...]
-</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="146.4" 
clip-path="url(#breeze-static-checks-line-71)">--commit-ref</text><text 
class="breeze-static-checks-r6" x="256.2" y="1752.4" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-71)">-r</text><text 
class="breeze-static-checks-r1" x="305" y="1752.4" textLength="1134.6" clip 
[...]
-</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-r1" x="305" y="1776.8" textLength="183" 
clip-path="url(#breeze-static-checks-line-72)">exclusive&#160;with&#160;</text><text
 class="breeze-static-checks-r4" x="488" y="1776.8" textLength="158.6" 
clip-path="url(#breeze-static-checks-line-72)">--last-commit</text><text 
class="breeze-static-checks-r1" x="646.6" y="1776.8" te [...]
-</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-r7" x="305" y="1801.2" textLength="1134.6" 
clip-path="url(#breeze-static-checks-line-73)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
-</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-r4" x="24.4" y="1825.6" textLength="158.6" 
clip-path="url(#breeze-static-checks-line-74)">--last-commit</text><text 
class="breeze-static-checks-r6" x="256.2" y="1825.6" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-74)">-c</text><text 
class="breeze-static-checks-r1" x="305" y="1825.6" textLength="793" clip-p [...]
-</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="207.4" 
clip-path="url(#breeze-static-checks-line-75)">--only-my-changes</text><text 
class="breeze-static-checks-r6" x="256.2" y="1850" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-75)">-m</text><text 
class="breeze-static-checks-r1" x="305" y="1850" textLength="1134.6" clip-pa 
[...]
-</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-r1" x="305" y="1874.4" textLength="1134.6" 
clip-path="url(#breeze-static-checks-line-76)">branch&#160;and&#160;HEAD&#160;of&#160;your&#160;branch.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1898.8" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-77)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r1" x="1464" y="1898.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-77)">
-</text><text class="breeze-static-checks-r5" x="0" y="1923.2" 
textLength="24.4" clip-path="url(#breeze-static-checks-line-78)">╭─</text><text 
class="breeze-static-checks-r5" x="24.4" y="1923.2" textLength="463.6" 
clip-path="url(#breeze-static-checks-line-78)">&#160;Building&#160;image&#160;before&#160;running&#160;checks&#160;</text><text
 class="breeze-static-checks-r5" x="488" y="1923.2" textLength="951.6" 
clip-path="url(#breeze-static-checks-line-78)">──────────────────────────────────
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1947.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-79)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1947.6" textLength="317.2" 
clip-path="url(#breeze-static-checks-line-79)">--skip-image-upgrade-check</text><text
 class="breeze-static-checks-r1" x="414.8" y="1947.6" textLength="536.8" 
clip-path="url(#breeze-static-checks-line-79)">Skip&#160;checking&#160;if&#160;the&#160;CI&#160;image&#160;is&#160;up&#160
 [...]
-</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="158.6" 
clip-path="url(#breeze-static-checks-line-80)">--force-build</text><text 
class="breeze-static-checks-r1" x="414.8" y="1972" textLength="707.6" 
clip-path="url(#breeze-static-checks-line-80)">Force&#160;image&#160;build&#160;no&#160;matter&#160;if&#160;it&#160;is&#160;determined&#160;a
 [...]
-</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="231.8" 
clip-path="url(#breeze-static-checks-line-81)">--github-repository</text><text 
class="breeze-static-checks-r6" x="366" y="1996.4" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-81)">-g</text><text 
class="breeze-static-checks-r1" x="414.8" y="1996.4" textLength="585.6 [...]
-</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="109.8" 
clip-path="url(#breeze-static-checks-line-82)">--builder</text><text 
class="breeze-static-checks-r1" x="414.8" y="2020.8" textLength="756.4" 
clip-path="url(#breeze-static-checks-line-82)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160
 [...]
-</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-r5" x="414.8" y="2045.2" textLength="756.4" 
clip-path="url(#breeze-static-checks-line-83)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="2069.6" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-84)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r1" x="1464" y="2069.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-84)">
-</text><text class="breeze-static-checks-r5" x="0" y="2094" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-85)">╭─</text><text 
class="breeze-static-checks-r5" x="24.4" y="2094" textLength="195.2" 
clip-path="url(#breeze-static-checks-line-85)">&#160;Common&#160;options&#160;</text><text
 class="breeze-static-checks-r5" x="219.6" y="2094" textLength="1220" 
clip-path="url(#breeze-static-checks-line-85)">────────────────────────────────────────────────────────────────────────────
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="2118.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-86)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="2118.4" textLength="109.8" 
clip-path="url(#breeze-static-checks-line-86)">--dry-run</text><text 
class="breeze-static-checks-r6" x="158.6" y="2118.4" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-86)">-D</text><text 
class="breeze-static-checks-r1" x="207.4" y="2118.4" textLength="719.8" clip-p 
[...]
-</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)">--verbose</text><text 
class="breeze-static-checks-r6" x="158.6" y="2142.8" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-87)">-v</text><text 
class="breeze-static-checks-r1" x="207.4" y="2142.8" textLength="585.6" 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="73.2" 
clip-path="url(#breeze-static-checks-line-88)">--help</text><text 
class="breeze-static-checks-r6" x="158.6" y="2167.2" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-88)">-h</text><text 
class="breeze-static-checks-r1" x="207.4" y="2167.2" textLength="329.4" 
clip-path= [...]
-</text><text class="breeze-static-checks-r5" x="0" y="2191.6" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-89)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r1" x="1464" y="2191.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-89)">
+</text><text class="breeze-static-checks-r5" x="0" y="239.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-9)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="239.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-9)">check-airflow-v-imports-in-tests&#160;|&#160;check-apache-license-rat&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks [...]
+</text><text class="breeze-static-checks-r5" x="0" y="264" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-10)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="264" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-10)">check-base-operator-partial-arguments&#160;|&#160;check-base-operator-usage&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="264" textLeng [...]
+</text><text class="breeze-static-checks-r5" x="0" y="288.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-11)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="288.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-11)">check-boring-cyborg-configuration&#160;|&#160;check-breeze-top-dependencies-limited&#160;|&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="288.4" textLength="12.2" 
clip-path="url(#breeze-s [...]
+</text><text class="breeze-static-checks-r5" x="0" y="312.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-12)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="312.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-12)">check-builtin-literals&#160;|&#160;check-changelog-format&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="337.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-13)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="337.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-13)">check-changelog-has-no-duplicates&#160;|&#160;check-cncf-k8s-only-for-executors&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="337.2" textLength="12.2" clip 
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="361.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-14)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="361.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-14)">check-code-deprecations&#160;|&#160;check-common-compat-used-for-openlineage&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="361.6" textLen [...]
+</text><text class="breeze-static-checks-r5" x="0" y="386" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-15)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="386" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-15)">check-core-deprecation-classes&#160;|&#160;check-decorated-operator-implements-custom-name&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="386" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-15)">│</text><text [...]
+</text><text class="breeze-static-checks-r5" x="0" y="410.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-16)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="410.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-16)">|&#160;check-default-configuration&#160;|&#160;check-deferrable-default&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class [...]
+</text><text class="breeze-static-checks-r5" x="0" y="434.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-17)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="434.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-17)">check-docstring-param-types&#160;|&#160;check-example-dags-urls&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="459.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-18)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="459.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-18)">check-executables-have-shebangs&#160;|&#160;check-extra-packages-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="459.2" te [...]
+</text><text class="breeze-static-checks-r5" x="0" y="483.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-19)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="483.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-19)">check-extras-order&#160;|&#160;check-fab-migrations&#160;|&#160;check-for-inclusive-language&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="483.6" textLength="12.2" 
clip-path [...]
+</text><text class="breeze-static-checks-r5" x="0" y="508" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-20)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="508" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-20)">check-get-lineage-collector-providers&#160;|&#160;check-hooks-apply&#160;|&#160;check-i18n-json&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="508" textLength="12.2" 
clip-path="url(#breeze-static- [...]
+</text><text class="breeze-static-checks-r5" x="0" y="532.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-21)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="532.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-21)">check-imports-in-providers&#160;|&#160;check-incorrect-use-of-LoggingMixin&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="532. [...]
+</text><text class="breeze-static-checks-r5" x="0" y="556.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-22)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="556.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-22)">check-init-decorator-arguments&#160;|&#160;check-integrations-list-consistent&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="556.8" textLength=" [...]
+</text><text class="breeze-static-checks-r5" x="0" y="581.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-23)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="581.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-23)">check-lazy-logging&#160;|&#160;check-links-to-example-dags-do-not-use-hardcoded-versions&#160;|&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="581.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-23)">│< [...]
+</text><text class="breeze-static-checks-r5" x="0" y="605.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-24)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="605.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-24)">check-merge-conflict&#160;|&#160;check-min-python-version&#160;|&#160;check-newsfragments-are-valid&#160;|</text><text
 class="breeze-static-checks-r5" x="1451.8" y="605.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-24 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="630" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-25)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="630" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-25)">check-no-airflow-deprecation-in-providers&#160;|&#160;check-no-providers-in-core-examples&#160;|</text><text
 class="breeze-static-checks-r5" x="1451.8" y="630" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-25)">│</text><text [...]
+</text><text class="breeze-static-checks-r5" x="0" y="654.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-26)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="654.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-26)">check-only-new-session-with-provide-session&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="678.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-27)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="678.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-27)">check-persist-credentials-disabled-in-github-workflows&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="bre [...]
+</text><text class="breeze-static-checks-r5" x="0" y="703.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-28)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="703.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-28)">check-pre-commit-information-consistent&#160;|&#160;check-provide-create-sessions-imports&#160;|</text><text
 class="breeze-static-checks-r5" x="1451.8" y="703.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-28)">│</text [...]
+</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&#160;|&#160;check-provider-yaml-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;check-pydevd-left-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;check-revision-heads-map&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;check-significant-newsfragments-are-valid&#160;|&#160;&#160;&#160;&#160;</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&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
+</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&#160;|&#160;check-system-tests-present&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;check-taskinstance-tis-attrs&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;check-template-fields-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;check-tests-unittest-testcase&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;check-xml&#160;|&#160;check-zip-file-is-not-committed&#160;|&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;compile-fab-assets&#160;|&#160;compile-ui-assets&#160;|&#160;compile-ui-assets-dev&#160;|&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;debug-statements&#160;|&#160;detect-private-key&#160;|&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;gci&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;generate-airflowctl-datamodels&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;generate-openapi-spec&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;generate-pypi-readme&#160;|&#160;generate-tasksdk-datamodels&#160;|&#160;</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&#160;|&#160;go-mockery&#160;|&#160;go-mod-tidy&#160;|&#160;gofmt&#160;|&#160;identity&#160;|&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;kubeconform&#160;|&#160;lint-chart-schema&#160;|&#160;lint-dockerfile&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;mixed-line-ending&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;mypy-airflow-ctl&#160;|&#160;mypy-dev&#160;|&#160;mypy-devel-common&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;mypy-task-sdk&#160;|&#160;pretty-format-json&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
+</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&#160;|&#160;pylint&#160;|&#160;python-no-log-warn&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1 [...]
+</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)">replace-bad-characters&#160;|&#160;rst-backticks&#160;|&#160;ruff&#160;|&#160;ruff-format&#160;|&#160;shellcheck&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1264.4" text [...]
+</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)">trailing-whitespace&#160;|&#160;ts-compile-lint-simple-auth-manager-ui&#160;|&#160;ts-compile-lint-ui</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1288.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-52)" [...]
+</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)">|&#160;update-black-version&#160;|&#160;update-breeze-cmd-output&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
+</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&#160;|&#160;update-chart-dependencies&#160;|&#160;update-er-diagram&#160;</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)">|&#160;update-in-the-wild-to-be-sorted&#160;|&#160;update-inlined-dockerfile-scripts&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;update-installers-and-pre-commit&#160;|&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;update-migration-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
+</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&#160;|&#160;update-providers-dependencies&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;update-reproducible-source-date-epoch&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;update-supported-versions&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</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&#160;|&#160;update-version&#160;|&#160;validate-chart-annotations&#160;</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)">|&#160;validate-operators-init&#160;|&#160;yamllint&#160;|&#160;zizmor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
+</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&#160;environment&#160;before&#160;running&#160;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&#160;number&#160;of&#160;attempts&#160;to&#160;initialize&#160;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&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
+</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:&#160;3;&#160;1&lt;=x&lt;=10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
+</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)">&#160;Selecting&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on&#160;</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&#160;with&#160;</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)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
+</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&#160;and&#160;HEAD&#160;of&#160;your&#160;branch.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
+</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)">&#160;Building&#160;image&#160;before&#160;running&#160;checks&#160;</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&#160;checking&#160;if&#160;the&#160;CI&#160;image&#160;is&#160;up&#160;to&#1
 [...]
+</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&#160;image&#160;build&#160;no&#160;matter&#160;if&#160;it&#160;is&#160;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&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160
 [...]
+</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:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
+</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)">&#160;Common&#160;options&#160;</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>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_static-checks.txt 
b/dev/breeze/doc/images/output_static-checks.txt
index e8dbbc57b62..fad063d8c98 100644
--- a/dev/breeze/doc/images/output_static-checks.txt
+++ b/dev/breeze/doc/images/output_static-checks.txt
@@ -1 +1 @@
-4d21a8da51102b0c61707aac83f31b3a
+bfb0d23efe62297165a4aacc0cddcfb1
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py 
b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index 9f1a79c15a4..e347b2af036 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -29,6 +29,7 @@ PRE_COMMIT_LIST = [
     "check-aiobotocore-optional",
     "check-airflow-k8s-not-used",
     "check-airflow-providers-bug-report-template",
+    "check-airflow-v-imports-in-tests",
     "check-apache-license-rat",
     "check-base-operator-partial-arguments",
     "check-base-operator-usage",
diff --git a/providers/amazon/tests/system/amazon/aws/example_sagemaker.py 
b/providers/amazon/tests/system/amazon/aws/example_sagemaker.py
index 82be47fc0ae..b04360dcc12 100644
--- a/providers/amazon/tests/system/amazon/aws/example_sagemaker.py
+++ b/providers/amazon/tests/system/amazon/aws/example_sagemaker.py
@@ -419,7 +419,7 @@ def set_up(env_id, role_arn):
     _install_aws_cli_if_needed()
     _build_and_upload_docker_image(preprocess_script, ecr_repository_uri)
 
-    from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
+    from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
     if AIRFLOW_V_3_0_PLUS:
         from airflow.sdk import get_current_context
diff --git 
a/providers/amazon/tests/system/amazon/aws/tests/test_aws_auth_manager.py 
b/providers/amazon/tests/system/amazon/aws/tests/test_aws_auth_manager.py
index 2c60845e4b4..436d0b39cf8 100644
--- a/providers/amazon/tests/system/amazon/aws/tests/test_aws_auth_manager.py
+++ b/providers/amazon/tests/system/amazon/aws/tests/test_aws_auth_manager.py
@@ -22,7 +22,7 @@ from unittest.mock import Mock, patch
 import boto3
 import pytest
 
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if not AIRFLOW_V_3_0_PLUS:
     pytest.skip("AWS auth manager is only compatible with Airflow >= 3.0.0", 
allow_module_level=True)
diff --git a/providers/amazon/tests/system/amazon/aws/utils/__init__.py 
b/providers/amazon/tests/system/amazon/aws/utils/__init__.py
index f5e84bd5c43..5147d8309b7 100644
--- a/providers/amazon/tests/system/amazon/aws/utils/__init__.py
+++ b/providers/amazon/tests/system/amazon/aws/utils/__init__.py
@@ -31,10 +31,11 @@ from botocore.exceptions import ClientError, 
NoCredentialsError
 
 from airflow.decorators import task
 from airflow.providers.amazon.aws.hooks.ssm import SsmHook
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils.state import DagRunState, State
 from airflow.utils.trigger_rule import TriggerRule
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 if TYPE_CHECKING:
     from botocore.client import BaseClient
 
diff --git 
a/providers/amazon/tests/unit/amazon/aws/auth_manager/cli/test_avp_commands.py 
b/providers/amazon/tests/unit/amazon/aws/auth_manager/cli/test_avp_commands.py
index 3e831d1d6d4..95907b648f3 100644
--- 
a/providers/amazon/tests/unit/amazon/aws/auth_manager/cli/test_avp_commands.py
+++ 
b/providers/amazon/tests/unit/amazon/aws/auth_manager/cli/test_avp_commands.py
@@ -21,7 +21,7 @@ from unittest.mock import ANY, Mock, patch
 
 import pytest
 
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if not AIRFLOW_V_3_0_PLUS:
     pytest.skip("AWS auth manager is only compatible with Airflow >= 3.0.0", 
allow_module_level=True)
diff --git 
a/providers/amazon/tests/unit/amazon/aws/auth_manager/cli/test_definition.py 
b/providers/amazon/tests/unit/amazon/aws/auth_manager/cli/test_definition.py
index df2805eacef..426a9919583 100644
--- a/providers/amazon/tests/unit/amazon/aws/auth_manager/cli/test_definition.py
+++ b/providers/amazon/tests/unit/amazon/aws/auth_manager/cli/test_definition.py
@@ -18,7 +18,7 @@ from __future__ import annotations
 
 import pytest
 
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if not AIRFLOW_V_3_0_PLUS:
     pytest.skip("AWS auth manager is only compatible with Airflow >= 3.0.0", 
allow_module_level=True)
diff --git 
a/providers/amazon/tests/unit/amazon/aws/auth_manager/routes/test_login.py 
b/providers/amazon/tests/unit/amazon/aws/auth_manager/routes/test_login.py
index 8734a5898fc..b24ec8b1bf7 100644
--- a/providers/amazon/tests/unit/amazon/aws/auth_manager/routes/test_login.py
+++ b/providers/amazon/tests/unit/amazon/aws/auth_manager/routes/test_login.py
@@ -20,7 +20,7 @@ from unittest.mock import Mock, patch
 
 import pytest
 
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if not AIRFLOW_V_3_0_PLUS:
     pytest.skip("AWS auth manager is only compatible with Airflow >= 3.0.0", 
allow_module_level=True)
diff --git 
a/providers/amazon/tests/unit/amazon/aws/auth_manager/test_aws_auth_manager.py 
b/providers/amazon/tests/unit/amazon/aws/auth_manager/test_aws_auth_manager.py
index f739313211a..055e50ac9a0 100644
--- 
a/providers/amazon/tests/unit/amazon/aws/auth_manager/test_aws_auth_manager.py
+++ 
b/providers/amazon/tests/unit/amazon/aws/auth_manager/test_aws_auth_manager.py
@@ -21,7 +21,7 @@ from unittest.mock import ANY, Mock, patch
 
 import pytest
 
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if not AIRFLOW_V_3_0_PLUS:
     pytest.skip("AWS auth manager is only compatible with Airflow >= 3.0.0", 
allow_module_level=True)
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_athena.py 
b/providers/amazon/tests/unit/amazon/aws/links/test_athena.py
index e1d9ba41b5f..774ea4b05be 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_athena.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_athena.py
@@ -19,8 +19,8 @@ from __future__ import annotations
 import pytest
 
 from airflow.providers.amazon.aws.links.athena import AthenaQueryResultsLink
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_batch.py 
b/providers/amazon/tests/unit/amazon/aws/links/test_batch.py
index 38e6d573d13..ea17e385e9b 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_batch.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_batch.py
@@ -23,8 +23,8 @@ from airflow.providers.amazon.aws.links.batch import (
     BatchJobDetailsLink,
     BatchJobQueueLink,
 )
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_comprehend.py 
b/providers/amazon/tests/unit/amazon/aws/links/test_comprehend.py
index c945f672949..63849fa557f 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_comprehend.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_comprehend.py
@@ -20,8 +20,8 @@ from airflow.providers.amazon.aws.links.comprehend import (
     ComprehendDocumentClassifierLink,
     ComprehendPiiEntitiesDetectionLink,
 )
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_datasync.py 
b/providers/amazon/tests/unit/amazon/aws/links/test_datasync.py
index 983de3b2299..df23c69fb2e 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_datasync.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_datasync.py
@@ -17,8 +17,8 @@
 from __future__ import annotations
 
 from airflow.providers.amazon.aws.links.datasync import 
DataSyncTaskExecutionLink, DataSyncTaskLink
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_ec2.py 
b/providers/amazon/tests/unit/amazon/aws/links/test_ec2.py
index 8d5c7452302..ff2f48e9be1 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_ec2.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_ec2.py
@@ -17,8 +17,8 @@
 from __future__ import annotations
 
 from airflow.providers.amazon.aws.links.ec2 import EC2InstanceDashboardLink, 
EC2InstanceLink
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_emr.py 
b/providers/amazon/tests/unit/amazon/aws/links/test_emr.py
index fc121d4fff0..28ddb4b0d1a 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_emr.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_emr.py
@@ -32,8 +32,8 @@ from airflow.providers.amazon.aws.links.emr import (
     get_log_uri,
     get_serverless_dashboard_url,
 )
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 pytestmark = pytest.mark.db_test
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_glue.py 
b/providers/amazon/tests/unit/amazon/aws/links/test_glue.py
index bf49f23ae12..bb550842814 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_glue.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_glue.py
@@ -17,8 +17,8 @@
 from __future__ import annotations
 
 from airflow.providers.amazon.aws.links.glue import GlueJobRunDetailsLink
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_logs.py 
b/providers/amazon/tests/unit/amazon/aws/links/test_logs.py
index bb7a3277d39..fbcd6b4af37 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_logs.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_logs.py
@@ -17,8 +17,8 @@
 from __future__ import annotations
 
 from airflow.providers.amazon.aws.links.logs import CloudWatchEventsLink
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker.py 
b/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker.py
index 7d79d931206..b1b239d0b76 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker.py
@@ -18,8 +18,8 @@ from __future__ import annotations
 
 from airflow.providers.amazon.aws.links.base_aws import BaseAwsLink
 from airflow.providers.amazon.aws.links.sagemaker import 
SageMakerTransformJobLink
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git 
a/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker_unified_studio.py 
b/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker_unified_studio.py
index 487e116e0c7..166ea279175 100644
--- 
a/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker_unified_studio.py
+++ 
b/providers/amazon/tests/unit/amazon/aws/links/test_sagemaker_unified_studio.py
@@ -17,8 +17,8 @@
 from __future__ import annotations
 
 from airflow.providers.amazon.aws.links.sagemaker_unified_studio import 
SageMakerUnifiedStudioLink
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git a/providers/amazon/tests/unit/amazon/aws/links/test_step_function.py 
b/providers/amazon/tests/unit/amazon/aws/links/test_step_function.py
index 6526a69011b..b6affc28fc5 100644
--- a/providers/amazon/tests/unit/amazon/aws/links/test_step_function.py
+++ b/providers/amazon/tests/unit/amazon/aws/links/test_step_function.py
@@ -22,8 +22,8 @@ from airflow.providers.amazon.aws.links.step_function import (
     StateMachineDetailsLink,
     StateMachineExecutionsDetailsLink,
 )
-from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 from unit.amazon.aws.links.test_base_aws import BaseAwsLinksTestCase
 
 if AIRFLOW_V_3_0_PLUS:
diff --git 
a/providers/apache/beam/tests/unit/apache/beam/operators/test_beam.py 
b/providers/apache/beam/tests/unit/apache/beam/operators/test_beam.py
index dffce7778ee..d03cde55776 100644
--- a/providers/apache/beam/tests/unit/apache/beam/operators/test_beam.py
+++ b/providers/apache/beam/tests/unit/apache/beam/operators/test_beam.py
@@ -32,9 +32,10 @@ from airflow.providers.apache.beam.operators.beam import (
 )
 from airflow.providers.apache.beam.triggers.beam import 
BeamJavaPipelineTrigger, BeamPythonPipelineTrigger
 from airflow.providers.google.cloud.operators.dataflow import 
DataflowConfiguration
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.version import version
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 TASK_ID = "test-beam-operator"
 DEFAULT_RUNNER = "DirectRunner"
 JOB_ID = "test-dataflow-pipeline-id"
diff --git 
a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/cli/test_kubernetes_command.py
 
b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/cli/test_kubernetes_command.py
index 571390204ab..6ae8b81c50f 100644
--- 
a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/cli/test_kubernetes_command.py
+++ 
b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/cli/test_kubernetes_command.py
@@ -28,9 +28,9 @@ from dateutil.parser import parse
 from airflow.cli import cli_parser
 from airflow.executors import executor_loader
 from airflow.providers.cncf.kubernetes.cli import kubernetes_command
-from airflow.providers.cncf.kubernetes.version_compat import AIRFLOW_V_3_0_PLUS
 
 from tests_common.test_utils.config import conf_vars
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 pytestmark = pytest.mark.db_test
 
diff --git 
a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes.py
 
b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes.py
index 8743444f089..adcad09e374 100644
--- 
a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes.py
+++ 
b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes.py
@@ -21,7 +21,7 @@ import pickle
 
 import pytest
 
-from airflow.providers.cncf.kubernetes.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import task
diff --git 
a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_cmd.py
 
b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_cmd.py
index a18c11abc7f..93ac5807f7b 100644
--- 
a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_cmd.py
+++ 
b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_cmd.py
@@ -21,7 +21,8 @@ import contextlib
 import pytest
 
 from airflow.exceptions import AirflowSkipException
-from airflow.providers.cncf.kubernetes.version_compat import AIRFLOW_V_3_0_PLUS
+
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import task
diff --git 
a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py
 
b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py
index 860cf3294a9..94a71961acc 100644
--- 
a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py
+++ 
b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py
@@ -22,7 +22,7 @@ from unittest import mock
 
 import pytest
 
-from airflow.providers.cncf.kubernetes.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import setup, task, teardown
diff --git 
a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/test_template_rendering.py
 
b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/test_template_rendering.py
index 1209058f10f..516ab8c4c13 100644
--- 
a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/test_template_rendering.py
+++ 
b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/test_template_rendering.py
@@ -26,12 +26,12 @@ from sqlalchemy.orm import make_transient
 
 from airflow.models.renderedtifields import RenderedTaskInstanceFields, 
RenderedTaskInstanceFields as RTIF
 from airflow.providers.cncf.kubernetes.template_rendering import 
get_rendered_k8s_spec, render_k8s_pod_yaml
-from airflow.providers.cncf.kubernetes.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils import timezone
 from airflow.utils.session import create_session
 from airflow.version import version
 
 from tests_common.test_utils.compat import BashOperator
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 pytestmark = pytest.mark.db_test
 
diff --git 
a/providers/common/io/tests/system/common/io/example_file_transfer_local_to_s3.py
 
b/providers/common/io/tests/system/common/io/example_file_transfer_local_to_s3.py
index d5a522ac89c..dbeff0a5762 100644
--- 
a/providers/common/io/tests/system/common/io/example_file_transfer_local_to_s3.py
+++ 
b/providers/common/io/tests/system/common/io/example_file_transfer_local_to_s3.py
@@ -24,9 +24,10 @@ from typing import cast
 from airflow import DAG
 from airflow.decorators import task
 from airflow.providers.common.io.operators.file_transfer import 
FileTransferOperator
-from airflow.providers.common.io.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils.trigger_rule import TriggerRule
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import ObjectStoragePath
 else:
diff --git a/providers/common/io/tests/unit/common/io/xcom/test_backend.py 
b/providers/common/io/tests/unit/common/io/xcom/test_backend.py
index 50c71c99be9..08967ca32d2 100644
--- a/providers/common/io/tests/unit/common/io/xcom/test_backend.py
+++ b/providers/common/io/tests/unit/common/io/xcom/test_backend.py
@@ -22,7 +22,6 @@ from unittest.mock import MagicMock
 import pytest
 
 import airflow.models.xcom
-from airflow.providers.common.io.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.providers.common.io.xcom.backend import XComObjectStorageBackend
 from airflow.providers.standard.operators.empty import EmptyOperator
 from airflow.utils import timezone
@@ -30,6 +29,7 @@ from airflow.utils.xcom import XCOM_RETURN_KEY
 
 from tests_common.test_utils import db
 from tests_common.test_utils.config import conf_vars
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 pytestmark = [pytest.mark.db_test]
 
diff --git 
a/providers/databricks/tests/unit/databricks/plugins/test_databricks_workflow.py
 
b/providers/databricks/tests/unit/databricks/plugins/test_databricks_workflow.py
index e9012742f23..504c9289caa 100644
--- 
a/providers/databricks/tests/unit/databricks/plugins/test_databricks_workflow.py
+++ 
b/providers/databricks/tests/unit/databricks/plugins/test_databricks_workflow.py
@@ -37,9 +37,9 @@ from airflow.providers.databricks.plugins.databricks_workflow 
import (
     get_launch_task_id,
     store_databricks_job_run_link,
 )
-from airflow.providers.databricks.version_compat import AIRFLOW_V_3_0_PLUS
 
 from tests_common import RUNNING_TESTS_AGAINST_AIRFLOW_PACKAGES
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 DAG_ID = "test_dag"
 TASK_ID = "test_task"
diff --git a/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py 
b/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py
index a6b2a0d5ce8..271b67e3ba6 100644
--- a/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py
+++ b/providers/dbt/cloud/tests/unit/dbt/cloud/operators/test_dbt.py
@@ -31,9 +31,10 @@ from airflow.providers.dbt.cloud.operators.dbt import (
     DbtCloudRunJobOperator,
 )
 from airflow.providers.dbt.cloud.triggers.dbt import DbtCloudRunJobTrigger
-from airflow.providers.dbt.cloud.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils import timezone
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
 
diff --git a/providers/docker/tests/unit/docker/decorators/test_docker.py 
b/providers/docker/tests/unit/docker/decorators/test_docker.py
index 335fbac4cab..588161c7234 100644
--- a/providers/docker/tests/unit/docker/decorators/test_docker.py
+++ b/providers/docker/tests/unit/docker/decorators/test_docker.py
@@ -22,7 +22,7 @@ from io import StringIO as StringBuffer
 
 import pytest
 
-from airflow.providers.docker.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import setup, task, teardown
diff --git 
a/providers/google/tests/system/google/cloud/kubernetes_engine/example_kubernetes_engine.py
 
b/providers/google/tests/system/google/cloud/kubernetes_engine/example_kubernetes_engine.py
index c214d95469f..2485ea63ff9 100644
--- 
a/providers/google/tests/system/google/cloud/kubernetes_engine/example_kubernetes_engine.py
+++ 
b/providers/google/tests/system/google/cloud/kubernetes_engine/example_kubernetes_engine.py
@@ -25,7 +25,6 @@ import os
 from datetime import datetime
 
 from airflow.models.dag import DAG
-from airflow.providers.common.compat.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.providers.google.cloud.operators.kubernetes_engine import (
     GKECreateClusterOperator,
     GKEDeleteClusterOperator,
@@ -35,6 +34,7 @@ from airflow.providers.standard.operators.bash import 
BashOperator
 from airflow.utils.trigger_rule import TriggerRule
 
 from system.google import DEFAULT_GCP_SYSTEM_TEST_PROJECT_ID
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 ENV_ID = os.environ.get("SYSTEM_TESTS_ENV_ID", "default")
 DAG_ID = "kubernetes_engine"
diff --git 
a/providers/google/tests/system/google/cloud/kubernetes_engine/example_kubernetes_engine_async.py
 
b/providers/google/tests/system/google/cloud/kubernetes_engine/example_kubernetes_engine_async.py
index 257d97da9c0..120addf76e6 100644
--- 
a/providers/google/tests/system/google/cloud/kubernetes_engine/example_kubernetes_engine_async.py
+++ 
b/providers/google/tests/system/google/cloud/kubernetes_engine/example_kubernetes_engine_async.py
@@ -25,7 +25,6 @@ import os
 from datetime import datetime
 
 from airflow.models.dag import DAG
-from airflow.providers.common.compat.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.providers.google.cloud.operators.kubernetes_engine import (
     GKECreateClusterOperator,
     GKEDeleteClusterOperator,
@@ -35,6 +34,7 @@ from airflow.providers.standard.operators.bash import 
BashOperator
 from airflow.utils.trigger_rule import TriggerRule
 
 from system.google import DEFAULT_GCP_SYSTEM_TEST_PROJECT_ID
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 ENV_ID = os.environ.get("SYSTEM_TESTS_ENV_ID", "default")
 DAG_ID = "kubernetes_engine_async"
diff --git 
a/providers/google/tests/system/google/cloud/translate/example_translate.py 
b/providers/google/tests/system/google/cloud/translate/example_translate.py
index 641e9d640b8..ec6f97db27f 100644
--- a/providers/google/tests/system/google/cloud/translate/example_translate.py
+++ b/providers/google/tests/system/google/cloud/translate/example_translate.py
@@ -25,10 +25,11 @@ from __future__ import annotations
 from datetime import datetime
 
 from airflow.models.dag import DAG
-from airflow.providers.common.compat.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.providers.google.cloud.operators.translate import 
CloudTranslateTextOperator
 from airflow.providers.standard.operators.bash import BashOperator
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 DAG_ID = "gcp_translate"
 
 with DAG(
diff --git a/providers/google/tests/unit/google/cloud/links/test_base_link.py 
b/providers/google/tests/unit/google/cloud/links/test_base_link.py
index f0af84dc2ae..b74963d916e 100644
--- a/providers/google/tests/unit/google/cloud/links/test_base_link.py
+++ b/providers/google/tests/unit/google/cloud/links/test_base_link.py
@@ -24,7 +24,8 @@ import pytest
 
 from airflow.providers.google.cloud.links.base import BaseGoogleLink
 from airflow.providers.google.cloud.operators.cloud_base import 
GoogleCloudBaseOperator
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
diff --git a/providers/google/tests/unit/google/cloud/links/test_cloud_run.py 
b/providers/google/tests/unit/google/cloud/links/test_cloud_run.py
index 5e156af8d85..c2bd362efa3 100644
--- a/providers/google/tests/unit/google/cloud/links/test_cloud_run.py
+++ b/providers/google/tests/unit/google/cloud/links/test_cloud_run.py
@@ -23,7 +23,8 @@ import pytest
 
 from airflow.providers.google.cloud.links.cloud_run import 
CloudRunJobLoggingLink
 from airflow.providers.google.cloud.operators.cloud_run import 
CloudRunExecuteJobOperator
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
diff --git a/providers/google/tests/unit/google/cloud/links/test_dataplex.py 
b/providers/google/tests/unit/google/cloud/links/test_dataplex.py
index 3b4f750dabb..7158257d649 100644
--- a/providers/google/tests/unit/google/cloud/links/test_dataplex.py
+++ b/providers/google/tests/unit/google/cloud/links/test_dataplex.py
@@ -43,7 +43,8 @@ from airflow.providers.google.cloud.operators.dataplex import 
(
     DataplexCreateTaskOperator,
     DataplexListTasksOperator,
 )
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
diff --git a/providers/google/tests/unit/google/cloud/links/test_translate.py 
b/providers/google/tests/unit/google/cloud/links/test_translate.py
index 2f127f9440d..0adc28e53e2 100644
--- a/providers/google/tests/unit/google/cloud/links/test_translate.py
+++ b/providers/google/tests/unit/google/cloud/links/test_translate.py
@@ -21,7 +21,7 @@ from unittest import mock
 
 import pytest
 
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 # For no Pydantic environment, we need to skip the tests
 pytest.importorskip("google.cloud.aiplatform_v1")
diff --git 
a/providers/google/tests/unit/google/cloud/operators/test_dataproc.py 
b/providers/google/tests/unit/google/cloud/operators/test_dataproc.py
index 91c2c0a3512..00923cb590a 100644
--- a/providers/google/tests/unit/google/cloud/operators/test_dataproc.py
+++ b/providers/google/tests/unit/google/cloud/operators/test_dataproc.py
@@ -69,11 +69,11 @@ from airflow.providers.google.cloud.triggers.dataproc 
import (
     DataprocSubmitTrigger,
 )
 from airflow.providers.google.common.consts import 
GOOGLE_DEFAULT_DEFERRABLE_METHOD_NAME
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.serialization.serialized_objects import SerializedDAG
 from airflow.utils.timezone import datetime
 
 from tests_common.test_utils.db import clear_db_runs, clear_db_xcom
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
diff --git 
a/providers/google/tests/unit/google/common/auth_backend/test_google_openid.py 
b/providers/google/tests/unit/google/common/auth_backend/test_google_openid.py
index 3588b5e45a1..bf084a40fa3 100644
--- 
a/providers/google/tests/unit/google/common/auth_backend/test_google_openid.py
+++ 
b/providers/google/tests/unit/google/common/auth_backend/test_google_openid.py
@@ -22,7 +22,7 @@ from unittest import mock
 import pytest
 from google.auth.exceptions import GoogleAuthError
 
-from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if not AIRFLOW_V_3_0_PLUS:
     pytest.skip(
diff --git 
a/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_adx.py 
b/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_adx.py
index 0161338f863..c31ae047cd8 100644
--- a/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_adx.py
+++ b/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_adx.py
@@ -24,9 +24,10 @@ from azure.kusto.data._models import KustoResultTable
 from airflow.models import DAG
 from airflow.providers.microsoft.azure.hooks.adx import AzureDataExplorerHook
 from airflow.providers.microsoft.azure.operators.adx import 
AzureDataExplorerQueryOperator
-from airflow.providers.microsoft.azure.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils.timezone import datetime
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 TEST_DAG_ID = "unit_tests"
 DEFAULT_DATE = datetime(2019, 1, 1)
 
diff --git 
a/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_synapse.py
 
b/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_synapse.py
index 62a1021ead8..cda6b791e20 100644
--- 
a/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_synapse.py
+++ 
b/providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_synapse.py
@@ -33,9 +33,10 @@ from airflow.providers.microsoft.azure.operators.synapse 
import (
     AzureSynapseRunPipelineOperator,
     AzureSynapseRunSparkBatchOperator,
 )
-from airflow.providers.microsoft.azure.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils import timezone
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk.execution_time.comms import XComResult
 
diff --git 
a/providers/openlineage/tests/unit/openlineage/extractors/test_base.py 
b/providers/openlineage/tests/unit/openlineage/extractors/test_base.py
index e2cf9e7e763..cbd852d3938 100644
--- a/providers/openlineage/tests/unit/openlineage/extractors/test_base.py
+++ b/providers/openlineage/tests/unit/openlineage/extractors/test_base.py
@@ -24,7 +24,7 @@ from attrs import Factory, define, field
 from openlineage.client.event_v2 import Dataset
 from openlineage.client.facet_v2 import BaseFacet, JobFacet, parent_run, 
sql_job
 
-from airflow.providers.openlineage.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import BaseOperator
diff --git 
a/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py 
b/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
index cd763bf6c48..ae95f69df8d 100644
--- a/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
+++ b/providers/openlineage/tests/unit/openlineage/plugins/test_listener.py
@@ -33,7 +33,8 @@ from openlineage.client.transport.console import ConsoleConfig
 from uuid6 import uuid7
 
 from airflow.models import DAG, DagRun, TaskInstance
-from airflow.providers.openlineage.version_compat import AIRFLOW_V_3_0_PLUS
+
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import BaseOperator
diff --git 
a/providers/openlineage/tests/unit/openlineage/utils/test_selective_enable.py 
b/providers/openlineage/tests/unit/openlineage/utils/test_selective_enable.py
index 473833a48e6..b747418a6d5 100644
--- 
a/providers/openlineage/tests/unit/openlineage/utils/test_selective_enable.py
+++ 
b/providers/openlineage/tests/unit/openlineage/utils/test_selective_enable.py
@@ -19,7 +19,7 @@ from __future__ import annotations
 
 from pendulum import now
 
-from airflow.providers.openlineage.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import dag, task
diff --git a/providers/openlineage/tests/unit/openlineage/utils/test_utils.py 
b/providers/openlineage/tests/unit/openlineage/utils/test_utils.py
index 753c6b16659..6357913e316 100644
--- a/providers/openlineage/tests/unit/openlineage/utils/test_utils.py
+++ b/providers/openlineage/tests/unit/openlineage/utils/test_utils.py
@@ -26,9 +26,10 @@ import pytest
 from uuid6 import uuid7
 
 from airflow import DAG
-from airflow.providers.openlineage.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils import timezone
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import BaseOperator, task
 else:
diff --git 
a/providers/snowflake/tests/unit/snowflake/decorators/test_snowpark.py 
b/providers/snowflake/tests/unit/snowflake/decorators/test_snowpark.py
index 1a3d39d0d1b..b150f81385b 100644
--- a/providers/snowflake/tests/unit/snowflake/decorators/test_snowpark.py
+++ b/providers/snowflake/tests/unit/snowflake/decorators/test_snowpark.py
@@ -24,9 +24,10 @@ from unittest import mock
 import pytest
 
 from airflow.decorators import task
-from airflow.providers.snowflake.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils import timezone
 
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+
 if TYPE_CHECKING:
     from snowflake.snowpark import Session
 
diff --git a/providers/standard/tests/unit/standard/operators/test_python.py 
b/providers/standard/tests/unit/standard/operators/test_python.py
index 184045f18a3..10e0bd986bf 100644
--- a/providers/standard/tests/unit/standard/operators/test_python.py
+++ b/providers/standard/tests/unit/standard/operators/test_python.py
@@ -47,7 +47,8 @@ from airflow.exceptions import (
     AirflowProviderDeprecationWarning,
     DeserializingResultError,
 )
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import BaseOperator
diff --git 
a/providers/standard/tests/unit/standard/sensors/test_external_task_sensor.py 
b/providers/standard/tests/unit/standard/sensors/test_external_task_sensor.py
index fc1f982c8e2..290f276091f 100644
--- 
a/providers/standard/tests/unit/standard/sensors/test_external_task_sensor.py
+++ 
b/providers/standard/tests/unit/standard/sensors/test_external_task_sensor.py
@@ -33,7 +33,8 @@ from airflow.exceptions import (
     TaskDeferred,
 )
 from airflow.models import DagBag, DagRun, TaskInstance
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 if AIRFLOW_V_3_0_PLUS:
     from airflow.sdk import BaseOperator
diff --git a/providers/standard/tests/unit/standard/sensors/test_time_delta.py 
b/providers/standard/tests/unit/standard/sensors/test_time_delta.py
index a42c5ad72cd..2014e9b1275 100644
--- a/providers/standard/tests/unit/standard/sensors/test_time_delta.py
+++ b/providers/standard/tests/unit/standard/sensors/test_time_delta.py
@@ -34,12 +34,12 @@ from airflow.providers.standard.sensors.time_delta import (
     WaitSensor,
 )
 from airflow.providers.standard.triggers.temporal import DateTimeTrigger
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils import timezone
 from airflow.utils.timezone import datetime
 from airflow.utils.types import DagRunType
 
 from tests_common.test_utils import db
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 pytestmark = pytest.mark.db_test
 
diff --git a/providers/standard/tests/unit/standard/sensors/test_weekday.py 
b/providers/standard/tests/unit/standard/sensors/test_weekday.py
index 998e8fae5dc..7bf3dd812c4 100644
--- a/providers/standard/tests/unit/standard/sensors/test_weekday.py
+++ b/providers/standard/tests/unit/standard/sensors/test_weekday.py
@@ -26,11 +26,11 @@ from airflow.models import DagBag
 from airflow.models.dag import DAG
 from airflow.providers.standard.sensors.weekday import DayOfWeekSensor
 from airflow.providers.standard.utils.weekday import WeekDay
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
 from airflow.utils import timezone
 from airflow.utils.timezone import datetime
 
 from tests_common.test_utils import db
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 pytestmark = pytest.mark.db_test
 
diff --git a/providers/standard/tests/unit/standard/triggers/test_file.py 
b/providers/standard/tests/unit/standard/triggers/test_file.py
index b69b5857e2b..2ab66fa360d 100644
--- a/providers/standard/tests/unit/standard/triggers/test_file.py
+++ b/providers/standard/tests/unit/standard/triggers/test_file.py
@@ -21,7 +21,8 @@ import asyncio
 import pytest
 
 from airflow.providers.standard.triggers.file import FileDeleteTrigger, 
FileTrigger
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS
+
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
 
 class TestFileTrigger:
diff --git a/scripts/ci/pre_commit/check_airflow_v_imports_in_tests.py 
b/scripts/ci/pre_commit/check_airflow_v_imports_in_tests.py
new file mode 100755
index 00000000000..f26e84286ac
--- /dev/null
+++ b/scripts/ci/pre_commit/check_airflow_v_imports_in_tests.py
@@ -0,0 +1,81 @@
+#!/usr/bin/env python3
+# 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.
+
+"""
+Check that AIRFLOW_V_X_Y_PLUS constants are only imported from test_utils in 
provider tests.
+"""
+
+from __future__ import annotations
+
+import ast
+import sys
+from pathlib import Path
+
+sys.path.insert(0, str(Path(__file__).parent.resolve()))  # make sure 
common_precommit_utils is imported
+from common_precommit_utils import console
+
+
+def check_airflow_v_imports_and_fix(test_file: Path) -> list[str]:
+    errors = []
+    with test_file.open("r", encoding="utf-8") as f:
+        source = f.read()
+        tree = ast.parse(source, filename=str(test_file))
+    new_lines = source.splitlines(keepends=True)
+    modified = False
+    for node in ast.walk(tree):
+        if isinstance(node, ast.ImportFrom):
+            if node.module and "AIRFLOW_V_" in " ".join([a.name for a in 
node.names]):
+                console.print("Found AIRFLOW_V_*_PLUS import in test file:", 
test_file)
+                if node.module != "tests_common.test_utils.version_compat":
+                    errors.append(
+                        f"{test_file}: AIRFLOW_V_*_PLUS should only be 
imported from tests.test_utils.version_compat, "
+                        f"but found import from '{node.module}'"
+                    )
+                    # Replace the import line
+                    lineno = node.lineno - 1
+                    import_names = ", ".join([a.name for a in node.names])
+                    new_lines[lineno] = f"from 
tests_common.test_utils.version_compat import {import_names}\n"
+                    console.print("[yellow]Replacing import in", test_file, 
"with correct one.")
+                    modified = True
+    if modified:
+        with test_file.open("w", encoding="utf-8") as f:
+            f.writelines(new_lines)
+        console.print(f"[yellow] {test_file} - replaced import with correct 
one.")
+    return errors
+
+
+def main():
+    if len(sys.argv) > 1:
+        test_files = [Path(f) for f in sys.argv[1:]]
+    else:
+        base = Path(__file__).parents[3] / "providers"
+        test_files = list(base.glob("**/tests/**/*.py"))
+        console.print(test_files)
+    all_errors = []
+    for test_file in test_files:
+        all_errors.extend(check_airflow_v_imports_and_fix(test_file))
+    if all_errors:
+        for err in all_errors:
+            console.print(f"[red]{err}")
+        console.print("\n[red]Some AIRFLOW_V_*_PLUS imports were 
incorrect![/]")
+        sys.exit(1)
+    console.print("[green]All AIRFLOW_V_*_PLUS imports in tests are from 
tests.test_utils.version_compat.")
+
+
+if __name__ == "__main__":
+    main()

Reply via email to