You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by po...@apache.org on 2022/07/25 21:37:31 UTC

[airflow] branch main updated: Add dev version of asset compilation (#25272)

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 1544868b6e Add dev version of asset compilation (#25272)
1544868b6e is described below

commit 1544868b6e5e8408a3cceba928dea4fde2787d6b
Author: Jarek Potiuk <ja...@polidea.com>
AuthorDate: Mon Jul 25 23:37:22 2022 +0200

    Add dev version of asset compilation (#25272)
    
    When we moved www asset compilation from container to the host in #25169,
    we removed yarn from the image and the old instructions are no longer
    valid. Instead of in-container yarn dev we expect now
    to have yarn dev run in the host. It can be done either with
    pre-commit (if you have no node/yarn installed in your host, pre-commit
    will automatically install both node and yarn in the right versions,
    or if you have yarn installed you can run it manually.
    
    The 'start-airflow' instructions now remove the in-container
    instructions and explain those two options you have.
---
 .pre-commit-config.yaml                            |   9 +
 STATIC_CODE_CHECKS.rst                             |   2 +
 .../airflow_breeze/commands/developer_commands.py  |  23 +-
 .../commands/release_management_commands.py        |   2 +-
 dev/breeze/src/airflow_breeze/pre_commit_ids.py    |   1 +
 dev/breeze/src/airflow_breeze/utils/run_utils.py   |  10 +-
 images/breeze/output-commands-hash.txt             |   4 +-
 images/breeze/output-compile-www-assets.svg        |  82 +++++---
 images/breeze/output-static-checks.svg             | 232 +++++++++++----------
 .../ci/pre_commit/pre_commit_compile_www_assets.py |   5 +-
 ...ets.py => pre_commit_compile_www_assets_dev.py} |   5 +-
 scripts/in_container/run_tmux_welcome.sh           |   8 +-
 12 files changed, 223 insertions(+), 160 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 759f7990a2..aaa2231562 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -604,6 +604,15 @@ repos:
         entry: ./scripts/ci/pre_commit/pre_commit_compile_www_assets.py
         pass_filenames: false
         additional_dependencies: ['yarn@1.22.19']
+      - id: compile-www-assets-dev
+        name: Compile www assets in dev mode
+        language: node
+        stages: ['manual']
+        'types_or': [javascript, tsx, ts]
+        files: ^airflow/www/
+        entry: ./scripts/ci/pre_commit/pre_commit_compile_www_assets_dev.py
+        pass_filenames: false
+        additional_dependencies: ['yarn@1.22.19']
       - id: check-providers-init-file-missing
         name: Provider init file is missing
         pass_filenames: false
diff --git a/STATIC_CODE_CHECKS.rst b/STATIC_CODE_CHECKS.rst
index 24a378a7f8..ca386413b3 100644
--- a/STATIC_CODE_CHECKS.rst
+++ b/STATIC_CODE_CHECKS.rst
@@ -217,6 +217,8 @@ require Breeze Docker image to be build locally.
 +--------------------------------------------------------+------------------------------------------------------------------+---------+
 | compile-www-assets                                     | Compile www assets                                               |         |
 +--------------------------------------------------------+------------------------------------------------------------------+---------+
+| compile-www-assets-dev                                 | Compile www assets in dev mode                                   |         |
++--------------------------------------------------------+------------------------------------------------------------------+---------+
 | create-missing-init-py-files-tests                     | Create missing init.py files in tests                            |         |
 +--------------------------------------------------------+------------------------------------------------------------------+---------+
 | debug-statements                                       | Detect accidentally committed debug statements                   |         |
diff --git a/dev/breeze/src/airflow_breeze/commands/developer_commands.py b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
index 404c2e2863..0910ecad3a 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
@@ -151,6 +151,14 @@ DEVELOPER_PARAMETERS = {
             ],
         },
     ],
+    "breeze compile-www-assets": [
+        {
+            "name": "Compile www assets flag",
+            "options": [
+                "--dev",
+            ],
+        }
+    ],
     "breeze start-airflow": [
         {
             "name": "Basic flags",
@@ -360,7 +368,7 @@ def start_airflow(
 ):
     """Enter breeze.py environment and starts all Airflow components in the tmux session."""
     if use_airflow_version is None:
-        run_compile_www_assets(verbose=verbose, dry_run=dry_run)
+        run_compile_www_assets(dev=False, verbose=verbose, dry_run=dry_run)
     enter_shell(
         verbose=verbose,
         dry_run=dry_run,
@@ -553,18 +561,21 @@ def static_checks(
 @main.command(
     name="compile-www-assets",
     help="Compiles www assets.",
-    context_settings=dict(
-        ignore_unknown_options=True,
-        allow_extra_args=True,
-    ),
+)
+@click.option(
+    "--dev",
+    help="Run development version of assets compilation - it will not quit and automatically "
+    "recompile assets on-the-fly when they are changed.",
+    is_flag=True,
 )
 @option_verbose
 @option_dry_run
 def compile_www_assets(
+    dev: bool,
     verbose: bool,
     dry_run: bool,
 ):
-    compile_www_assets_result = run_compile_www_assets(verbose=verbose, dry_run=dry_run)
+    compile_www_assets_result = run_compile_www_assets(dev=dev, verbose=verbose, dry_run=dry_run)
     if compile_www_assets_result.returncode != 0:
         get_console().print("[warn]New assets were generated[/]")
     sys.exit(0)
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index ed62f68cb8..12aea0ca5e 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -234,7 +234,7 @@ def prepare_airflow_packages(
     debug: bool,
 ):
     perform_environment_checks(verbose=verbose)
-    run_compile_www_assets(verbose=verbose, dry_run=dry_run)
+    run_compile_www_assets(dev=False, verbose=verbose, dry_run=dry_run)
     shell_params = ShellParams(
         verbose=verbose,
         github_repository=github_repository,
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index 02ae0eabb0..a0a0970cb7 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -65,6 +65,7 @@ PRE_COMMIT_LIST = [
     'check-xml',
     'codespell',
     'compile-www-assets',
+    'compile-www-assets-dev',
     'create-missing-init-py-files-tests',
     'debug-statements',
     'detect-private-key',
diff --git a/dev/breeze/src/airflow_breeze/utils/run_utils.py b/dev/breeze/src/airflow_breeze/utils/run_utils.py
index 36c5c6fa93..4d99fa6a67 100644
--- a/dev/breeze/src/airflow_breeze/utils/run_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/run_utils.py
@@ -357,6 +357,7 @@ def get_runnable_ci_image(verbose: bool, dry_run: bool) -> str:
 
 
 def run_compile_www_assets(
+    dev: bool,
     verbose: bool,
     dry_run: bool,
 ):
@@ -364,6 +365,13 @@ def run_compile_www_assets(
 
     assert_pre_commit_installed(verbose=verbose)
     perform_environment_checks(verbose=verbose)
+    if dev:
+        get_console().print("\n[warning] The command below will run forever until you press Ctrl-C[/]\n")
+        get_console().print(
+            "\n[info]If you want to see output of the compilation command,\n"
+            "[info]cancel it, go to airflow/www folder and run 'yarn dev'.\n"
+            "[info]However, it requires you to have local yarn installation.\n"
+        )
     command_to_execute = [
         sys.executable,
         "-m",
@@ -371,7 +379,7 @@ def run_compile_www_assets(
         'run',
         "--hook-stage",
         "manual",
-        'compile-www-assets',
+        'compile-www-assets-dev' if dev else 'compile-www-assets',
         '--all-files',
     ]
     env = os.environ.copy()
diff --git a/images/breeze/output-commands-hash.txt b/images/breeze/output-commands-hash.txt
index 45f64d061c..45c4f050eb 100644
--- a/images/breeze/output-commands-hash.txt
+++ b/images/breeze/output-commands-hash.txt
@@ -8,7 +8,7 @@ build-image:b62509a59badf3aa230e4562df751002
 build-prod-image:b9aa5dcefcd7067a6698f68c05adc2b8
 cleanup:9a94bd1063296ea86e895f671db0b330
 command-hash-export:83bc6a4a8c60b62da3d0f00e81d2c3ea
-compile-www-assets:5f0d8af0a2a074f2ee577604662598c8
+compile-www-assets:23675c1862d0968cbff6ab6f1d93d488
 config:92653afc11889e1b78e3a2e38f41107f
 docker-compose-tests:8ae3b6211fd31db81a750d1c6b96ec3d
 exec:e4329909b8b2a610fa4fad5116c4b896
@@ -29,7 +29,7 @@ self-upgrade:b5437c0a1a91533a11ee9d0a9692369c
 setup-autocomplete:355b72dee171c2fcba46fc90ac7c97b0
 shell:4680295fdd8a276d51518d29360c365c
 start-airflow:92cf775a952439a32d409cd2536da507
-static-checks:da65567b7ace6c226ff31d4ca8c34cc4
+static-checks:03e96245e60c225ed94514ad7b42ceb0
 stop:8ebd8a42f1003495d37b884de5ac7ce6
 tests:e39111ecbd33a65ababb3cbfbac2b069
 verify-image:a6b3c70957aea96a5d4d261f23359a2d
diff --git a/images/breeze/output-compile-www-assets.svg b/images/breeze/output-compile-www-assets.svg
index 5ffd5d828f..da06d16782 100644
--- a/images/breeze/output-compile-www-assets.svg
+++ b/images/breeze/output-compile-www-assets.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 294.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 391.59999999999997" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -19,80 +19,96 @@
         font-weight: 700;
     }
 
-    .terminal-2464517397-matrix {
+    .terminal-1606255584-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-2464517397-title {
+    .terminal-1606255584-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-2464517397-r1 { fill: #c5c8c6;font-weight: bold }
-.terminal-2464517397-r2 { fill: #c5c8c6 }
-.terminal-2464517397-r3 { fill: #d0b344;font-weight: bold }
-.terminal-2464517397-r4 { fill: #868887 }
-.terminal-2464517397-r5 { fill: #68a0b3;font-weight: bold }
-.terminal-2464517397-r6 { fill: #98a84b;font-weight: bold }
+    .terminal-1606255584-r1 { fill: #c5c8c6;font-weight: bold }
+.terminal-1606255584-r2 { fill: #c5c8c6 }
+.terminal-1606255584-r3 { fill: #d0b344;font-weight: bold }
+.terminal-1606255584-r4 { fill: #868887 }
+.terminal-1606255584-r5 { fill: #68a0b3;font-weight: bold }
+.terminal-1606255584-r6 { fill: #98a84b;font-weight: bold }
     </style>
 
     <defs>
-    <clipPath id="terminal-2464517397-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="243.0" />
+    <clipPath id="terminal-1606255584-clip-terminal">
+      <rect x="0" y="0" width="1463.0" height="340.59999999999997" />
     </clipPath>
-    <clipPath id="terminal-2464517397-line-0">
+    <clipPath id="terminal-1606255584-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2464517397-line-1">
+<clipPath id="terminal-1606255584-line-1">
     <rect x="0" y="25.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2464517397-line-2">
+<clipPath id="terminal-1606255584-line-2">
     <rect x="0" y="50.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2464517397-line-3">
+<clipPath id="terminal-1606255584-line-3">
     <rect x="0" y="74.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2464517397-line-4">
+<clipPath id="terminal-1606255584-line-4">
     <rect x="0" y="99.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2464517397-line-5">
+<clipPath id="terminal-1606255584-line-5">
     <rect x="0" y="123.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2464517397-line-6">
+<clipPath id="terminal-1606255584-line-6">
     <rect x="0" y="147.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2464517397-line-7">
+<clipPath id="terminal-1606255584-line-7">
     <rect x="0" y="172.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2464517397-line-8">
+<clipPath id="terminal-1606255584-line-8">
     <rect x="0" y="196.7" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="terminal-1606255584-line-9">
+    <rect x="0" y="221.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="terminal-1606255584-line-10">
+    <rect x="0" y="245.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="terminal-1606255584-line-11">
+    <rect x="0" y="269.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="terminal-1606255584-line-12">
+    <rect x="0" y="294.3" 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="292" rx="8"/><text class="terminal-2464517397-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;compile-www-assets</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="389.6" rx="8"/><text class="terminal-1606255584-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;compile-www-assets</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
         
-    <g transform="translate(9, 41)" clip-path="url(#terminal-2464517397-clip-terminal)">
+    <g transform="translate(9, 41)" clip-path="url(#terminal-1606255584-clip-terminal)">
     
-    <g class="terminal-2464517397-matrix">
-    <text class="terminal-2464517397-r2" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-2464517397-line-0)">
-</text><text class="terminal-2464517397-r3" x="12.2" y="44.4" textLength="85.4" clip-path="url(#terminal-2464517397-line-1)">Usage:&#160;</text><text class="terminal-2464517397-r1" x="97.6" y="44.4" textLength="427" clip-path="url(#terminal-2464517397-line-1)">breeze&#160;compile-www-assets&#160;[OPTIONS]</text><text class="terminal-2464517397-r2" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-2464517397-line-1)">
-</text><text class="terminal-2464517397-r2" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-2464517397-line-2)">
-</text><text class="terminal-2464517397-r2" x="12.2" y="93.2" textLength="244" clip-path="url(#terminal-2464517397-line-3)">Compiles&#160;www&#160;assets.</text><text class="terminal-2464517397-r2" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-2464517397-line-3)">
-</text><text class="terminal-2464517397-r2" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-2464517397-line-4)">
-</text><text class="terminal-2464517397-r4" x="0" y="142" textLength="24.4" clip-path="url(#terminal-2464517397-line-5)">╭─</text><text class="terminal-2464517397-r4" x="24.4" y="142" textLength="1415.2" clip-path="url(#terminal-2464517397-line-5)">&#160;Options&#160;───────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-2464517397-r4" x="1439.6" y="142" textLength="24.4" clip-path="url(#terminal-2464517397- [...]
-</text><text class="terminal-2464517397-r4" x="0" y="166.4" textLength="12.2" clip-path="url(#terminal-2464517397-line-6)">│</text><text class="terminal-2464517397-r5" x="24.4" y="166.4" textLength="12.2" clip-path="url(#terminal-2464517397-line-6)">-</text><text class="terminal-2464517397-r5" x="36.6" y="166.4" textLength="97.6" clip-path="url(#terminal-2464517397-line-6)">-verbose</text><text class="terminal-2464517397-r6" x="158.6" y="166.4" textLength="24.4" clip-path="url(#terminal- [...]
-</text><text class="terminal-2464517397-r4" x="0" y="190.8" textLength="12.2" clip-path="url(#terminal-2464517397-line-7)">│</text><text class="terminal-2464517397-r5" x="24.4" y="190.8" textLength="12.2" clip-path="url(#terminal-2464517397-line-7)">-</text><text class="terminal-2464517397-r5" x="36.6" y="190.8" textLength="48.8" clip-path="url(#terminal-2464517397-line-7)">-dry</text><text class="terminal-2464517397-r5" x="85.4" y="190.8" textLength="48.8" clip-path="url(#terminal-24645 [...]
-</text><text class="terminal-2464517397-r4" x="0" y="215.2" textLength="12.2" clip-path="url(#terminal-2464517397-line-8)">│</text><text class="terminal-2464517397-r5" x="24.4" y="215.2" textLength="12.2" clip-path="url(#terminal-2464517397-line-8)">-</text><text class="terminal-2464517397-r5" x="36.6" y="215.2" textLength="61" clip-path="url(#terminal-2464517397-line-8)">-help</text><text class="terminal-2464517397-r6" x="158.6" y="215.2" textLength="24.4" clip-path="url(#terminal-24645 [...]
-</text><text class="terminal-2464517397-r4" x="0" y="239.6" textLength="1464" clip-path="url(#terminal-2464517397-line-9)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-2464517397-r2" x="1464" y="239.6" textLength="12.2" clip-path="url(#terminal-2464517397-line-9)">
+    <g class="terminal-1606255584-matrix">
+    <text class="terminal-1606255584-r2" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-1606255584-line-0)">
+</text><text class="terminal-1606255584-r3" x="12.2" y="44.4" textLength="85.4" clip-path="url(#terminal-1606255584-line-1)">Usage:&#160;</text><text class="terminal-1606255584-r1" x="97.6" y="44.4" textLength="427" clip-path="url(#terminal-1606255584-line-1)">breeze&#160;compile-www-assets&#160;[OPTIONS]</text><text class="terminal-1606255584-r2" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-1606255584-line-1)">
+</text><text class="terminal-1606255584-r2" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-1606255584-line-2)">
+</text><text class="terminal-1606255584-r2" x="12.2" y="93.2" textLength="244" clip-path="url(#terminal-1606255584-line-3)">Compiles&#160;www&#160;assets.</text><text class="terminal-1606255584-r2" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-1606255584-line-3)">
+</text><text class="terminal-1606255584-r2" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-1606255584-line-4)">
+</text><text class="terminal-1606255584-r4" x="0" y="142" textLength="24.4" clip-path="url(#terminal-1606255584-line-5)">╭─</text><text class="terminal-1606255584-r4" x="24.4" y="142" textLength="1415.2" clip-path="url(#terminal-1606255584-line-5)">&#160;Compile&#160;www&#160;assets&#160;flag&#160;───────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-1606255584-r4" x="1439.6" y="142" textLength="24.4" clip-path="url(#termi [...]
+</text><text class="terminal-1606255584-r4" x="0" y="166.4" textLength="12.2" clip-path="url(#terminal-1606255584-line-6)">│</text><text class="terminal-1606255584-r5" x="24.4" y="166.4" textLength="12.2" clip-path="url(#terminal-1606255584-line-6)">-</text><text class="terminal-1606255584-r5" x="36.6" y="166.4" textLength="48.8" clip-path="url(#terminal-1606255584-line-6)">-dev</text><text class="terminal-1606255584-r2" x="134.2" y="166.4" textLength="1305.4" clip-path="url(#terminal-16 [...]
+</text><text class="terminal-1606255584-r4" x="0" y="190.8" textLength="12.2" clip-path="url(#terminal-1606255584-line-7)">│</text><text class="terminal-1606255584-r2" x="134.2" y="190.8" textLength="1305.4" clip-path="url(#terminal-1606255584-line-7)">on-the-fly&#160;when&#160;they&#160;are&#160;changed.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="terminal-1606255584-r4" x="0" y="215.2" textLength="1464" clip-path="url(#terminal-1606255584-line-8)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-1606255584-r2" x="1464" y="215.2" textLength="12.2" clip-path="url(#terminal-1606255584-line-8)">
+</text><text class="terminal-1606255584-r4" x="0" y="239.6" textLength="24.4" clip-path="url(#terminal-1606255584-line-9)">╭─</text><text class="terminal-1606255584-r4" x="24.4" y="239.6" textLength="1415.2" clip-path="url(#terminal-1606255584-line-9)">&#160;Options&#160;───────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-1606255584-r4" x="1439.6" y="239.6" textLength="24.4" clip-path="url(#terminal-16062 [...]
+</text><text class="terminal-1606255584-r4" x="0" y="264" textLength="12.2" clip-path="url(#terminal-1606255584-line-10)">│</text><text class="terminal-1606255584-r5" x="24.4" y="264" textLength="12.2" clip-path="url(#terminal-1606255584-line-10)">-</text><text class="terminal-1606255584-r5" x="36.6" y="264" textLength="97.6" clip-path="url(#terminal-1606255584-line-10)">-verbose</text><text class="terminal-1606255584-r6" x="158.6" y="264" textLength="24.4" clip-path="url(#terminal-16062 [...]
+</text><text class="terminal-1606255584-r4" x="0" y="288.4" textLength="12.2" clip-path="url(#terminal-1606255584-line-11)">│</text><text class="terminal-1606255584-r5" x="24.4" y="288.4" textLength="12.2" clip-path="url(#terminal-1606255584-line-11)">-</text><text class="terminal-1606255584-r5" x="36.6" y="288.4" textLength="48.8" clip-path="url(#terminal-1606255584-line-11)">-dry</text><text class="terminal-1606255584-r5" x="85.4" y="288.4" textLength="48.8" clip-path="url(#terminal-16 [...]
+</text><text class="terminal-1606255584-r4" x="0" y="312.8" textLength="12.2" clip-path="url(#terminal-1606255584-line-12)">│</text><text class="terminal-1606255584-r5" x="24.4" y="312.8" textLength="12.2" clip-path="url(#terminal-1606255584-line-12)">-</text><text class="terminal-1606255584-r5" x="36.6" y="312.8" textLength="61" clip-path="url(#terminal-1606255584-line-12)">-help</text><text class="terminal-1606255584-r6" x="158.6" y="312.8" textLength="24.4" clip-path="url(#terminal-16 [...]
+</text><text class="terminal-1606255584-r4" x="0" y="337.2" textLength="1464" clip-path="url(#terminal-1606255584-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-1606255584-r2" x="1464" y="337.2" textLength="12.2" clip-path="url(#terminal-1606255584-line-13)">
 </text>
     </g>
     </g>
diff --git a/images/breeze/output-static-checks.svg b/images/breeze/output-static-checks.svg
index 6491b1b90e..37c6deb229 100644
--- a/images/breeze/output-static-checks.svg
+++ b/images/breeze/output-static-checks.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1270.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1294.3999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -19,241 +19,245 @@
         font-weight: 700;
     }
 
-    .terminal-376748321-matrix {
+    .terminal-880726558-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-376748321-title {
+    .terminal-880726558-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-376748321-r1 { fill: #c5c8c6;font-weight: bold }
-.terminal-376748321-r2 { fill: #c5c8c6 }
-.terminal-376748321-r3 { fill: #d0b344;font-weight: bold }
-.terminal-376748321-r4 { fill: #868887 }
-.terminal-376748321-r5 { fill: #68a0b3;font-weight: bold }
-.terminal-376748321-r6 { fill: #98a84b;font-weight: bold }
-.terminal-376748321-r7 { fill: #8d7b39 }
+    .terminal-880726558-r1 { fill: #c5c8c6;font-weight: bold }
+.terminal-880726558-r2 { fill: #c5c8c6 }
+.terminal-880726558-r3 { fill: #d0b344;font-weight: bold }
+.terminal-880726558-r4 { fill: #868887 }
+.terminal-880726558-r5 { fill: #68a0b3;font-weight: bold }
+.terminal-880726558-r6 { fill: #98a84b;font-weight: bold }
+.terminal-880726558-r7 { fill: #8d7b39 }
     </style>
 
     <defs>
-    <clipPath id="terminal-376748321-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="1219.0" />
+    <clipPath id="terminal-880726558-clip-terminal">
+      <rect x="0" y="0" width="1463.0" height="1243.3999999999999" />
     </clipPath>
-    <clipPath id="terminal-376748321-line-0">
+    <clipPath id="terminal-880726558-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-1">
+<clipPath id="terminal-880726558-line-1">
     <rect x="0" y="25.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-2">
+<clipPath id="terminal-880726558-line-2">
     <rect x="0" y="50.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-3">
+<clipPath id="terminal-880726558-line-3">
     <rect x="0" y="74.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-4">
+<clipPath id="terminal-880726558-line-4">
     <rect x="0" y="99.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-5">
+<clipPath id="terminal-880726558-line-5">
     <rect x="0" y="123.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-6">
+<clipPath id="terminal-880726558-line-6">
     <rect x="0" y="147.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-7">
+<clipPath id="terminal-880726558-line-7">
     <rect x="0" y="172.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-8">
+<clipPath id="terminal-880726558-line-8">
     <rect x="0" y="196.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-9">
+<clipPath id="terminal-880726558-line-9">
     <rect x="0" y="221.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-10">
+<clipPath id="terminal-880726558-line-10">
     <rect x="0" y="245.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-11">
+<clipPath id="terminal-880726558-line-11">
     <rect x="0" y="269.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-12">
+<clipPath id="terminal-880726558-line-12">
     <rect x="0" y="294.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-13">
+<clipPath id="terminal-880726558-line-13">
     <rect x="0" y="318.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-14">
+<clipPath id="terminal-880726558-line-14">
     <rect x="0" y="343.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-15">
+<clipPath id="terminal-880726558-line-15">
     <rect x="0" y="367.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-16">
+<clipPath id="terminal-880726558-line-16">
     <rect x="0" y="391.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-17">
+<clipPath id="terminal-880726558-line-17">
     <rect x="0" y="416.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-18">
+<clipPath id="terminal-880726558-line-18">
     <rect x="0" y="440.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-19">
+<clipPath id="terminal-880726558-line-19">
     <rect x="0" y="465.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-20">
+<clipPath id="terminal-880726558-line-20">
     <rect x="0" y="489.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-21">
+<clipPath id="terminal-880726558-line-21">
     <rect x="0" y="513.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-22">
+<clipPath id="terminal-880726558-line-22">
     <rect x="0" y="538.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-23">
+<clipPath id="terminal-880726558-line-23">
     <rect x="0" y="562.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-24">
+<clipPath id="terminal-880726558-line-24">
     <rect x="0" y="587.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-25">
+<clipPath id="terminal-880726558-line-25">
     <rect x="0" y="611.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-26">
+<clipPath id="terminal-880726558-line-26">
     <rect x="0" y="635.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-27">
+<clipPath id="terminal-880726558-line-27">
     <rect x="0" y="660.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-28">
+<clipPath id="terminal-880726558-line-28">
     <rect x="0" y="684.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-29">
+<clipPath id="terminal-880726558-line-29">
     <rect x="0" y="709.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-30">
+<clipPath id="terminal-880726558-line-30">
     <rect x="0" y="733.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-31">
+<clipPath id="terminal-880726558-line-31">
     <rect x="0" y="757.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-32">
+<clipPath id="terminal-880726558-line-32">
     <rect x="0" y="782.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-33">
+<clipPath id="terminal-880726558-line-33">
     <rect x="0" y="806.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-34">
+<clipPath id="terminal-880726558-line-34">
     <rect x="0" y="831.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-35">
+<clipPath id="terminal-880726558-line-35">
     <rect x="0" y="855.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-36">
+<clipPath id="terminal-880726558-line-36">
     <rect x="0" y="879.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-37">
+<clipPath id="terminal-880726558-line-37">
     <rect x="0" y="904.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-38">
+<clipPath id="terminal-880726558-line-38">
     <rect x="0" y="928.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-39">
+<clipPath id="terminal-880726558-line-39">
     <rect x="0" y="953.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-40">
+<clipPath id="terminal-880726558-line-40">
     <rect x="0" y="977.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-41">
+<clipPath id="terminal-880726558-line-41">
     <rect x="0" y="1001.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-42">
+<clipPath id="terminal-880726558-line-42">
     <rect x="0" y="1026.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-43">
+<clipPath id="terminal-880726558-line-43">
     <rect x="0" y="1050.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-44">
+<clipPath id="terminal-880726558-line-44">
     <rect x="0" y="1075.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-45">
+<clipPath id="terminal-880726558-line-45">
     <rect x="0" y="1099.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-46">
+<clipPath id="terminal-880726558-line-46">
     <rect x="0" y="1123.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-47">
+<clipPath id="terminal-880726558-line-47">
     <rect x="0" y="1148.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-376748321-line-48">
+<clipPath id="terminal-880726558-line-48">
     <rect x="0" y="1172.7" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="terminal-880726558-line-49">
+    <rect x="0" y="1197.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="1268" rx="8"/><text class="terminal-376748321-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;static-checks</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1292.4" rx="8"/><text class="terminal-880726558-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;static-checks</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
         
-    <g transform="translate(9, 41)" clip-path="url(#terminal-376748321-clip-terminal)">
+    <g transform="translate(9, 41)" clip-path="url(#terminal-880726558-clip-terminal)">
     
-    <g class="terminal-376748321-matrix">
-    <text class="terminal-376748321-r2" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-376748321-line-0)">
-</text><text class="terminal-376748321-r3" x="12.2" y="44.4" textLength="85.4" clip-path="url(#terminal-376748321-line-1)">Usage:&#160;</text><text class="terminal-376748321-r1" x="97.6" y="44.4" textLength="610" clip-path="url(#terminal-376748321-line-1)">breeze&#160;static-checks&#160;[OPTIONS]&#160;[PRECOMMIT_ARGS]...</text><text class="terminal-376748321-r2" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-376748321-line-1)">
-</text><text class="terminal-376748321-r2" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-376748321-line-2)">
-</text><text class="terminal-376748321-r2" x="12.2" y="93.2" textLength="219.6" clip-path="url(#terminal-376748321-line-3)">Run&#160;static&#160;checks.</text><text class="terminal-376748321-r2" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-376748321-line-3)">
-</text><text class="terminal-376748321-r2" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-376748321-line-4)">
-</text><text class="terminal-376748321-r4" x="0" y="142" textLength="24.4" clip-path="url(#terminal-376748321-line-5)">╭─</text><text class="terminal-376748321-r4" x="24.4" y="142" textLength="1415.2" clip-path="url(#terminal-376748321-line-5)">&#160;Pre-commit&#160;flags&#160;──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-376748321-r4" x="1439.6" y="142" textLength="24.4" clip-path="url(#terminal-376748321-l [...]
-</text><text class="terminal-376748321-r4" x="0" y="166.4" textLength="12.2" clip-path="url(#terminal-376748321-line-6)">│</text><text class="terminal-376748321-r5" x="24.4" y="166.4" textLength="12.2" clip-path="url(#terminal-376748321-line-6)">-</text><text class="terminal-376748321-r5" x="36.6" y="166.4" textLength="61" clip-path="url(#terminal-376748321-line-6)">-type</text><text class="terminal-376748321-r6" x="317.2" y="166.4" textLength="24.4" clip-path="url(#terminal-376748321-li [...]
-</text><text class="terminal-376748321-r4" x="0" y="190.8" textLength="12.2" clip-path="url(#terminal-376748321-line-7)">│</text><text class="terminal-376748321-r7" x="366" y="190.8" textLength="1073.6" clip-path="url(#terminal-376748321-line-7)">(all&#160;|&#160;black&#160;|&#160;blacken-docs&#160;|&#160;check-airflow-2-2-compatibility&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="terminal-376748321-r4" x="0" y="215.2" textLength="12.2" clip-path="url(#terminal-376748321-line-8)">│</text><text class="terminal-376748321-r7" x="366" y="215.2" textLength="1073.6" clip-path="url(#terminal-376748321-line-8)">check-airflow-config-yaml-consistent&#160;|&#160;check-apache-license-rat&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="termina [...]
-</text><text class="terminal-376748321-r4" x="0" y="239.6" textLength="12.2" clip-path="url(#terminal-376748321-line-9)">│</text><text class="terminal-376748321-r7" x="366" y="239.6" textLength="1073.6" clip-path="url(#terminal-376748321-line-9)">check-base-operator-partial-arguments&#160;|&#160;check-base-operator-usage&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-37674832 [...]
-</text><text class="terminal-376748321-r4" x="0" y="264" textLength="12.2" clip-path="url(#terminal-376748321-line-10)">│</text><text class="terminal-376748321-r7" x="366" y="264" textLength="1073.6" clip-path="url(#terminal-376748321-line-10)">check-boring-cyborg-configuration&#160;|&#160;check-breeze-top-dependencies-limited&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-376748321-r4" x="1451.8" y="264" textLength="12.2" [...]
-</text><text class="terminal-376748321-r4" x="0" y="288.4" textLength="12.2" clip-path="url(#terminal-376748321-line-11)">│</text><text class="terminal-376748321-r7" x="366" y="288.4" textLength="1073.6" clip-path="url(#terminal-376748321-line-11)">check-builtin-literals&#160;|&#160;check-changelog-has-no-duplicates&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="terminal-376748321-r4" x="0" y="312.8" textLength="12.2" clip-path="url(#terminal-376748321-line-12)">│</text><text class="terminal-376748321-r7" x="366" y="312.8" textLength="1073.6" clip-path="url(#terminal-376748321-line-12)">check-daysago-import-from-utils&#160;|&#160;check-docstring-param-types&#160;|&#160;check-example-dags-urls&#160;</text><text class="terminal-376748321-r4" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#terminal-376748321-line-12)">│</ [...]
-</text><text class="terminal-376748321-r4" x="0" y="337.2" textLength="12.2" clip-path="url(#terminal-376748321-line-13)">│</text><text class="terminal-376748321-r7" x="366" y="337.2" textLength="1073.6" clip-path="url(#terminal-376748321-line-13)">|&#160;check-executables-have-shebangs&#160;|&#160;check-extra-packages-references&#160;|&#160;check-extras-order</text><text class="terminal-376748321-r4" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#terminal-376748321-line-13)">│</ [...]
-</text><text class="terminal-376748321-r4" x="0" y="361.6" textLength="12.2" clip-path="url(#terminal-376748321-line-14)">│</text><text class="terminal-376748321-r7" x="366" y="361.6" textLength="1073.6" clip-path="url(#terminal-376748321-line-14)">|&#160;check-for-inclusive-language&#160;|&#160;check-hooks-apply&#160;|&#160;check-incorrect-use-of-LoggingMixin</text><text class="terminal-376748321-r4" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#terminal-376748321-line-14)">│</ [...]
-</text><text class="terminal-376748321-r4" x="0" y="386" textLength="12.2" clip-path="url(#terminal-376748321-line-15)">│</text><text class="terminal-376748321-r7" x="366" y="386" textLength="1073.6" clip-path="url(#terminal-376748321-line-15)">|&#160;check-integrations-are-consistent&#160;|&#160;check-lazy-logging&#160;|&#160;check-merge-conflict&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-376748321-r4" x="1451.8" y="386" textLength="12.2" clip-path="url [...]
-</text><text class="terminal-376748321-r4" x="0" y="410.4" textLength="12.2" clip-path="url(#terminal-376748321-line-16)">│</text><text class="terminal-376748321-r7" x="366" y="410.4" textLength="1073.6" clip-path="url(#terminal-376748321-line-16)">check-newsfragments-are-valid&#160;|&#160;check-no-providers-in-core-examples&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-376748321-r4" x= [...]
-</text><text class="terminal-376748321-r4" x="0" y="434.8" textLength="12.2" clip-path="url(#terminal-376748321-line-17)">│</text><text class="terminal-376748321-r7" x="366" y="434.8" textLength="1073.6" clip-path="url(#terminal-376748321-line-17)">check-no-relative-imports&#160;|&#160;check-persist-credentials-disabled-in-github-workflows&#160;|&#160;&#160;&#160;&#160;</text><text class="terminal-376748321-r4" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#terminal-376748321-lin [...]
-</text><text class="terminal-376748321-r4" x="0" y="459.2" textLength="12.2" clip-path="url(#terminal-376748321-line-18)">│</text><text class="terminal-376748321-r7" x="366" y="459.2" textLength="1073.6" clip-path="url(#terminal-376748321-line-18)">check-pre-commit-information-consistent&#160;|&#160;check-provide-create-sessions-imports&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-376748321-r4" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#termina [...]
-</text><text class="terminal-376748321-r4" x="0" y="483.6" textLength="12.2" clip-path="url(#terminal-376748321-line-19)">│</text><text class="terminal-376748321-r7" x="366" y="483.6" textLength="1073.6" clip-path="url(#terminal-376748321-line-19)">check-provider-yaml-valid&#160;|&#160;check-providers-init-file-missing&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text cl [...]
-</text><text class="terminal-376748321-r4" x="0" y="508" textLength="12.2" clip-path="url(#terminal-376748321-line-20)">│</text><text class="terminal-376748321-r7" x="366" y="508" textLength="1073.6" clip-path="url(#terminal-376748321-line-20)">check-providers-subpackages-init-file-exist&#160;|&#160;check-pydevd-left-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-376748321-r4" x="1451.8" y="508" textLen [...]
-</text><text class="terminal-376748321-r4" x="0" y="532.4" textLength="12.2" clip-path="url(#terminal-376748321-line-21)">│</text><text class="terminal-376748321-r7" x="366" y="532.4" textLength="1073.6" clip-path="url(#terminal-376748321-line-21)">check-revision-heads-map&#160;|&#160;check-safe-filter-usage-in-html&#160;|&#160;check-setup-order&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-376748321-r4" x="1451.8" y="532.4" textLength="12.2" clip-pat [...]
-</text><text class="terminal-376748321-r4" x="0" y="556.8" textLength="12.2" clip-path="url(#terminal-376748321-line-22)">│</text><text class="terminal-376748321-r7" x="366" y="556.8" textLength="1073.6" clip-path="url(#terminal-376748321-line-22)">check-start-date-not-used-in-defaults&#160;|&#160;check-system-tests-present&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-376748321-r [...]
-</text><text class="terminal-376748321-r4" x="0" y="581.2" textLength="12.2" clip-path="url(#terminal-376748321-line-23)">│</text><text class="terminal-376748321-r7" x="366" y="581.2" textLength="1073.6" clip-path="url(#terminal-376748321-line-23)">check-system-tests-tocs&#160;|&#160;check-xml&#160;|&#160;codespell&#160;|&#160;compile-www-assets&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-3 [...]
-</text><text class="terminal-376748321-r4" x="0" y="605.6" textLength="12.2" clip-path="url(#terminal-376748321-line-24)">│</text><text class="terminal-376748321-r7" x="366" y="605.6" textLength="1073.6" clip-path="url(#terminal-376748321-line-24)">create-missing-init-py-files-tests&#160;|&#160;debug-statements&#160;|&#160;detect-private-key&#160;|&#160;doctoc&#160;|&#160;&#160;&#160;</text><text class="terminal-376748321-r4" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#termina [...]
-</text><text class="terminal-376748321-r4" x="0" y="630" textLength="12.2" clip-path="url(#terminal-376748321-line-25)">│</text><text class="terminal-376748321-r7" x="366" y="630" textLength="1073.6" clip-path="url(#terminal-376748321-line-25)">end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;identity&#160;|&#160;insert-license&#160;|&#160;isort&#160;|&#160;&#160;&#160;</text><text class="terminal-376748321-r4" x="1451.8" y="630" textLength="12.2" clip-path [...]
-</text><text class="terminal-376748321-r4" x="0" y="654.4" textLength="12.2" clip-path="url(#terminal-376748321-line-26)">│</text><text class="terminal-376748321-r7" x="366" y="654.4" textLength="1073.6" clip-path="url(#terminal-376748321-line-26)">lint-chart-schema&#160;|&#160;lint-css&#160;|&#160;lint-dockerfile&#160;|&#160;lint-helm-chart&#160;|&#160;lint-javascript&#160;|&#160;&#160;&#160;&#160;</text><text class="terminal-376748321-r4" x="1451.8" y="654.4" textLength="12.2" clip-pat [...]
-</text><text class="terminal-376748321-r4" x="0" y="678.8" textLength="12.2" clip-path="url(#terminal-376748321-line-27)">│</text><text class="terminal-376748321-r7" x="366" y="678.8" textLength="1073.6" clip-path="url(#terminal-376748321-line-27)">lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;lint-openapi&#160;|&#160;mixed-line-ending&#160;|&#160;pretty-format-json</text><text class="terminal-376748321-r4" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#terminal-37674832 [...]
-</text><text class="terminal-376748321-r4" x="0" y="703.2" textLength="12.2" clip-path="url(#terminal-376748321-line-28)">│</text><text class="terminal-376748321-r7" x="366" y="703.2" textLength="1073.6" clip-path="url(#terminal-376748321-line-28)">|&#160;pydocstyle&#160;|&#160;python-no-log-warn&#160;|&#160;pyupgrade&#160;|&#160;replace-bad-characters&#160;|&#160;rst-backticks&#160;|</text><text class="terminal-376748321-r4" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#termina [...]
-</text><text class="terminal-376748321-r4" x="0" y="727.6" textLength="12.2" clip-path="url(#terminal-376748321-line-29)">│</text><text class="terminal-376748321-r7" x="366" y="727.6" textLength="1073.6" clip-path="url(#terminal-376748321-line-29)">run-flake8&#160;|&#160;run-mypy&#160;|&#160;run-shellcheck&#160;|&#160;static-check-autoflake&#160;|&#160;trailing-whitespace&#160;|&#160;</text><text class="terminal-376748321-r4" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#termina [...]
-</text><text class="terminal-376748321-r4" x="0" y="752" textLength="12.2" clip-path="url(#terminal-376748321-line-30)">│</text><text class="terminal-376748321-r7" x="366" y="752" textLength="1073.6" clip-path="url(#terminal-376748321-line-30)">ts-compile-and-lint-javascript&#160;|&#160;update-breeze-cmd-output&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="terminal-376748321-r4" x="0" y="776.4" textLength="12.2" clip-path="url(#terminal-376748321-line-31)">│</text><text class="terminal-376748321-r7" x="366" y="776.4" textLength="1073.6" clip-path="url(#terminal-376748321-line-31)">update-breeze-readme-config-hash&#160;|&#160;update-extras&#160;|&#160;update-in-the-wild-to-be-sorted&#160;|&#160;&#160;&#160;&#160;</text><text class="terminal-376748321-r4" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#terminal-376 [...]
-</text><text class="terminal-376748321-r4" x="0" y="800.8" textLength="12.2" clip-path="url(#terminal-376748321-line-32)">│</text><text class="terminal-376748321-r7" x="366" y="800.8" textLength="1073.6" clip-path="url(#terminal-376748321-line-32)">update-inlined-dockerfile-scripts&#160;|&#160;update-local-yml-file&#160;|&#160;update-migration-references&#160;</text><text class="terminal-376748321-r4" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#terminal-376748321-line-32)">│</ [...]
-</text><text class="terminal-376748321-r4" x="0" y="825.2" textLength="12.2" clip-path="url(#terminal-376748321-line-33)">│</text><text class="terminal-376748321-r7" x="366" y="825.2" textLength="1073.6" clip-path="url(#terminal-376748321-line-33)">|&#160;update-providers-dependencies&#160;|&#160;update-setup-cfg-file&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="terminal-376748321-r4" x="0" y="849.6" textLength="12.2" clip-path="url(#terminal-376748321-line-34)">│</text><text class="terminal-376748321-r7" x="366" y="849.6" textLength="1073.6" clip-path="url(#terminal-376748321-line-34)">update-spelling-wordlist-to-be-sorted&#160;|&#160;update-supported-versions&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-376748 [...]
-</text><text class="terminal-376748321-r4" x="0" y="874" textLength="12.2" clip-path="url(#terminal-376748321-line-35)">│</text><text class="terminal-376748321-r7" x="366" y="874" textLength="1073.6" clip-path="url(#terminal-376748321-line-35)">update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;yamllint&#160;|&#160;yesqa)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-376748321-r4" x [...]
-</text><text class="terminal-376748321-r4" x="0" y="898.4" textLength="12.2" clip-path="url(#terminal-376748321-line-36)">│</text><text class="terminal-376748321-r5" x="24.4" y="898.4" textLength="12.2" clip-path="url(#terminal-376748321-line-36)">-</text><text class="terminal-376748321-r5" x="36.6" y="898.4" textLength="61" clip-path="url(#terminal-376748321-line-36)">-file</text><text class="terminal-376748321-r6" x="317.2" y="898.4" textLength="24.4" clip-path="url(#terminal-376748321 [...]
-</text><text class="terminal-376748321-r4" x="0" y="922.8" textLength="12.2" clip-path="url(#terminal-376748321-line-37)">│</text><text class="terminal-376748321-r5" x="24.4" y="922.8" textLength="12.2" clip-path="url(#terminal-376748321-line-37)">-</text><text class="terminal-376748321-r5" x="36.6" y="922.8" textLength="48.8" clip-path="url(#terminal-376748321-line-37)">-all</text><text class="terminal-376748321-r5" x="85.4" y="922.8" textLength="73.2" clip-path="url(#terminal-376748321 [...]
-</text><text class="terminal-376748321-r4" x="0" y="947.2" textLength="12.2" clip-path="url(#terminal-376748321-line-38)">│</text><text class="terminal-376748321-r5" x="24.4" y="947.2" textLength="12.2" clip-path="url(#terminal-376748321-line-38)">-</text><text class="terminal-376748321-r5" x="36.6" y="947.2" textLength="61" clip-path="url(#terminal-376748321-line-38)">-show</text><text class="terminal-376748321-r5" x="97.6" y="947.2" textLength="195.2" clip-path="url(#terminal-376748321 [...]
-</text><text class="terminal-376748321-r4" x="0" y="971.6" textLength="12.2" clip-path="url(#terminal-376748321-line-39)">│</text><text class="terminal-376748321-r5" x="24.4" y="971.6" textLength="12.2" clip-path="url(#terminal-376748321-line-39)">-</text><text class="terminal-376748321-r5" x="36.6" y="971.6" textLength="61" clip-path="url(#terminal-376748321-line-39)">-last</text><text class="terminal-376748321-r5" x="97.6" y="971.6" textLength="85.4" clip-path="url(#terminal-376748321- [...]
-</text><text class="terminal-376748321-r4" x="0" y="996" textLength="1464" clip-path="url(#terminal-376748321-line-40)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-376748321-r2" x="1464" y="996" textLength="12.2" clip-path="url(#terminal-376748321-line-40)">
-</text><text class="terminal-376748321-r4" x="0" y="1020.4" textLength="24.4" clip-path="url(#terminal-376748321-line-41)">╭─</text><text class="terminal-376748321-r4" x="24.4" y="1020.4" textLength="1415.2" clip-path="url(#terminal-376748321-line-41)">&#160;Options&#160;───────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-376748321-r4" x="1439.6" y="1020.4" textLength="24.4" clip-path="url(#terminal-37674 [...]
-</text><text class="terminal-376748321-r4" x="0" y="1044.8" textLength="12.2" clip-path="url(#terminal-376748321-line-42)">│</text><text class="terminal-376748321-r5" x="24.4" y="1044.8" textLength="12.2" clip-path="url(#terminal-376748321-line-42)">-</text><text class="terminal-376748321-r5" x="36.6" y="1044.8" textLength="85.4" clip-path="url(#terminal-376748321-line-42)">-commit</text><text class="terminal-376748321-r5" x="122" y="1044.8" textLength="48.8" clip-path="url(#terminal-376 [...]
-</text><text class="terminal-376748321-r4" x="0" y="1069.2" textLength="12.2" clip-path="url(#terminal-376748321-line-43)">│</text><text class="terminal-376748321-r2" x="329.4" y="1069.2" textLength="183" clip-path="url(#terminal-376748321-line-43)">exclusive&#160;with&#160;</text><text class="terminal-376748321-r5" x="512.4" y="1069.2" textLength="12.2" clip-path="url(#terminal-376748321-line-43)">-</text><text class="terminal-376748321-r5" x="524.6" y="1069.2" textLength="61" clip-path [...]
-</text><text class="terminal-376748321-r4" x="0" y="1093.6" textLength="12.2" clip-path="url(#terminal-376748321-line-44)">│</text><text class="terminal-376748321-r7" x="329.4" y="1093.6" textLength="1110.2" clip-path="url(#terminal-376748321-line-44)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="terminal-376748321-r4" x="0" y="1118" textLength="12.2" clip-path="url(#terminal-376748321-line-45)">│</text><text class="terminal-376748321-r5" x="24.4" y="1118" textLength="12.2" clip-path="url(#terminal-376748321-line-45)">-</text><text class="terminal-376748321-r5" x="36.6" y="1118" textLength="97.6" clip-path="url(#terminal-376748321-line-45)">-verbose</text><text class="terminal-376748321-r6" x="280.6" y="1118" textLength="24.4" clip-path="url(#terminal-37674832 [...]
-</text><text class="terminal-376748321-r4" x="0" y="1142.4" textLength="12.2" clip-path="url(#terminal-376748321-line-46)">│</text><text class="terminal-376748321-r5" x="24.4" y="1142.4" textLength="12.2" clip-path="url(#terminal-376748321-line-46)">-</text><text class="terminal-376748321-r5" x="36.6" y="1142.4" textLength="48.8" clip-path="url(#terminal-376748321-line-46)">-dry</text><text class="terminal-376748321-r5" x="85.4" y="1142.4" textLength="48.8" clip-path="url(#terminal-37674 [...]
-</text><text class="terminal-376748321-r4" x="0" y="1166.8" textLength="12.2" clip-path="url(#terminal-376748321-line-47)">│</text><text class="terminal-376748321-r5" x="24.4" y="1166.8" textLength="12.2" clip-path="url(#terminal-376748321-line-47)">-</text><text class="terminal-376748321-r5" x="36.6" y="1166.8" textLength="85.4" clip-path="url(#terminal-376748321-line-47)">-github</text><text class="terminal-376748321-r5" x="122" y="1166.8" textLength="134.2" clip-path="url(#terminal-37 [...]
-</text><text class="terminal-376748321-r4" x="0" y="1191.2" textLength="12.2" clip-path="url(#terminal-376748321-line-48)">│</text><text class="terminal-376748321-r5" x="24.4" y="1191.2" textLength="12.2" clip-path="url(#terminal-376748321-line-48)">-</text><text class="terminal-376748321-r5" x="36.6" y="1191.2" textLength="61" clip-path="url(#terminal-376748321-line-48)">-help</text><text class="terminal-376748321-r6" x="280.6" y="1191.2" textLength="24.4" clip-path="url(#terminal-37674 [...]
-</text><text class="terminal-376748321-r4" x="0" y="1215.6" textLength="1464" clip-path="url(#terminal-376748321-line-49)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-376748321-r2" x="1464" y="1215.6" textLength="12.2" clip-path="url(#terminal-376748321-line-49)">
+    <g class="terminal-880726558-matrix">
+    <text class="terminal-880726558-r2" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-880726558-line-0)">
+</text><text class="terminal-880726558-r3" x="12.2" y="44.4" textLength="85.4" clip-path="url(#terminal-880726558-line-1)">Usage:&#160;</text><text class="terminal-880726558-r1" x="97.6" y="44.4" textLength="610" clip-path="url(#terminal-880726558-line-1)">breeze&#160;static-checks&#160;[OPTIONS]&#160;[PRECOMMIT_ARGS]...</text><text class="terminal-880726558-r2" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-880726558-line-1)">
+</text><text class="terminal-880726558-r2" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-880726558-line-2)">
+</text><text class="terminal-880726558-r2" x="12.2" y="93.2" textLength="219.6" clip-path="url(#terminal-880726558-line-3)">Run&#160;static&#160;checks.</text><text class="terminal-880726558-r2" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-880726558-line-3)">
+</text><text class="terminal-880726558-r2" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-880726558-line-4)">
+</text><text class="terminal-880726558-r4" x="0" y="142" textLength="24.4" clip-path="url(#terminal-880726558-line-5)">╭─</text><text class="terminal-880726558-r4" x="24.4" y="142" textLength="1415.2" clip-path="url(#terminal-880726558-line-5)">&#160;Pre-commit&#160;flags&#160;──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-880726558-r4" x="1439.6" y="142" textLength="24.4" clip-path="url(#terminal-880726558-l [...]
+</text><text class="terminal-880726558-r4" x="0" y="166.4" textLength="12.2" clip-path="url(#terminal-880726558-line-6)">│</text><text class="terminal-880726558-r5" x="24.4" y="166.4" textLength="12.2" clip-path="url(#terminal-880726558-line-6)">-</text><text class="terminal-880726558-r5" x="36.6" y="166.4" textLength="61" clip-path="url(#terminal-880726558-line-6)">-type</text><text class="terminal-880726558-r6" x="317.2" y="166.4" textLength="24.4" clip-path="url(#terminal-880726558-li [...]
+</text><text class="terminal-880726558-r4" x="0" y="190.8" textLength="12.2" clip-path="url(#terminal-880726558-line-7)">│</text><text class="terminal-880726558-r7" x="366" y="190.8" textLength="1073.6" clip-path="url(#terminal-880726558-line-7)">(all&#160;|&#160;black&#160;|&#160;blacken-docs&#160;|&#160;check-airflow-2-2-compatibility&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="terminal-880726558-r4" x="0" y="215.2" textLength="12.2" clip-path="url(#terminal-880726558-line-8)">│</text><text class="terminal-880726558-r7" x="366" y="215.2" textLength="1073.6" clip-path="url(#terminal-880726558-line-8)">check-airflow-config-yaml-consistent&#160;|&#160;check-apache-license-rat&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="termina [...]
+</text><text class="terminal-880726558-r4" x="0" y="239.6" textLength="12.2" clip-path="url(#terminal-880726558-line-9)">│</text><text class="terminal-880726558-r7" x="366" y="239.6" textLength="1073.6" clip-path="url(#terminal-880726558-line-9)">check-base-operator-partial-arguments&#160;|&#160;check-base-operator-usage&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-88072655 [...]
+</text><text class="terminal-880726558-r4" x="0" y="264" textLength="12.2" clip-path="url(#terminal-880726558-line-10)">│</text><text class="terminal-880726558-r7" x="366" y="264" textLength="1073.6" clip-path="url(#terminal-880726558-line-10)">check-boring-cyborg-configuration&#160;|&#160;check-breeze-top-dependencies-limited&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-880726558-r4" x="1451.8" y="264" textLength="12.2" [...]
+</text><text class="terminal-880726558-r4" x="0" y="288.4" textLength="12.2" clip-path="url(#terminal-880726558-line-11)">│</text><text class="terminal-880726558-r7" x="366" y="288.4" textLength="1073.6" clip-path="url(#terminal-880726558-line-11)">check-builtin-literals&#160;|&#160;check-changelog-has-no-duplicates&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="terminal-880726558-r4" x="0" y="312.8" textLength="12.2" clip-path="url(#terminal-880726558-line-12)">│</text><text class="terminal-880726558-r7" x="366" y="312.8" textLength="1073.6" clip-path="url(#terminal-880726558-line-12)">check-daysago-import-from-utils&#160;|&#160;check-docstring-param-types&#160;|&#160;check-example-dags-urls&#160;</text><text class="terminal-880726558-r4" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#terminal-880726558-line-12)">│</ [...]
+</text><text class="terminal-880726558-r4" x="0" y="337.2" textLength="12.2" clip-path="url(#terminal-880726558-line-13)">│</text><text class="terminal-880726558-r7" x="366" y="337.2" textLength="1073.6" clip-path="url(#terminal-880726558-line-13)">|&#160;check-executables-have-shebangs&#160;|&#160;check-extra-packages-references&#160;|&#160;check-extras-order</text><text class="terminal-880726558-r4" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#terminal-880726558-line-13)">│</ [...]
+</text><text class="terminal-880726558-r4" x="0" y="361.6" textLength="12.2" clip-path="url(#terminal-880726558-line-14)">│</text><text class="terminal-880726558-r7" x="366" y="361.6" textLength="1073.6" clip-path="url(#terminal-880726558-line-14)">|&#160;check-for-inclusive-language&#160;|&#160;check-hooks-apply&#160;|&#160;check-incorrect-use-of-LoggingMixin</text><text class="terminal-880726558-r4" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#terminal-880726558-line-14)">│</ [...]
+</text><text class="terminal-880726558-r4" x="0" y="386" textLength="12.2" clip-path="url(#terminal-880726558-line-15)">│</text><text class="terminal-880726558-r7" x="366" y="386" textLength="1073.6" clip-path="url(#terminal-880726558-line-15)">|&#160;check-integrations-are-consistent&#160;|&#160;check-lazy-logging&#160;|&#160;check-merge-conflict&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-880726558-r4" x="1451.8" y="386" textLength="12.2" clip-path="url [...]
+</text><text class="terminal-880726558-r4" x="0" y="410.4" textLength="12.2" clip-path="url(#terminal-880726558-line-16)">│</text><text class="terminal-880726558-r7" x="366" y="410.4" textLength="1073.6" clip-path="url(#terminal-880726558-line-16)">check-newsfragments-are-valid&#160;|&#160;check-no-providers-in-core-examples&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-880726558-r4" x= [...]
+</text><text class="terminal-880726558-r4" x="0" y="434.8" textLength="12.2" clip-path="url(#terminal-880726558-line-17)">│</text><text class="terminal-880726558-r7" x="366" y="434.8" textLength="1073.6" clip-path="url(#terminal-880726558-line-17)">check-no-relative-imports&#160;|&#160;check-persist-credentials-disabled-in-github-workflows&#160;|&#160;&#160;&#160;&#160;</text><text class="terminal-880726558-r4" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#terminal-880726558-lin [...]
+</text><text class="terminal-880726558-r4" x="0" y="459.2" textLength="12.2" clip-path="url(#terminal-880726558-line-18)">│</text><text class="terminal-880726558-r7" x="366" y="459.2" textLength="1073.6" clip-path="url(#terminal-880726558-line-18)">check-pre-commit-information-consistent&#160;|&#160;check-provide-create-sessions-imports&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-880726558-r4" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#termina [...]
+</text><text class="terminal-880726558-r4" x="0" y="483.6" textLength="12.2" clip-path="url(#terminal-880726558-line-19)">│</text><text class="terminal-880726558-r7" x="366" y="483.6" textLength="1073.6" clip-path="url(#terminal-880726558-line-19)">check-provider-yaml-valid&#160;|&#160;check-providers-init-file-missing&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text cl [...]
+</text><text class="terminal-880726558-r4" x="0" y="508" textLength="12.2" clip-path="url(#terminal-880726558-line-20)">│</text><text class="terminal-880726558-r7" x="366" y="508" textLength="1073.6" clip-path="url(#terminal-880726558-line-20)">check-providers-subpackages-init-file-exist&#160;|&#160;check-pydevd-left-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-880726558-r4" x="1451.8" y="508" textLen [...]
+</text><text class="terminal-880726558-r4" x="0" y="532.4" textLength="12.2" clip-path="url(#terminal-880726558-line-21)">│</text><text class="terminal-880726558-r7" x="366" y="532.4" textLength="1073.6" clip-path="url(#terminal-880726558-line-21)">check-revision-heads-map&#160;|&#160;check-safe-filter-usage-in-html&#160;|&#160;check-setup-order&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-880726558-r4" x="1451.8" y="532.4" textLength="12.2" clip-pat [...]
+</text><text class="terminal-880726558-r4" x="0" y="556.8" textLength="12.2" clip-path="url(#terminal-880726558-line-22)">│</text><text class="terminal-880726558-r7" x="366" y="556.8" textLength="1073.6" clip-path="url(#terminal-880726558-line-22)">check-start-date-not-used-in-defaults&#160;|&#160;check-system-tests-present&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-880726558-r [...]
+</text><text class="terminal-880726558-r4" x="0" y="581.2" textLength="12.2" clip-path="url(#terminal-880726558-line-23)">│</text><text class="terminal-880726558-r7" x="366" y="581.2" textLength="1073.6" clip-path="url(#terminal-880726558-line-23)">check-system-tests-tocs&#160;|&#160;check-xml&#160;|&#160;codespell&#160;|&#160;compile-www-assets&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-8 [...]
+</text><text class="terminal-880726558-r4" x="0" y="605.6" textLength="12.2" clip-path="url(#terminal-880726558-line-24)">│</text><text class="terminal-880726558-r7" x="366" y="605.6" textLength="1073.6" clip-path="url(#terminal-880726558-line-24)">compile-www-assets-dev&#160;|&#160;create-missing-init-py-files-tests&#160;|&#160;debug-statements&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-880726558-r4" x="1451.8" y="605.6" textLength="12.2" clip-pat [...]
+</text><text class="terminal-880726558-r4" x="0" y="630" textLength="12.2" clip-path="url(#terminal-880726558-line-25)">│</text><text class="terminal-880726558-r7" x="366" y="630" textLength="1073.6" clip-path="url(#terminal-880726558-line-25)">detect-private-key&#160;|&#160;doctoc&#160;|&#160;end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;identity</text><text class="terminal-880726558-r4" x="1451.8" y="630" textLength="12.2" clip-path="url(#terminal-8807 [...]
+</text><text class="terminal-880726558-r4" x="0" y="654.4" textLength="12.2" clip-path="url(#terminal-880726558-line-26)">│</text><text class="terminal-880726558-r7" x="366" y="654.4" textLength="1073.6" clip-path="url(#terminal-880726558-line-26)">|&#160;insert-license&#160;|&#160;isort&#160;|&#160;lint-chart-schema&#160;|&#160;lint-css&#160;|&#160;lint-dockerfile&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-880726558-r [...]
+</text><text class="terminal-880726558-r4" x="0" y="678.8" textLength="12.2" clip-path="url(#terminal-880726558-line-27)">│</text><text class="terminal-880726558-r7" x="366" y="678.8" textLength="1073.6" clip-path="url(#terminal-880726558-line-27)">lint-helm-chart&#160;|&#160;lint-javascript&#160;|&#160;lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;lint-openapi&#160;|&#160;&#160;&#160;</text><text class="terminal-880726558-r4" x="1451.8" y="678.8" textLength="12.2" clip-path="ur [...]
+</text><text class="terminal-880726558-r4" x="0" y="703.2" textLength="12.2" clip-path="url(#terminal-880726558-line-28)">│</text><text class="terminal-880726558-r7" x="366" y="703.2" textLength="1073.6" clip-path="url(#terminal-880726558-line-28)">mixed-line-ending&#160;|&#160;pretty-format-json&#160;|&#160;pydocstyle&#160;|&#160;python-no-log-warn&#160;|&#160;pyupgrade&#160;|&#160;&#160;</text><text class="terminal-880726558-r4" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#te [...]
+</text><text class="terminal-880726558-r4" x="0" y="727.6" textLength="12.2" clip-path="url(#terminal-880726558-line-29)">│</text><text class="terminal-880726558-r7" x="366" y="727.6" textLength="1073.6" clip-path="url(#terminal-880726558-line-29)">replace-bad-characters&#160;|&#160;rst-backticks&#160;|&#160;run-flake8&#160;|&#160;run-mypy&#160;|&#160;run-shellcheck&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-880726558-r4" x="1451.8" y="727.6" textLength= [...]
+</text><text class="terminal-880726558-r4" x="0" y="752" textLength="12.2" clip-path="url(#terminal-880726558-line-30)">│</text><text class="terminal-880726558-r7" x="366" y="752" textLength="1073.6" clip-path="url(#terminal-880726558-line-30)">static-check-autoflake&#160;|&#160;trailing-whitespace&#160;|&#160;ts-compile-and-lint-javascript&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-880726558-r4" x="1451.8" y="752" textLength="12.2" clip-path [...]
+</text><text class="terminal-880726558-r4" x="0" y="776.4" textLength="12.2" clip-path="url(#terminal-880726558-line-31)">│</text><text class="terminal-880726558-r7" x="366" y="776.4" textLength="1073.6" clip-path="url(#terminal-880726558-line-31)">update-breeze-cmd-output&#160;|&#160;update-breeze-readme-config-hash&#160;|&#160;update-extras&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-880726558-r4" x="1451.8" y="776.4" textLength= [...]
+</text><text class="terminal-880726558-r4" x="0" y="800.8" textLength="12.2" clip-path="url(#terminal-880726558-line-32)">│</text><text class="terminal-880726558-r7" x="366" y="800.8" textLength="1073.6" clip-path="url(#terminal-880726558-line-32)">update-in-the-wild-to-be-sorted&#160;|&#160;update-inlined-dockerfile-scripts&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-880726558-r4" x= [...]
+</text><text class="terminal-880726558-r4" x="0" y="825.2" textLength="12.2" clip-path="url(#terminal-880726558-line-33)">│</text><text class="terminal-880726558-r7" x="366" y="825.2" textLength="1073.6" clip-path="url(#terminal-880726558-line-33)">update-local-yml-file&#160;|&#160;update-migration-references&#160;|&#160;update-providers-dependencies&#160;|&#160;&#160;&#160;</text><text class="terminal-880726558-r4" x="1451.8" y="825.2" textLength="12.2" clip-path="url(#terminal-88072655 [...]
+</text><text class="terminal-880726558-r4" x="0" y="849.6" textLength="12.2" clip-path="url(#terminal-880726558-line-34)">│</text><text class="terminal-880726558-r7" x="366" y="849.6" textLength="1073.6" clip-path="url(#terminal-880726558-line-34)">update-setup-cfg-file&#160;|&#160;update-spelling-wordlist-to-be-sorted&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text cl [...]
+</text><text class="terminal-880726558-r4" x="0" y="874" textLength="12.2" clip-path="url(#terminal-880726558-line-35)">│</text><text class="terminal-880726558-r7" x="366" y="874" textLength="1073.6" clip-path="url(#terminal-880726558-line-35)">update-supported-versions&#160;|&#160;update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-880726558-r4" x="1451.8" y="874" textLength="12.2" clip-path="url(#ter [...]
+</text><text class="terminal-880726558-r4" x="0" y="898.4" textLength="12.2" clip-path="url(#terminal-880726558-line-36)">│</text><text class="terminal-880726558-r7" x="366" y="898.4" textLength="1073.6" clip-path="url(#terminal-880726558-line-36)">yamllint&#160;|&#160;yesqa)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="terminal-880726558-r4" x="0" y="922.8" textLength="12.2" clip-path="url(#terminal-880726558-line-37)">│</text><text class="terminal-880726558-r5" x="24.4" y="922.8" textLength="12.2" clip-path="url(#terminal-880726558-line-37)">-</text><text class="terminal-880726558-r5" x="36.6" y="922.8" textLength="61" clip-path="url(#terminal-880726558-line-37)">-file</text><text class="terminal-880726558-r6" x="317.2" y="922.8" textLength="24.4" clip-path="url(#terminal-880726558 [...]
+</text><text class="terminal-880726558-r4" x="0" y="947.2" textLength="12.2" clip-path="url(#terminal-880726558-line-38)">│</text><text class="terminal-880726558-r5" x="24.4" y="947.2" textLength="12.2" clip-path="url(#terminal-880726558-line-38)">-</text><text class="terminal-880726558-r5" x="36.6" y="947.2" textLength="48.8" clip-path="url(#terminal-880726558-line-38)">-all</text><text class="terminal-880726558-r5" x="85.4" y="947.2" textLength="73.2" clip-path="url(#terminal-880726558 [...]
+</text><text class="terminal-880726558-r4" x="0" y="971.6" textLength="12.2" clip-path="url(#terminal-880726558-line-39)">│</text><text class="terminal-880726558-r5" x="24.4" y="971.6" textLength="12.2" clip-path="url(#terminal-880726558-line-39)">-</text><text class="terminal-880726558-r5" x="36.6" y="971.6" textLength="61" clip-path="url(#terminal-880726558-line-39)">-show</text><text class="terminal-880726558-r5" x="97.6" y="971.6" textLength="195.2" clip-path="url(#terminal-880726558 [...]
+</text><text class="terminal-880726558-r4" x="0" y="996" textLength="12.2" clip-path="url(#terminal-880726558-line-40)">│</text><text class="terminal-880726558-r5" x="24.4" y="996" textLength="12.2" clip-path="url(#terminal-880726558-line-40)">-</text><text class="terminal-880726558-r5" x="36.6" y="996" textLength="61" clip-path="url(#terminal-880726558-line-40)">-last</text><text class="terminal-880726558-r5" x="97.6" y="996" textLength="85.4" clip-path="url(#terminal-880726558-line-40) [...]
+</text><text class="terminal-880726558-r4" x="0" y="1020.4" textLength="1464" clip-path="url(#terminal-880726558-line-41)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-880726558-r2" x="1464" y="1020.4" textLength="12.2" clip-path="url(#terminal-880726558-line-41)">
+</text><text class="terminal-880726558-r4" x="0" y="1044.8" textLength="24.4" clip-path="url(#terminal-880726558-line-42)">╭─</text><text class="terminal-880726558-r4" x="24.4" y="1044.8" textLength="1415.2" clip-path="url(#terminal-880726558-line-42)">&#160;Options&#160;───────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-880726558-r4" x="1439.6" y="1044.8" textLength="24.4" clip-path="url(#terminal-88072 [...]
+</text><text class="terminal-880726558-r4" x="0" y="1069.2" textLength="12.2" clip-path="url(#terminal-880726558-line-43)">│</text><text class="terminal-880726558-r5" x="24.4" y="1069.2" textLength="12.2" clip-path="url(#terminal-880726558-line-43)">-</text><text class="terminal-880726558-r5" x="36.6" y="1069.2" textLength="85.4" clip-path="url(#terminal-880726558-line-43)">-commit</text><text class="terminal-880726558-r5" x="122" y="1069.2" textLength="48.8" clip-path="url(#terminal-880 [...]
+</text><text class="terminal-880726558-r4" x="0" y="1093.6" textLength="12.2" clip-path="url(#terminal-880726558-line-44)">│</text><text class="terminal-880726558-r2" x="329.4" y="1093.6" textLength="183" clip-path="url(#terminal-880726558-line-44)">exclusive&#160;with&#160;</text><text class="terminal-880726558-r5" x="512.4" y="1093.6" textLength="12.2" clip-path="url(#terminal-880726558-line-44)">-</text><text class="terminal-880726558-r5" x="524.6" y="1093.6" textLength="61" clip-path [...]
+</text><text class="terminal-880726558-r4" x="0" y="1118" textLength="12.2" clip-path="url(#terminal-880726558-line-45)">│</text><text class="terminal-880726558-r7" x="329.4" y="1118" textLength="1110.2" clip-path="url(#terminal-880726558-line-45)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="terminal-880726558-r4" x="0" y="1142.4" textLength="12.2" clip-path="url(#terminal-880726558-line-46)">│</text><text class="terminal-880726558-r5" x="24.4" y="1142.4" textLength="12.2" clip-path="url(#terminal-880726558-line-46)">-</text><text class="terminal-880726558-r5" x="36.6" y="1142.4" textLength="97.6" clip-path="url(#terminal-880726558-line-46)">-verbose</text><text class="terminal-880726558-r6" x="280.6" y="1142.4" textLength="24.4" clip-path="url(#terminal- [...]
+</text><text class="terminal-880726558-r4" x="0" y="1166.8" textLength="12.2" clip-path="url(#terminal-880726558-line-47)">│</text><text class="terminal-880726558-r5" x="24.4" y="1166.8" textLength="12.2" clip-path="url(#terminal-880726558-line-47)">-</text><text class="terminal-880726558-r5" x="36.6" y="1166.8" textLength="48.8" clip-path="url(#terminal-880726558-line-47)">-dry</text><text class="terminal-880726558-r5" x="85.4" y="1166.8" textLength="48.8" clip-path="url(#terminal-88072 [...]
+</text><text class="terminal-880726558-r4" x="0" y="1191.2" textLength="12.2" clip-path="url(#terminal-880726558-line-48)">│</text><text class="terminal-880726558-r5" x="24.4" y="1191.2" textLength="12.2" clip-path="url(#terminal-880726558-line-48)">-</text><text class="terminal-880726558-r5" x="36.6" y="1191.2" textLength="85.4" clip-path="url(#terminal-880726558-line-48)">-github</text><text class="terminal-880726558-r5" x="122" y="1191.2" textLength="134.2" clip-path="url(#terminal-88 [...]
+</text><text class="terminal-880726558-r4" x="0" y="1215.6" textLength="12.2" clip-path="url(#terminal-880726558-line-49)">│</text><text class="terminal-880726558-r5" x="24.4" y="1215.6" textLength="12.2" clip-path="url(#terminal-880726558-line-49)">-</text><text class="terminal-880726558-r5" x="36.6" y="1215.6" textLength="61" clip-path="url(#terminal-880726558-line-49)">-help</text><text class="terminal-880726558-r6" x="280.6" y="1215.6" textLength="24.4" clip-path="url(#terminal-88072 [...]
+</text><text class="terminal-880726558-r4" x="0" y="1240" textLength="1464" clip-path="url(#terminal-880726558-line-50)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-880726558-r2" x="1464" y="1240" textLength="12.2" clip-path="url(#terminal-880726558-line-50)">
 </text>
     </g>
     </g>
diff --git a/scripts/ci/pre_commit/pre_commit_compile_www_assets.py b/scripts/ci/pre_commit/pre_commit_compile_www_assets.py
index c7dfae9936..03d6ce65dd 100755
--- a/scripts/ci/pre_commit/pre_commit_compile_www_assets.py
+++ b/scripts/ci/pre_commit/pre_commit_compile_www_assets.py
@@ -15,6 +15,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+import os
 import subprocess
 from pathlib import Path
 
@@ -26,5 +27,7 @@ if __name__ not in ("__main__", "__mp_main__"):
 
 if __name__ == '__main__':
     dir = Path("airflow") / "www"
+    env = os.environ.copy()
+    env['FORCE_COLOR'] = "true"
     subprocess.check_call(['yarn', 'install', '--frozen-lockfile'], cwd=str(dir))
-    subprocess.check_call(['yarn', 'run', 'build'], cwd=str(dir))
+    subprocess.check_call(['yarn', 'run', 'build'], cwd=str(dir), env=env)
diff --git a/scripts/ci/pre_commit/pre_commit_compile_www_assets.py b/scripts/ci/pre_commit/pre_commit_compile_www_assets_dev.py
similarity index 90%
copy from scripts/ci/pre_commit/pre_commit_compile_www_assets.py
copy to scripts/ci/pre_commit/pre_commit_compile_www_assets_dev.py
index c7dfae9936..40aa17511e 100755
--- a/scripts/ci/pre_commit/pre_commit_compile_www_assets.py
+++ b/scripts/ci/pre_commit/pre_commit_compile_www_assets_dev.py
@@ -15,6 +15,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+import os
 import subprocess
 from pathlib import Path
 
@@ -26,5 +27,7 @@ if __name__ not in ("__main__", "__mp_main__"):
 
 if __name__ == '__main__':
     dir = Path("airflow") / "www"
+    env = os.environ.copy()
+    env['FORCE_COLOR'] = "true"
     subprocess.check_call(['yarn', 'install', '--frozen-lockfile'], cwd=str(dir))
-    subprocess.check_call(['yarn', 'run', 'build'], cwd=str(dir))
+    subprocess.check_call(['yarn', 'dev'], cwd=str(dir), env=env)
diff --git a/scripts/in_container/run_tmux_welcome.sh b/scripts/in_container/run_tmux_welcome.sh
index 91d69406e2..41e18ef12d 100755
--- a/scripts/in_container/run_tmux_welcome.sh
+++ b/scripts/in_container/run_tmux_welcome.sh
@@ -21,5 +21,11 @@ echo "Welcome to your tmux based running Airflow environment (courtesy of Breeze
 echo
 echo "     To stop Airflow and exit tmux, just type 'stop_airflow'."
 echo
-echo "     If you want to rebuild webserver assets dynamically, run 'cd airflow/www; yarn && yarn dev' and restart airflow webserver with '-d' flag."
+echo "     NOTE! If you want to rebuild webserver assets dynamically:"
+echo
+echo "        * Restart airflow webserver with '-d' flag."
+echo "          AND (in a separate terminal in your host):"
+echo "        * Run 'breeze www-compile-assets --dev'."
+echo "           OR"
+echo "        * Run 'yarn dev' in the 'airflow/www' if you have yarn installed and want to watch recompiling happens."
 echo