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: 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: 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 | bandit | blacken-docs | check-aiobotocore-optional |                      </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 | check-airflow-providers-bug-report-template |       </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 | check-base-operator-partial-arguments |               </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 | check-boring-cyborg-configuration |                  </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 | check-builtin-literals |                 </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 | check-changelog-has-no-duplicates |                     </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 | check-code-deprecations |                    </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 | check-core-deprecation-classes |      </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 | check-default-configuration |  </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 | check-docstring-param-types | check-example-dags-urls </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)">| check-executables-have-shebangs | check-extra-packages-references |            </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 | check-fab-migrations | check-for-inclusive-language |       </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 | check-hooks-apply | check-i18n-json |    </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 | check-incorrect-use-of-LoggingMixin |               </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 | check-integrations-list-consistent |            </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 | check-links-to-example-dags-do-not-use-hardcoded-versions | </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 | check-min-python-version | check-newsfragments-are-valid |</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 | check-no-providers-in-core-examples |</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 |                               &#
[...]
-</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 |                         </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 | check-provide-create-sessions-imports |</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 | check-provider-yaml-valid |                          </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 | check-pydevd-left-in-code |        </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 | check-revision-heads-map |              </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 | check-significant-newsfragments-are-valid |    </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 |                               
[...]
-</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 | check-system-tests-present |             </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 | check-taskinstance-tis-attrs |                         </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 | check-template-fields-valid |          </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 | check-tests-unittest-testcase |               </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 | check-xml | check-zip-file-is-not-committed |     </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 | compile-fab-assets | compile-ui-assets | compile-ui-assets-dev |     </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 | debug-statements | detect-private-key |     </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 | end-of-file-fixer | fix-encoding-pragma | flynt | gci |                 </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 | generate-airflowctl-datamodels |                     </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 | generate-openapi-spec |                        </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 | generate-pypi-readme | generate-tasksdk-datamodels | </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 | go-mockery | go-mod-tidy | gofmt | identity |     </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 | kubeconform | lint-chart-schema | lint-dockerfile |             </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 | lint-json-schema | lint-markdown | mixed-line-ending |         </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 | mypy-airflow-ctl | mypy-dev | mypy-devel-common |            </text><text
class="breeze-static-checks-r5" x="1451.8" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="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 | mypy-task-sdk | pretty-format-json |                         
[...]
-</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 | pylint | python-no-log-warn |              </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 | rst-backticks | ruff | ruff-format | shellcheck |       </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 | ts-compile-lint-simple-auth-manager-ui | 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)">| update-black-version | update-breeze-cmd-output |                           
[...]
-</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 | update-chart-dependencies | update-er-diagram </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)">| update-in-the-wild-to-be-sorted | update-inlined-dockerfile-scripts |          </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 | update-installers-and-pre-commit |     </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 | update-migration-references |                           &#
[...]
-</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 | update-providers-dependencies |                   </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 | update-reproducible-source-date-epoch |                  </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 | update-supported-versions |              </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 | update-version | validate-chart-annotations </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)">| validate-operators-init | yamllint | zizmor)                           
[...]
-</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 environment before running 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 number of attempts to initialize 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 RANGE)                                    &#
[...]
-</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: 3; 1<=x<=10]                                
[...]
-</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)"> Selecting files to run the checks on </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 with </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)                                      
[...]
-</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 and HEAD of your branch.                             
[...]
-</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)"> Building image before running checks </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 checking if the CI image is up 
[...]
-</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 image build no matter if it is determined 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 builder used to perform `docker buildx build` 
[...]
-</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: autodetect]                                  &#
[...]
-</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)"> Common options </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 | check-apache-license-rat |                    </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 | check-base-operator-usage |              </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 | check-breeze-top-dependencies-limited |      </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 | check-changelog-format |                            &#
[...]
+</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 | check-cncf-k8s-only-for-executors |          </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 | check-common-compat-used-for-openlineage |             </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 | check-decorated-operator-implements-custom-name </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)">| check-default-configuration | check-deferrable-default |                       </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 | check-example-dags-urls |                          </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 | check-extra-packages-references |              </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 | check-fab-migrations | check-for-inclusive-language |       </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 | check-hooks-apply | check-i18n-json |    </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 | check-incorrect-use-of-LoggingMixin |               </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 | check-integrations-list-consistent |            </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 | check-links-to-example-dags-do-not-use-hardcoded-versions | </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 | check-min-python-version | check-newsfragments-are-valid |</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 | check-no-providers-in-core-examples |</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 |                              
[...]
+</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 |                         </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 | check-provide-create-sessions-imports |</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 | check-provider-yaml-valid |                          </text><
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="752" textLength="12.2"
clip-path="url(#breeze-static-checks-line-30)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="752" textLength="988.2"
clip-path="url(#breeze-static-checks-line-30)">check-providers-subpackages-init-file-exist | check-pydevd-left-in-code |        </text><text
class="breeze-static-checks-r5" x="1451.8" y="752" textLength="12.2"
clip-path="url(#bree [...]
+</text><text class="breeze-static-checks-r5" x="0" y="776.4" textLength="12.2"
clip-path="url(#breeze-static-checks-line-31)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="776.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-31)">check-pytest-mark-db-test-in-providers | check-revision-heads-map |              </text><text
class="breeze-static-checks-r5" x="1451.8" y="776.4" te [...]
+</text><text class="breeze-static-checks-r5" x="0" y="800.8" textLength="12.2"
clip-path="url(#breeze-static-checks-line-32)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="800.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-32)">check-safe-filter-usage-in-html | check-significant-newsfragments-are-valid |    </text><text
class="breeze-static-checks-r5" x="1451.8" y="800.8" textLength="12.2"
clip-path="url(#breeze-static-chec [...]
+</text><text class="breeze-static-checks-r5" x="0" y="825.2" textLength="12.2"
clip-path="url(#breeze-static-checks-line-33)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="825.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-33)">check-sql-dependency-common-data-structure |                               
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="849.6" textLength="12.2"
clip-path="url(#breeze-static-checks-line-34)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="849.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-34)">check-start-date-not-used-in-defaults | check-system-tests-present |             </text><text
class="breeze-static-checks-r5" x="1451.8" y="849.6" textLen [...]
+</text><text class="breeze-static-checks-r5" x="0" y="874" textLength="12.2"
clip-path="url(#breeze-static-checks-line-35)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="874" textLength="988.2"
clip-path="url(#breeze-static-checks-line-35)">check-system-tests-tocs | check-taskinstance-tis-attrs |                         </text><text
clas [...]
+</text><text class="breeze-static-checks-r5" x="0" y="898.4" textLength="12.2"
clip-path="url(#breeze-static-checks-line-36)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="898.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-36)">check-template-context-variable-in-sync | check-template-fields-valid |          </text><text
class="breeze-static-checks-r5" x="1451.8" y="898.4" textLength="12.2" clip
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="922.8" textLength="12.2"
clip-path="url(#breeze-static-checks-line-37)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="922.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-37)">check-tests-in-the-right-folders | check-tests-unittest-testcase |               </text><text
class="breeze-static-checks-r5" x="1451.8" y="922. [...]
+</text><text class="breeze-static-checks-r5" x="0" y="947.2" textLength="12.2"
clip-path="url(#breeze-static-checks-line-38)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="947.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-38)">check-urlparse-usage-in-code | check-xml | check-zip-file-is-not-committed |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="947.2" textLength="12.2"
clip-path="url(#bre [...]
+</text><text class="breeze-static-checks-r5" x="0" y="971.6" textLength="12.2"
clip-path="url(#breeze-static-checks-line-39)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="971.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-39)">codespell | compile-fab-assets | compile-ui-assets | compile-ui-assets-dev |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="971.6" textLength="12.2"
clip-path [...]
+</text><text class="breeze-static-checks-r5" x="0" y="996" textLength="12.2"
clip-path="url(#breeze-static-checks-line-40)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="996" textLength="988.2"
clip-path="url(#breeze-static-checks-line-40)">create-missing-init-py-files-tests | debug-statements | detect-private-key |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="996" textLength="12.2"
clip-path="url(#breeze-st [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1020.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1020.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-41)">doctoc | end-of-file-fixer | fix-encoding-pragma | flynt | gci |                 </text><text
class="b [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1044.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1044.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-42)">generate-airflow-diagrams | generate-airflowctl-datamodels |                     </text><text
class="breeze-stat [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1069.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1069.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-43)">generate-airflowctl-help-images | generate-openapi-spec |                        </text><text
cla [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1093.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1093.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-44)">generate-openapi-spec-fab | generate-pypi-readme | generate-tasksdk-datamodels | </text><text
class="breeze-static-checks-r5" x="1451.8" y="1093.6" textLength="12.2"
clip-path="url(#breeze-static-checks [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1118" textLength="12.2"
clip-path="url(#breeze-static-checks-line-45)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1118" textLength="988.2"
clip-path="url(#breeze-static-checks-line-45)">generate-volumes-for-sources | go-mockery | go-mod-tidy | gofmt | identity |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="1118" textLength="12.2" cl [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1142.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1142.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-46)">insert-license | kubeconform | lint-chart-schema | lint-dockerfile |             </text><text
class="breeze-static-checks-r5" x="145 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1166.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1166.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-47)">lint-helm-chart | lint-json-schema | lint-markdown | mixed-line-ending |         </text><text
class="breeze-static-checks-r5" x="1451.8" y="1166.8" text [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1191.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1191.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-48)">mypy-airflow-core | mypy-airflow-ctl | mypy-dev | mypy-devel-common |            </text><text
class="breeze-static-checks-r5" x="1451.8" [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1215.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1215.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-49)">mypy-providers | mypy-task-sdk | pretty-format-json |                         
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1240" textLength="12.2"
clip-path="url(#breeze-static-checks-line-50)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1240" textLength="988.2"
clip-path="url(#breeze-static-checks-line-50)">prevent-deprecated-sqlalchemy-usage | pylint | python-no-log-warn |              </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 | rst-backticks | ruff | ruff-format | shellcheck |       </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 | ts-compile-lint-simple-auth-manager-ui | 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)">| update-black-version | update-breeze-cmd-output |                           
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1337.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1337.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-54)">update-breeze-readme-config-hash | update-chart-dependencies | update-er-diagram </text><text
class="breeze-static-checks-r5" x="1451.8" y="1337.6" textLength="12.2"
clip-path="url(#breeze-static-checks-line [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1362" textLength="12.2"
clip-path="url(#breeze-static-checks-line-55)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1362" textLength="988.2"
clip-path="url(#breeze-static-checks-line-55)">| update-in-the-wild-to-be-sorted | update-inlined-dockerfile-scripts |          </text><text
class="breeze-static-checks-r5" x="1451.8" y="1362" textLength="12.2" cl [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1386.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1386.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-56)">update-installed-providers-to-be-sorted | update-installers-and-pre-commit |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="1386.4" textLength="12.2"
clip-path="url(#breeze-sta [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1410.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1410.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-57)">update-local-yml-file | update-migration-references |                           &#
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1435.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1435.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-58)">update-providers-build-files | update-providers-dependencies |                   </text><text
class="breeze-static-checks- [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1459.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1459.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-59)">update-pyproject-toml | update-reproducible-source-date-epoch |                  </text><text
class="breeze-static-checks-r5" x [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1484" textLength="12.2"
clip-path="url(#breeze-static-checks-line-60)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1484" textLength="988.2"
clip-path="url(#breeze-static-checks-line-60)">update-spelling-wordlist-to-be-sorted | update-supported-versions |              </text><text
class="breeze-static-checks-r5" x="1451.8" y="1484" textL [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1508.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1508.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-61)">update-vendored-in-k8s-json-schema | update-version | validate-chart-annotations </text><text
class="breeze-static-checks-r5" x="1451.8" y="1508.4" textLength="12.2"
clip-path="url(#breeze-static-checks-line [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1532.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1532.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-62)">| validate-operators-init | yamllint | zizmor)                           
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1557.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1557.2" textLength="268.4"
clip-path="url(#breeze-static-checks-line-63)">--show-diff-on-failure</text><text
class="breeze-static-checks-r6" x="402.6" y="1557.2" textLength="24.4"
clip-path="url(#breeze-static-checks-line-63)">-s</text><text
class="breeze-static-checks-r1" x="451.4" y="1557.2" textLength=" [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1581.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1581.6" textLength="292.8"
clip-path="url(#breeze-static-checks-line-64)">--initialize-environment</text><text
class="breeze-static-checks-r1" x="451.4" y="1581.6" textLength="549"
clip-path="url(#breeze-static-checks-line-64)">Initialize environment before running checks.</text><text
c [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1606" textLength="12.2"
clip-path="url(#breeze-static-checks-line-65)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1606" textLength="353.8"
clip-path="url(#breeze-static-checks-line-65)">--max-initialization-attempts</text><text
class="breeze-static-checks-r1" x="451.4" y="1606" textLength="854"
clip-path="url(#breeze-static-checks-line-65)">Maximum number of attempts to initialize environme
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1630.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1630.4" textLength="854"
clip-path="url(#breeze-static-checks-line-66)">(INTEGER RANGE)                                   
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1654.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">│</text><text
class="breeze-static-checks-r5" x="451.4" y="1654.8" textLength="854"
clip-path="url(#breeze-static-checks-line-67)">[default: 3; 1<=x<=10]                                
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1679.2"
textLength="1464"
clip-path="url(#breeze-static-checks-line-68)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-static-checks-r1" x="1464" y="1679.2" textLength="12.2"
clip-path="url(#breeze-static-checks-line-68)">
+</text><text class="breeze-static-checks-r5" x="0" y="1703.6"
textLength="24.4" clip-path="url(#breeze-static-checks-line-69)">╭─</text><text
class="breeze-static-checks-r5" x="24.4" y="1703.6" textLength="463.6"
clip-path="url(#breeze-static-checks-line-69)"> Selecting files to run the checks on </text><text
class="breeze-static-checks-r5" x="488" y="1703.6" textLength="951.6"
clip-path="url(#breeze-static-checks-line-69)">──────────────────────── [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1728" textLength="12.2"
clip-path="url(#breeze-static-checks-line-70)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1728" textLength="73.2"
clip-path="url(#breeze-static-checks-line-70)">--file</text><text
class="breeze-static-checks-r6" x="256.2" y="1728" textLength="24.4"
clip-path="url(#breeze-static-checks-line-70)">-f</text><text
class="breeze-static-checks-r1" x="305" y="1728" textLength="427"
clip-path="url(#breeze [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1752.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1752.4" textLength="134.2"
clip-path="url(#breeze-static-checks-line-71)">--all-files</text><text
class="breeze-static-checks-r6" x="256.2" y="1752.4" textLength="24.4"
clip-path="url(#breeze-static-checks-line-71)">-a</text><text
class="breeze-static-checks-r1" x="305" y="1752.4" textLength="292.8" clip-p
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1776.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1776.8" textLength="146.4"
clip-path="url(#breeze-static-checks-line-72)">--commit-ref</text><text
class="breeze-static-checks-r6" x="256.2" y="1776.8" textLength="24.4"
clip-path="url(#breeze-static-checks-line-72)">-r</text><text
class="breeze-static-checks-r1" x="305" y="1776.8" textLength="1134.6" clip
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1801.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text
class="breeze-static-checks-r1" x="305" y="1801.2" textLength="183"
clip-path="url(#breeze-static-checks-line-73)">exclusive with </text><text
class="breeze-static-checks-r4" x="488" y="1801.2" textLength="158.6"
clip-path="url(#breeze-static-checks-line-73)">--last-commit</text><text
class="breeze-static-checks-r1" x="646.6" y="1801.2" te [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1825.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">│</text><text
class="breeze-static-checks-r7" x="305" y="1825.6" textLength="1134.6"
clip-path="url(#breeze-static-checks-line-74)">(TEXT)                                      
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1850" textLength="12.2"
clip-path="url(#breeze-static-checks-line-75)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1850" textLength="158.6"
clip-path="url(#breeze-static-checks-line-75)">--last-commit</text><text
class="breeze-static-checks-r6" x="256.2" y="1850" textLength="24.4"
clip-path="url(#breeze-static-checks-line-75)">-c</text><text
class="breeze-static-checks-r1" x="305" y="1850" textLength="793"
clip-path="url [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1874.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1874.4" textLength="207.4"
clip-path="url(#breeze-static-checks-line-76)">--only-my-changes</text><text
class="breeze-static-checks-r6" x="256.2" y="1874.4" textLength="24.4"
clip-path="url(#breeze-static-checks-line-76)">-m</text><text
class="breeze-static-checks-r1" x="305" y="1874.4" textLength="1134.6" [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1898.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-77)">│</text><text
class="breeze-static-checks-r1" x="305" y="1898.8" textLength="1134.6"
clip-path="url(#breeze-static-checks-line-77)">branch and HEAD of your branch.                             
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1923.2"
textLength="1464"
clip-path="url(#breeze-static-checks-line-78)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-static-checks-r1" x="1464" y="1923.2" textLength="12.2"
clip-path="url(#breeze-static-checks-line-78)">
+</text><text class="breeze-static-checks-r5" x="0" y="1947.6"
textLength="24.4" clip-path="url(#breeze-static-checks-line-79)">╭─</text><text
class="breeze-static-checks-r5" x="24.4" y="1947.6" textLength="463.6"
clip-path="url(#breeze-static-checks-line-79)"> Building image before running checks </text><text
class="breeze-static-checks-r5" x="488" y="1947.6" textLength="951.6"
clip-path="url(#breeze-static-checks-line-79)">──────────────────────────────────
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1972" textLength="12.2"
clip-path="url(#breeze-static-checks-line-80)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1972" textLength="317.2"
clip-path="url(#breeze-static-checks-line-80)">--skip-image-upgrade-check</text><text
class="breeze-static-checks-r1" x="414.8" y="1972" textLength="536.8"
clip-path="url(#breeze-static-checks-line-80)">Skip checking if the CI image is up to
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1996.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1996.4" textLength="158.6"
clip-path="url(#breeze-static-checks-line-81)">--force-build</text><text
class="breeze-static-checks-r1" x="414.8" y="1996.4" textLength="707.6"
clip-path="url(#breeze-static-checks-line-81)">Force image build no matter if it is determined&
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="2020.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="2020.8" textLength="231.8"
clip-path="url(#breeze-static-checks-line-82)">--github-repository</text><text
class="breeze-static-checks-r6" x="366" y="2020.8" textLength="24.4"
clip-path="url(#breeze-static-checks-line-82)">-g</text><text
class="breeze-static-checks-r1" x="414.8" y="2020.8" textLength="585.6 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="2045.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="2045.2" textLength="109.8"
clip-path="url(#breeze-static-checks-line-83)">--builder</text><text
class="breeze-static-checks-r1" x="414.8" y="2045.2" textLength="756.4"
clip-path="url(#breeze-static-checks-line-83)">Buildx builder used to perform `docker buildx build` 
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="2069.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-84)">│</text><text
class="breeze-static-checks-r5" x="414.8" y="2069.6" textLength="756.4"
clip-path="url(#breeze-static-checks-line-84)">[default: autodetect]                                  &#
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="2094" textLength="1464"
clip-path="url(#breeze-static-checks-line-85)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-static-checks-r1" x="1464" y="2094" textLength="12.2"
clip-path="url(#breeze-static-checks-line-85)">
+</text><text class="breeze-static-checks-r5" x="0" y="2118.4"
textLength="24.4" clip-path="url(#breeze-static-checks-line-86)">╭─</text><text
class="breeze-static-checks-r5" x="24.4" y="2118.4" textLength="195.2"
clip-path="url(#breeze-static-checks-line-86)"> Common options </text><text
class="breeze-static-checks-r5" x="219.6" y="2118.4" textLength="1220"
clip-path="url(#breeze-static-checks-line-86)">──────────────────────────────────────────────────────────────────────
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="2142.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="2142.8" textLength="109.8"
clip-path="url(#breeze-static-checks-line-87)">--dry-run</text><text
class="breeze-static-checks-r6" x="158.6" y="2142.8" textLength="24.4"
clip-path="url(#breeze-static-checks-line-87)">-D</text><text
class="breeze-static-checks-r1" x="207.4" y="2142.8" textLength="719.8" clip-p
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="2167.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="2167.2" textLength="109.8"
clip-path="url(#breeze-static-checks-line-88)">--verbose</text><text
class="breeze-static-checks-r6" x="158.6" y="2167.2" textLength="24.4"
clip-path="url(#breeze-static-checks-line-88)">-v</text><text
class="breeze-static-checks-r1" x="207.4" y="2167.2" textLength="585.6" clip-p
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="2191.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-89)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="2191.6" textLength="73.2"
clip-path="url(#breeze-static-checks-line-89)">--help</text><text
class="breeze-static-checks-r6" x="158.6" y="2191.6" textLength="24.4"
clip-path="url(#breeze-static-checks-line-89)">-h</text><text
class="breeze-static-checks-r1" x="207.4" y="2191.6" textLength="329.4"
clip-path= [...]
+</text><text class="breeze-static-checks-r5" x="0" y="2216" textLength="1464"
clip-path="url(#breeze-static-checks-line-90)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-static-checks-r1" x="1464" y="2216" textLength="12.2"
clip-path="url(#breeze-static-checks-line-90)">
</text>
</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()