This is an automated email from the ASF dual-hosted git repository.
weilee 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 f1f5212abf5 Cleanup committed zip file in tests/dags (#46604)
f1f5212abf5 is described below
commit f1f5212abf5f3fb75df6ed148b56f1f79cf5743b
Author: Josix <[email protected]>
AuthorDate: Mon Feb 10 15:14:04 2025 +0800
Cleanup committed zip file in tests/dags (#46604)
* refactor: remove test_dag_warning.zip in test_dagbag.py
* refactor: add dynamic test_zip_path fixture for generating test zip files
* chore: Ignore zip files in .gitignore
* fixup! refactor: add dynamic test_zip_path fixture for generating test
zip files
---
.gitignore | 3 +
.pre-commit-config.yaml | 8 ++
contributing-docs/08_static_code_checks.rst | 2 +
dev/breeze/doc/images/output_static-checks.svg | 110 ++++++++++++------------
dev/breeze/doc/images/output_static-checks.txt | 2 +-
dev/breeze/src/airflow_breeze/pre_commit_ids.py | 1 +
scripts/ci/pre_commit/check_init_in_tests.py | 4 +-
tests/conftest.py | 18 +++-
tests/dag_processing/test_manager.py | 11 ++-
tests/dags/test_dag_warnings.zip | Bin 964 -> 0 bytes
tests/dags/test_zip.zip | Bin 2269 -> 0 bytes
tests/dags/test_zip/file_no_airflow_dag.py | 16 ++++
tests/dags/test_zip/test_zip.py | 33 +++++++
tests/dags/test_zip/test_zip_module/__init__.py | 16 ++++
tests/dags/test_zip/test_zip_module/test.py | 21 +++++
tests/models/test_dagbag.py | 60 ++++++++-----
tests/utils/test_file.py | 8 +-
17 files changed, 225 insertions(+), 88 deletions(-)
diff --git a/.gitignore b/.gitignore
index 84afbd47410..0daa4b0b1c3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -257,3 +257,6 @@ airflow-build-dockerfile*
# Temporary ignore uv.lock until we integrate it fully in our constraint
preparation mechanism
/uv.lock
+
+# Ignore zip files https://github.com/apache/airflow/issues/46449
+*.zip
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index dd4cd85631a..bcd589ad093 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1085,6 +1085,14 @@ repos:
pass_filenames: true
files: \.py$
additional_dependencies: ['rich>=12.4.4']
+ - id: check-zip-file-is-not-committed
+ name: Check no zip files are committed
+ description: Zip files are not allowed in the repository
+ language: fail
+ entry: |
+ Zip files are not allowed in the repository as they are hard to
+ track and have security implications. Please remove the zip file
from the repository.
+ files: \.zip$
- id: check-code-deprecations
name: Check deprecations categories in decorators
entry: ./scripts/ci/pre_commit/check_deprecations.py
diff --git a/contributing-docs/08_static_code_checks.rst
b/contributing-docs/08_static_code_checks.rst
index 1ee8ae52890..d9742a003d8 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -252,6 +252,8 @@ require Breeze Docker image to be built locally.
+-----------------------------------------------------------+--------------------------------------------------------+---------+
| check-xml | Check XML files
with xmllint | |
+-----------------------------------------------------------+--------------------------------------------------------+---------+
+| check-zip-file-is-not-committed | Check no zip
files are committed | |
++-----------------------------------------------------------+--------------------------------------------------------+---------+
| codespell | Run codespell
| |
+-----------------------------------------------------------+--------------------------------------------------------+---------+
| compile-ui-assets | Compile ui
assets (manual) | |
diff --git a/dev/breeze/doc/images/output_static-checks.svg
b/dev/breeze/doc/images/output_static-checks.svg
index c316ed2a2cc..670ff24f586 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 2221.6"
xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2246.0"
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="2170.6" />
+ <rect x="0" y="0" width="1463.0" height="2195.0" />
</clipPath>
<clipPath id="breeze-static-checks-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -309,9 +309,12 @@
<clipPath id="breeze-static-checks-line-87">
<rect x="0" y="2124.3" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="breeze-static-checks-line-88">
+ <rect x="0" y="2148.7" 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="2219.6" 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="2244" 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"/>
@@ -360,56 +363,57 @@
</text><text class="breeze-static-checks-r5" x="0" y="898.4" textLength="12.2"
clip-path="url(#breeze-static-checks-line-36)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="898.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-36)">check-system-tests-tocs | check-taskinstance-tis-attrs |                         </text><text
[...]
</text><text class="breeze-static-checks-r5" x="0" y="922.8" textLength="12.2"
clip-path="url(#breeze-static-checks-line-37)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="922.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-37)">check-template-context-variable-in-sync | check-template-fields-valid |          </text><text
class="breeze-static-checks-r5" x="1451.8" y="922.8" textLength="12.2" clip
[...]
</text><text class="breeze-static-checks-r5" x="0" y="947.2" textLength="12.2"
clip-path="url(#breeze-static-checks-line-38)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="947.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-38)">check-tests-in-the-right-folders | check-tests-unittest-testcase |               </text><text
class="breeze-static-checks-r5" x="1451.8" y="947. [...]
-</text><text class="breeze-static-checks-r5" x="0" y="971.6" textLength="12.2"
clip-path="url(#breeze-static-checks-line-39)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="971.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-39)">check-urlparse-usage-in-code | check-usage-of-re2-over-re | check-xml | codespell</text><text
class="breeze-static-checks-r5" x="1451.8" y="971.6" textLength="12.2"
clip-path="url(#breeze-static-checks-li [...]
-</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)">| compile-ui-assets | compile-ui-assets-dev | compile-www-assets |               </text><text
class="breeze-static-checks-r5" x="1451 [...]
-</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)">compile-www-assets-dev | create-missing-init-py-files-tests | debug-statements | </text><text
class="breeze-static-checks-r5" x="1451.8" y="1020.4" textLength="12.2"
clip-path="url(#breeze-static-checks [...]
-</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)">detect-private-key | doctoc | end-of-file-fixer | fix-encoding-pragma | flynt |  </text><text
class="breeze-static-checks-r5" x="1451.8" y="1044.8" textLength="12.2"
clip-path=" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1069.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1069.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-43)">generate-airflow-diagrams | generate-openapi-spec | generate-pypi-readme |       </text><text
class="breeze-static-checks-r5" x="1451.8" y="1069.2" textLength="12.2" clip-p
[...]
-</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 | identity | insert-license | kubeconform |         </text><text
class="breeze-static-checks-r5" x="1451.8" y="1093.6" text [...]
-</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)">lint-chart-schema | lint-css | lint-dockerfile | lint-helm-chart |               </text><text
class="breeze-static-checks-r5" [...]
-</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-json-schema | lint-markdown | lint-openapi | mixed-line-ending |            </text><text
class="breeze-static-checks-r5" x="1451.8" [...]
-</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 | mypy-dev | mypy-docs | mypy-providers | mypy-task-sdk |           </text><text
class="breeze-static-checks-r5" x="145 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1191.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1191.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-48)">pretty-format-json | pylint | python-no-log-warn | replace-bad-characters |      </text><text
class="breeze-static-checks-r5" x="1451.8" y="1191.2" textLength="12.2" c [...]
-</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)">rst-backticks | ruff | ruff-format | shellcheck | trailing-whitespace |          </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)">ts-compile-format-lint-ui | ts-compile-format-lint-www | update-black-version |  </text><text
class="breeze-static-checks-r5" x="1451.8" y="1240" textLength="12.2"
clip-path="url(#breeze-static-checks- [...]
-</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)">update-breeze-cmd-output | update-breeze-readme-config-hash |                    </text><text
class="breeze-static-ch [...]
-</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-chart-dependencies | update-er-diagram | update-extras |                  </text><text
class="breeze-static-ch [...]
-</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-in-the-wild-to-be-sorted | update-inlined-dockerfile-scripts |            </text><text
class="breeze-static-checks-r5" x="1451.8" y="1313.2" textLengt [...]
-</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-installed-providers-to-be-sorted | update-installers-and-pre-commit |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="1337.6" textLength="12.2"
clip-path="url(#breeze-sta [...]
-</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-local-yml-file | update-migration-references |                            
[...]
-</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-openapi-spec-tags-to-be-sorted | update-providers-build-files |           </text><text
class="breeze-static-checks-r5" x="1451.8" y="1386.4" textLength="12 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1410.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1410.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-57)">update-providers-dependencies | update-reproducible-source-date-epoch |          </text><text
class="breeze-static-checks-r5" x="1451.8" y="1410.8" textLength="12.2" c [...]
-</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-spelling-wordlist-to-be-sorted | update-supported-versions |              </text><text
class="breeze-static-checks-r5" x="1451.8" y="1435.2" [...]
-</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-vendored-in-k8s-json-schema | update-version | validate-operators-init |  </text><text
class="breeze-static-checks-r5" x="1451.8" y="1459.6" textLength="12.2"
clip-path="url(#breeze-static-c [...]
-</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)">yamllint | zizmor)                                  
[...]
-</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-r4" x="24.4" y="1508.4" textLength="268.4"
clip-path="url(#breeze-static-checks-line-61)">--show-diff-on-failure</text><text
class="breeze-static-checks-r6" x="402.6" y="1508.4" textLength="24.4"
clip-path="url(#breeze-static-checks-line-61)">-s</text><text
class="breeze-static-checks-r1" x="451.4" y="1508.4" textLength=" [...]
-</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="292.8"
clip-path="url(#breeze-static-checks-line-62)">--initialize-environment</text><text
class="breeze-static-checks-r1" x="451.4" y="1532.8" textLength="549"
clip-path="url(#breeze-static-checks-line-62)">Initialize environment before running checks.</text><text
c [...]
-</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="353.8"
clip-path="url(#breeze-static-checks-line-63)">--max-initialization-attempts</text><text
class="breeze-static-checks-r1" x="451.4" y="1557.2" textLength="854"
clip-path="url(#breeze-static-checks-line-63)">Maximum number of attempts to initialize env
[...]
-</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-r7" x="451.4" y="1581.6" textLength="854"
clip-path="url(#breeze-static-checks-line-64)">(INTEGER RANGE)                                   
[...]
-</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-r5" x="451.4" y="1606" textLength="854"
clip-path="url(#breeze-static-checks-line-65)">[default: 3; 1<=x<=10]                                 &#
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1630.4"
textLength="1464"
clip-path="url(#breeze-static-checks-line-66)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-static-checks-r1" x="1464" y="1630.4" textLength="12.2"
clip-path="url(#breeze-static-checks-line-66)">
-</text><text class="breeze-static-checks-r5" x="0" y="1654.8"
textLength="24.4" clip-path="url(#breeze-static-checks-line-67)">╭─</text><text
class="breeze-static-checks-r5" x="24.4" y="1654.8" textLength="463.6"
clip-path="url(#breeze-static-checks-line-67)"> Selecting files to run the checks on </text><text
class="breeze-static-checks-r5" x="488" y="1654.8" textLength="951.6"
clip-path="url(#breeze-static-checks-line-67)">──────────────────────── [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1679.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-68)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1679.2" textLength="73.2"
clip-path="url(#breeze-static-checks-line-68)">--file</text><text
class="breeze-static-checks-r6" x="256.2" y="1679.2" textLength="24.4"
clip-path="url(#breeze-static-checks-line-68)">-f</text><text
class="breeze-static-checks-r1" x="305" y="1679.2" textLength="427"
clip-path="url [...]
-</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="134.2"
clip-path="url(#breeze-static-checks-line-69)">--all-files</text><text
class="breeze-static-checks-r6" x="256.2" y="1703.6" textLength="24.4"
clip-path="url(#breeze-static-checks-line-69)">-a</text><text
class="breeze-static-checks-r1" x="305" y="1703.6" textLength="292.8" clip-p
[...]
-</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="146.4"
clip-path="url(#breeze-static-checks-line-70)">--commit-ref</text><text
class="breeze-static-checks-r6" x="256.2" y="1728" textLength="24.4"
clip-path="url(#breeze-static-checks-line-70)">-r</text><text
class="breeze-static-checks-r1" x="305" y="1728" textLength="1134.6"
clip-path="u [...]
-</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-r1" x="305" y="1752.4" textLength="183"
clip-path="url(#breeze-static-checks-line-71)">exclusive with </text><text
class="breeze-static-checks-r4" x="488" y="1752.4" textLength="158.6"
clip-path="url(#breeze-static-checks-line-71)">--last-commit</text><text
class="breeze-static-checks-r1" x="646.6" y="1752.4" te [...]
-</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-r7" x="305" y="1776.8" textLength="1134.6"
clip-path="url(#breeze-static-checks-line-72)">(TEXT)                                      
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1801.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1801.2" textLength="158.6"
clip-path="url(#breeze-static-checks-line-73)">--last-commit</text><text
class="breeze-static-checks-r6" x="256.2" y="1801.2" textLength="24.4"
clip-path="url(#breeze-static-checks-line-73)">-c</text><text
class="breeze-static-checks-r1" x="305" y="1801.2" textLength="793" clip-p [...]
-</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="207.4"
clip-path="url(#breeze-static-checks-line-74)">--only-my-changes</text><text
class="breeze-static-checks-r6" x="256.2" y="1825.6" textLength="24.4"
clip-path="url(#breeze-static-checks-line-74)">-m</text><text
class="breeze-static-checks-r1" x="305" y="1825.6" textLength="1134.6" [...]
-</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-r1" x="305" y="1850" textLength="1134.6"
clip-path="url(#breeze-static-checks-line-75)">branch and HEAD of your branch.                              &
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1874.4"
textLength="1464"
clip-path="url(#breeze-static-checks-line-76)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-static-checks-r1" x="1464" y="1874.4" textLength="12.2"
clip-path="url(#breeze-static-checks-line-76)">
-</text><text class="breeze-static-checks-r5" x="0" y="1898.8"
textLength="24.4" clip-path="url(#breeze-static-checks-line-77)">╭─</text><text
class="breeze-static-checks-r5" x="24.4" y="1898.8" textLength="463.6"
clip-path="url(#breeze-static-checks-line-77)"> Building image before running checks </text><text
class="breeze-static-checks-r5" x="488" y="1898.8" textLength="951.6"
clip-path="url(#breeze-static-checks-line-77)">──────────────────────────────────
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1923.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-78)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="1923.2" textLength="317.2"
clip-path="url(#breeze-static-checks-line-78)">--skip-image-upgrade-check</text><text
class="breeze-static-checks-r1" x="414.8" y="1923.2" textLength="536.8"
clip-path="url(#breeze-static-checks-line-78)">Skip checking if the CI image is up 
[...]
-</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="158.6"
clip-path="url(#breeze-static-checks-line-79)">--force-build</text><text
class="breeze-static-checks-r1" x="414.8" y="1947.6" textLength="707.6"
clip-path="url(#breeze-static-checks-line-79)">Force image build no matter if it is determined&
[...]
-</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="231.8"
clip-path="url(#breeze-static-checks-line-80)">--github-repository</text><text
class="breeze-static-checks-r6" x="366" y="1972" textLength="24.4"
clip-path="url(#breeze-static-checks-line-80)">-g</text><text
class="breeze-static-checks-r1" x="414.8" y="1972" textLength="585.6" clip-p
[...]
-</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="109.8"
clip-path="url(#breeze-static-checks-line-81)">--builder</text><text
class="breeze-static-checks-r1" x="414.8" y="1996.4" textLength="756.4"
clip-path="url(#breeze-static-checks-line-81)">Buildx builder used to perform `docker buildx build` 
[...]
-</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-r5" x="414.8" y="2020.8" textLength="756.4"
clip-path="url(#breeze-static-checks-line-82)">[default: autodetect]                                  &#
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="2045.2"
textLength="1464"
clip-path="url(#breeze-static-checks-line-83)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-static-checks-r1" x="1464" y="2045.2" textLength="12.2"
clip-path="url(#breeze-static-checks-line-83)">
-</text><text class="breeze-static-checks-r5" x="0" y="2069.6"
textLength="24.4" clip-path="url(#breeze-static-checks-line-84)">╭─</text><text
class="breeze-static-checks-r5" x="24.4" y="2069.6" textLength="195.2"
clip-path="url(#breeze-static-checks-line-84)"> Common options </text><text
class="breeze-static-checks-r5" x="219.6" y="2069.6" textLength="1220"
clip-path="url(#breeze-static-checks-line-84)">──────────────────────────────────────────────────────────────────────
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="2094" textLength="12.2"
clip-path="url(#breeze-static-checks-line-85)">│</text><text
class="breeze-static-checks-r4" x="24.4" y="2094" textLength="109.8"
clip-path="url(#breeze-static-checks-line-85)">--dry-run</text><text
class="breeze-static-checks-r6" x="158.6" y="2094" textLength="24.4"
clip-path="url(#breeze-static-checks-line-85)">-D</text><text
class="breeze-static-checks-r1" x="207.4" y="2094" textLength="719.8"
clip-path="url [...]
-</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)">--verbose</text><text
class="breeze-static-checks-r6" x="158.6" y="2118.4" textLength="24.4"
clip-path="url(#breeze-static-checks-line-86)">-v</text><text
class="breeze-static-checks-r1" x="207.4" y="2118.4" textLength="585.6" 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="73.2"
clip-path="url(#breeze-static-checks-line-87)">--help</text><text
class="breeze-static-checks-r6" x="158.6" y="2142.8" textLength="24.4"
clip-path="url(#breeze-static-checks-line-87)">-h</text><text
class="breeze-static-checks-r1" x="207.4" y="2142.8" textLength="329.4"
clip-path= [...]
-</text><text class="breeze-static-checks-r5" x="0" y="2167.2"
textLength="1464"
clip-path="url(#breeze-static-checks-line-88)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-static-checks-r1" x="1464" y="2167.2" textLength="12.2"
clip-path="url(#breeze-static-checks-line-88)">
+</text><text class="breeze-static-checks-r5" x="0" y="971.6" textLength="12.2"
clip-path="url(#breeze-static-checks-line-39)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="971.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-39)">check-urlparse-usage-in-code | check-usage-of-re2-over-re | check-xml |          </text><text
class="breeze-static-checks-r5" x="1451.8" y="971.6" textLength=" [...]
+</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)">check-zip-file-is-not-committed | codespell | compile-ui-assets |                </text><text
class="breeze-static-checks-r5" x="1451 [...]
+</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)">compile-ui-assets-dev | compile-www-assets | compile-www-assets-dev |            </text><text
class="breeze-static-checks-r5" x="1451.8" y="1020.4" [...]
+</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)">create-missing-init-py-files-tests | debug-statements | detect-private-key |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="1044.8" textLength="12.2"
clip-path="url(# [...]
+</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)">doctoc | end-of-file-fixer | fix-encoding-pragma | flynt |                       <
[...]
+</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-airflow-diagrams | generate-openapi-spec | generate-pypi-readme |       </text><text
class="breeze-static-checks-r5" x="1451.8" y="1093.6" textLength="12.2" clip-p
[...]
+</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 | identity | insert-license | kubeconform |         </text><text
class="breeze-static-checks-r5" x="1451.8" y="1118" textLength [...]
+</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-chart-schema | lint-css | lint-dockerfile | lint-helm-chart |               </text><text
class="breeze-static-checks- [...]
+</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-json-schema | lint-markdown | lint-openapi | mixed-line-ending |            </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-airflow | mypy-dev | mypy-docs | mypy-providers | mypy-task-sdk |           </text><text
class="breeze-static-checks-r5" x="145 [...]
+</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)">pretty-format-json | pylint | python-no-log-warn | replace-bad-characters |      </text><text
class="breeze-static-checks-r5" x="1451.8" y="1215.6" textLength="12.2" c [...]
+</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)">rst-backticks | ruff | ruff-format | shellcheck | trailing-whitespace |          </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)">ts-compile-format-lint-ui | ts-compile-format-lint-www | update-black-version |  </text><text
class="breeze-static-checks-r5" x="1451.8" y="1264.4" textLength="12.2"
clip-path="url(#breeze-static-c [...]
+</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-breeze-cmd-output | update-breeze-readme-config-hash |                    </text><text
class="breeze-static-ch [...]
+</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-chart-dependencies | update-er-diagram | update-extras |                  </text><text
class="breeze-static-ch [...]
+</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" textLengt [...]
+</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-openapi-spec-tags-to-be-sorted | update-providers-build-files |           </text><text
class="breeze-static-checks-r5" x="1451.8" y="1410.8" textLength="12 [...]
+</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-dependencies | update-reproducible-source-date-epoch |          </text><text
class="breeze-static-checks-r5" x="1451.8" y="1435.2" textLength="12.2" c [...]
+</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-operators-init |  </text><text
class="breeze-static-checks-r5" x="1451.8" y="1484" textLength="12.2"
clip-path="url(#breeze-static-checks- [...]
+</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)">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>
</g>
</g>
diff --git a/dev/breeze/doc/images/output_static-checks.txt
b/dev/breeze/doc/images/output_static-checks.txt
index d120b5b0839..8f1ea4ed3a7 100644
--- a/dev/breeze/doc/images/output_static-checks.txt
+++ b/dev/breeze/doc/images/output_static-checks.txt
@@ -1 +1 @@
-bc496446ce0ed673262a2515daf88da9
+16b7f3c6c23d11208195ebda9a569fe4
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index a5a75cd8fad..8230e0a1bf7 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -91,6 +91,7 @@ PRE_COMMIT_LIST = [
"check-urlparse-usage-in-code",
"check-usage-of-re2-over-re",
"check-xml",
+ "check-zip-file-is-not-committed",
"codespell",
"compile-ui-assets",
"compile-ui-assets-dev",
diff --git a/scripts/ci/pre_commit/check_init_in_tests.py
b/scripts/ci/pre_commit/check_init_in_tests.py
index a9c6dee2379..6c3e3a538a9 100755
--- a/scripts/ci/pre_commit/check_init_in_tests.py
+++ b/scripts/ci/pre_commit/check_init_in_tests.py
@@ -42,7 +42,9 @@ added = False
if __name__ == "__main__":
for dirname, sub_dirs, _ in os.walk(ROOT_DIR / "tests"):
dir = Path(dirname)
- sub_dirs[:] = [subdir for subdir in sub_dirs if subdir not in
{"__pycache__", "test_logs"}]
+ sub_dirs[:] = [
+ subdir for subdir in sub_dirs if subdir not in {"__pycache__",
"test_logs", "test_zip"}
+ ]
for sub_dir in sub_dirs:
init_py_path = dir / sub_dir / "__init__.py"
if not init_py_path.exists():
diff --git a/tests/conftest.py b/tests/conftest.py
index 1db7027f13c..d1dbd6a3a4b 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -20,16 +20,15 @@ import json
import logging
import os
import sys
+import zipfile
from contextlib import contextmanager
+from pathlib import Path
from typing import TYPE_CHECKING
import pytest
from tests_common.test_utils.log_handlers import non_pytest_handlers
-if TYPE_CHECKING:
- from pathlib import Path
-
# We should set these before loading _any_ of the rest of airflow so that the
# unit test mode config is set as early as possible.
assert "airflow" not in sys.modules, "No airflow module can be imported before
these lines"
@@ -133,6 +132,19 @@ def configure_testing_dag_bundle():
return _config_bundle
[email protected]
+def test_zip_path(tmp_path: Path):
+ TEST_DAGS_FOLDER = Path(__file__).parent / "dags"
+ test_zip_folder = TEST_DAGS_FOLDER / "test_zip"
+ zipped = tmp_path / "test_zip.zip"
+ with zipfile.ZipFile(zipped, "w") as zf:
+ for root, _, files in os.walk(test_zip_folder):
+ for file in files:
+ zf.write(os.path.join(root, file),
os.path.relpath(os.path.join(root, file), test_zip_folder))
+
+ return os.fspath(zipped)
+
+
if TYPE_CHECKING:
# Static checkers do not know about pytest fixtures' types and return,
# In case if them distributed through third party packages.
diff --git a/tests/dag_processing/test_manager.py
b/tests/dag_processing/test_manager.py
index e5cef2e8033..1149b776c53 100644
--- a/tests/dag_processing/test_manager.py
+++ b/tests/dag_processing/test_manager.py
@@ -623,17 +623,16 @@ class TestDagFileProcessorManager:
)
def test_refresh_dags_dir_doesnt_delete_zipped_dags(
- self, tmp_path, testing_dag_bundle, configure_testing_dag_bundle
+ self, tmp_path, testing_dag_bundle, configure_testing_dag_bundle,
test_zip_path
):
"""Test DagFileProcessorManager._refresh_dag_dir method"""
dagbag = DagBag(dag_folder=tmp_path, include_examples=False)
- zipped_dag_path = os.path.join(TEST_DAGS_FOLDER, "test_zip.zip")
- dagbag.process_file(zipped_dag_path)
+ dagbag.process_file(test_zip_path)
dag = dagbag.get_dag("test_zip_dag")
DAG.bulk_write_to_db("testing", None, [dag])
SerializedDagModel.write_dag(dag, bundle_name="testing")
- with configure_testing_dag_bundle(zipped_dag_path):
+ with configure_testing_dag_bundle(test_zip_path):
manager = DagFileProcessorManager(max_runs=1)
manager.run()
@@ -646,12 +645,12 @@ class TestDagFileProcessorManager:
@pytest.mark.usefixtures("testing_dag_bundle")
def test_refresh_dags_dir_deactivates_deleted_zipped_dags(
- self, session, tmp_path, configure_testing_dag_bundle
+ self, session, tmp_path, configure_testing_dag_bundle, test_zip_path
):
"""Test DagFileProcessorManager._refresh_dag_dir method"""
dag_id = "test_zip_dag"
filename = "test_zip.zip"
- source_location = os.path.join(TEST_DAGS_FOLDER, filename)
+ source_location = test_zip_path
bundle_path = Path(tmp_path,
"test_refresh_dags_dir_deactivates_deleted_zipped_dags")
bundle_path.mkdir(exist_ok=True)
zip_dag_path = bundle_path / filename
diff --git a/tests/dags/test_dag_warnings.zip b/tests/dags/test_dag_warnings.zip
deleted file mode 100644
index faba823451b..00000000000
Binary files a/tests/dags/test_dag_warnings.zip and /dev/null differ
diff --git a/tests/dags/test_zip.zip b/tests/dags/test_zip.zip
deleted file mode 100644
index 9b10cca2257..00000000000
Binary files a/tests/dags/test_zip.zip and /dev/null differ
diff --git a/tests/dags/test_zip/file_no_airflow_dag.py
b/tests/dags/test_zip/file_no_airflow_dag.py
new file mode 100644
index 00000000000..13a83393a91
--- /dev/null
+++ b/tests/dags/test_zip/file_no_airflow_dag.py
@@ -0,0 +1,16 @@
+# 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.
diff --git a/tests/dags/test_zip/test_zip.py b/tests/dags/test_zip/test_zip.py
new file mode 100644
index 00000000000..27111006d9c
--- /dev/null
+++ b/tests/dags/test_zip/test_zip.py
@@ -0,0 +1,33 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+from datetime import datetime
+
+from airflow.models import DAG
+from airflow.providers.standard.operators.empty import EmptyOperator
+
+DEFAULT_DATE = datetime(2030, 1, 1)
+
+# DAG tests backfill with pooled tasks
+# Previously backfill would queue the task but never run it
+dag1 = DAG(dag_id="test_zip_dag", start_date=DEFAULT_DATE, schedule="@daily")
+dag1_task1 = EmptyOperator(task_id="dummy", dag=dag1, owner="airflow")
+
+with DAG(dag_id="test_zip_autoregister", schedule=None,
start_date=DEFAULT_DATE):
+ EmptyOperator(task_id="noop")
diff --git a/tests/dags/test_zip/test_zip_module/__init__.py
b/tests/dags/test_zip/test_zip_module/__init__.py
new file mode 100644
index 00000000000..13a83393a91
--- /dev/null
+++ b/tests/dags/test_zip/test_zip_module/__init__.py
@@ -0,0 +1,16 @@
+# 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.
diff --git a/tests/dags/test_zip/test_zip_module/test.py
b/tests/dags/test_zip/test_zip_module/test.py
new file mode 100644
index 00000000000..460164d51d0
--- /dev/null
+++ b/tests/dags/test_zip/test_zip_module/test.py
@@ -0,0 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+
+def say_hello():
+ print("Hello")
diff --git a/tests/models/test_dagbag.py b/tests/models/test_dagbag.py
index 62f5e65037a..b3946546424 100644
--- a/tests/models/test_dagbag.py
+++ b/tests/models/test_dagbag.py
@@ -191,13 +191,12 @@ class TestDagBag:
)
assert dagbag.dags == dags_in_bag # Should not change.
- def test_zip_skip_log(self, caplog):
+ def test_zip_skip_log(self, caplog, test_zip_path):
"""
test the loading of a DAG from within a zip file that skips another
file because
it doesn't have "airflow" and "DAG"
"""
caplog.set_level(logging.INFO)
- test_zip_path = os.path.join(TEST_DAGS_FOLDER, "test_zip.zip")
dagbag = DagBag(dag_folder=test_zip_path, include_examples=False)
assert dagbag.has_logged
@@ -206,13 +205,13 @@ class TestDagBag:
"assumed to contain no DAGs. Skipping." in caplog.text
)
- def test_zip(self, tmp_path):
+ def test_zip(self, tmp_path, test_zip_path):
"""
test the loading of a DAG within a zip file that includes dependencies
"""
syspath_before = deepcopy(sys.path)
dagbag = DagBag(dag_folder=os.fspath(tmp_path), include_examples=False)
- dagbag.process_file(os.path.join(TEST_DAGS_FOLDER, "test_zip.zip"))
+ dagbag.process_file(test_zip_path)
assert dagbag.get_dag("test_zip_dag")
assert sys.path == syspath_before # sys.path doesn't change
assert not dagbag.import_errors
@@ -357,14 +356,6 @@ class TestDagBag:
@pytest.mark.parametrize(
("file_to_load", "expected"),
(
- pytest.param(
- TEST_DAGS_FOLDER / "test_zip.zip",
- {
- "test_zip_dag": "dags/test_zip.zip/test_zip.py",
- "test_zip_autoregister": "dags/test_zip.zip/test_zip.py",
- },
- id="test_zip.zip",
- ),
pytest.param(
pathlib.Path(example_dags_folder) / "example_bash_operator.py",
{"example_bash_operator":
"airflow/example_dags/example_bash_operator.py"},
@@ -380,6 +371,26 @@ class TestDagBag:
assert dag, f"{dag_id} was bagged"
assert dag.fileloc.endswith(path)
+ @pytest.mark.parametrize(
+ ("expected"),
+ (
+ pytest.param(
+ {
+ "test_zip_dag": "test_zip.zip/test_zip.py",
+ "test_zip_autoregister": "test_zip.zip/test_zip.py",
+ },
+ id="test_zip.zip",
+ ),
+ ),
+ )
+ def test_get_zip_dag_registration(self, test_zip_path, expected):
+ dagbag = DagBag(dag_folder=os.devnull, include_examples=False)
+ dagbag.process_file(test_zip_path)
+ for dag_id, path in expected.items():
+ dag = dagbag.get_dag(dag_id)
+ assert dag, f"{dag_id} was bagged"
+ assert
dag.fileloc.endswith(f"{pathlib.Path(test_zip_path).parent}/{path}")
+
def test_dag_registration_with_failure(self):
dagbag = DagBag(dag_folder=os.devnull, include_examples=False)
found = dagbag.process_file(str(TEST_DAGS_FOLDER /
"test_invalid_dup_task.py"))
@@ -431,12 +442,12 @@ class TestDagBag:
assert dagbag.process_file_calls == 2
@patch.object(DagModel, "get_current")
- def test_refresh_packaged_dag(self, mock_dagmodel):
+ def test_refresh_packaged_dag(self, mock_dagmodel, test_zip_path):
"""
Test that we can refresh a packaged DAG
"""
dag_id = "test_zip_dag"
- fileloc = os.path.realpath(os.path.join(TEST_DAGS_FOLDER,
"test_zip.zip/test_zip.py"))
+ fileloc = os.path.realpath(os.path.join(test_zip_path, "test_zip.py"))
mock_dagmodel.return_value = DagModel()
mock_dagmodel.return_value.last_expired =
datetime.max.replace(tzinfo=timezone.utc)
@@ -450,7 +461,7 @@ class TestDagBag:
_TestDagBag.process_file_calls += 1
return super().process_file(filepath, only_if_updated,
safe_mode)
- dagbag = _TestDagBag(dag_folder=os.path.realpath(TEST_DAGS_FOLDER),
include_examples=False)
+ dagbag = _TestDagBag(dag_folder=os.path.realpath(test_zip_path),
include_examples=False)
assert dagbag.process_file_calls == 1
dag = dagbag.get_dag(dag_id)
@@ -877,13 +888,20 @@ with airflow.DAG(
assert dag_file not in dagbag.captured_warnings
assert dagbag.dagbag_stats[0].warning_num == 0
- def test_dabgag_captured_warnings_zip(self):
- dag_file = os.path.join(TEST_DAGS_FOLDER, "test_dag_warnings.zip")
- in_zip_dag_file = f"{dag_file}/test_dag_warnings.py"
- dagbag = DagBag(dag_folder=dag_file, include_examples=False)
+ @pytest.fixture
+ def warning_zipped_dag_path(self, tmp_path: pathlib.Path) -> str:
+ warnings_dag_file = TEST_DAGS_FOLDER / "test_dag_warnings.py"
+ zipped = tmp_path / "test_dag_warnings.zip"
+ with zipfile.ZipFile(zipped, "w") as zf:
+ zf.write(warnings_dag_file, warnings_dag_file.name)
+ return os.fspath(zipped)
+
+ def test_dabgag_captured_warnings_zip(self, warning_zipped_dag_path: str):
+ in_zip_dag_file = f"{warning_zipped_dag_path}/test_dag_warnings.py"
+ dagbag = DagBag(dag_folder=warning_zipped_dag_path,
include_examples=False)
assert len(dagbag.dag_ids) == 1
- assert dag_file in dagbag.captured_warnings
- captured_warnings = dagbag.captured_warnings[dag_file]
+ assert warning_zipped_dag_path in dagbag.captured_warnings
+ captured_warnings = dagbag.captured_warnings[warning_zipped_dag_path]
assert len(captured_warnings) == 2
assert captured_warnings[0] == (f"{in_zip_dag_file}:47:
DeprecationWarning: Deprecated Parameter")
assert captured_warnings[1] == f"{in_zip_dag_file}:49: UserWarning:
Some Warning"
diff --git a/tests/utils/test_file.py b/tests/utils/test_file.py
index 6b5b5b55004..411ced27dda 100644
--- a/tests/utils/test_file.py
+++ b/tests/utils/test_file.py
@@ -88,8 +88,8 @@ class TestOpenMaybeZipped:
open_maybe_zipped(path)
mock_file.assert_called_once_with(path, mode="r")
- def test_open_maybe_zipped_archive(self):
- test_file_path = os.path.join(TEST_DAGS_FOLDER, "test_zip.zip",
"test_zip.py")
+ def test_open_maybe_zipped_archive(self, test_zip_path):
+ test_file_path = os.path.join(test_zip_path, "test_zip.py")
with open_maybe_zipped(test_file_path, "r") as test_file:
content = test_file.read()
assert isinstance(content, str)
@@ -219,7 +219,7 @@ class TestListPyFilesPath:
assert len(modules) == 0
- def test_list_py_file_paths(self):
+ def test_list_py_file_paths(self, test_zip_path):
detected_files = set()
expected_files = set()
# No_dags is empty, _invalid_ is ignored by .airflowignore
@@ -234,6 +234,8 @@ class TestListPyFilesPath:
"test_invalid_param4.py",
"test_nested_dag.py",
"test_imports.py",
+ "file_no_airflow_dag.py", # no_dag test case in test_zip folder
+ "test.py", # no_dag test case in test_zip_module folder
"__init__.py",
}
for root, _, files in os.walk(TEST_DAG_FOLDER):