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/21 14:28:24 UTC

[airflow] 21/22: Move javascript compilation to host (#25169)

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

potiuk pushed a commit to branch v2-3-test
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit 0285bf8b7180cf5c62a3559aeacb17a16235d5d6
Author: Jarek Potiuk <ja...@polidea.com>
AuthorDate: Wed Jul 20 19:30:03 2022 +0200

    Move javascript compilation to host (#25169)
    
    Previously, in order to keep consistent development environment
    we've compiled javascript in the CI image. However we can utilise
    power of pre-commmit for setting the node environment for all
    contributors automatically. Instead of compiling the javascript
    in the image, we can compile it via pre-commit in the host.
    
    This can be done thanks to the new python breeze which is far more
    flexible and can now add execution of compilation of the javascript when
    needed and using pre-commit environments.
    
    Thanks to that, we can vastly simplify the Dockerfiles and scripts that
    are used to automatically build or signal that the assets need
    recompilation. We can basically assume that the assets were prepared
    outside of the image building (and breeze makes sure it happens)
    
    The changes:
    
    * node.js is not needed in images (neither PROD build nor CI)
    * no need for multiple asset compilation scripts. All is done
      via pre-commit environment with `breeze compile-www-assets``
      command
    * lint checks for UI do not need the docker image any more
      (they are also based on pre-commit environment)
    * no more checks/warnings when you enter the image
    * start-airflow command builds the compilation before entering
    * prepare-airflow-package runs asset compilation before entering
      docker airflow building.
    
    (cherry picked from commit acff1296886d222cc411a99bb3276465ab03e36b)
---
 .dockerignore                                      |   9 +-
 .github/boring-cyborg.yml                          |   1 -
 .github/workflows/build-images.yml                 |   4 +
 .github/workflows/ci.yml                           |   8 +
 .gitignore                                         |   2 +-
 .pre-commit-config.yaml                            |  65 +++-
 BREEZE.rst                                         |  36 +-
 CONTRIBUTING.rst                                   |  32 +-
 Dockerfile                                         | 128 +------
 Dockerfile.ci                                      | 135 +-------
 STATIC_CODE_CHECKS.rst                             |   8 +-
 airflow/www/ask_for_recompile_assets_if_needed.sh  |  56 ---
 breeze-legacy                                      |   8 -
 .../airflow_breeze/commands/developer_commands.py  |  24 ++
 .../commands/release_management_commands.py        |   3 +-
 dev/breeze/src/airflow_breeze/global_constants.py  |   8 -
 .../src/airflow_breeze/params/build_prod_params.py |  10 -
 dev/breeze/src/airflow_breeze/pre_commit_ids.py    |   3 +
 dev/breeze/src/airflow_breeze/utils/run_utils.py   |  31 ++
 docs/docker-stack/build-arg-ref.rst                |  10 -
 images/breeze/output-commands-hash.txt             |   3 +-
 images/breeze/output-commands.svg                  | 384 +++++++++++----------
 images/breeze/output-compile-www-assets.svg        |  99 ++++++
 images/breeze/output-static-checks.svg             | 228 ++++++------
 scripts/ci/libraries/_initialization.sh            |  28 --
 .../ci/pre_commit/pre_commit_compile_www_assets.py |  28 +-
 scripts/ci/pre_commit/pre_commit_ui_lint.py        |  40 +--
 scripts/ci/pre_commit/pre_commit_www_lint.py       |  41 +--
 scripts/docker/compile_www_assets.sh               |  71 ----
 scripts/docker/entrypoint_ci.sh                    |   7 +-
 scripts/docker/prepare_node_modules.sh             |  52 ---
 scripts/in_container/_in_container_utils.sh        |  24 +-
 .../in_container/run_prepare_airflow_packages.sh   |   2 +-
 .../internal_api/__init__.py                       |  18 -
 .../compile_assets.sh => tests/system/__init__.py  |  18 -
 .../system/providers/__init__.py                   |  18 -
 .../system/providers/apache/__init__.py            |  18 -
 .../system/providers/google/__init__.py            |  18 -
 38 files changed, 611 insertions(+), 1067 deletions(-)

diff --git a/.dockerignore b/.dockerignore
index 69a3bbfca6..f412505e99 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -74,18 +74,15 @@
 !setup.cfg
 !setup.py
 !manifests
+!generated
 # Now - ignore unnecessary files inside allowed directories
 # This goes after the allowed directories
 
 # Git version is dynamically generated
 airflow/git_version
 
-# Exclude static www files generated by NPM
-airflow/www/static/coverage
-airflow/www/static/dist
+# Exclude mode_modules pulled by "yarn" for compilation of www files generated by NPM
 airflow/www/node_modules
-# Exclude static ui files generated by NPM
-airflow/ui/build
 airflow/ui/node_modules
 
 # Exclude link to docs
@@ -99,7 +96,7 @@ airflow/www/static/docs
 **/env/
 **/build/
 **/develop-eggs/
-**/dist/
+/dist/
 **/downloads/
 **/eggs/
 **/.eggs/
diff --git a/.github/boring-cyborg.yml b/.github/boring-cyborg.yml
index 607d4fb6cd..39d7718d7b 100644
--- a/.github/boring-cyborg.yml
+++ b/.github/boring-cyborg.yml
@@ -119,7 +119,6 @@ labelPRBasedOnFilePath:
     - airflow/www/.eslintrc
     - airflow/www/.stylelintignore
     - airflow/www/.stylelintrc
-    - airflow/www/compile_assets.sh
     - airflow/www/package.json
     - airflow/www/webpack.config.js
     - airflow/www/yarn.lock
diff --git a/.github/workflows/build-images.yml b/.github/workflows/build-images.yml
index 4485e5c68d..2757646887 100644
--- a/.github/workflows/build-images.yml
+++ b/.github/workflows/build-images.yml
@@ -232,6 +232,8 @@ ${{ hashFiles('.pre-commit-config.yaml') }}"
           breeze static-checks --type update-providers-dependencies --all-files
           --show-diff-on-failure --color always || true
         if: needs.build-info.outputs.default-branch == 'main'
+      - name: Compile www assets
+        run: breeze compile-www-assets
       - name: >-
           Build & Push AMD64 CI images ${{ env.IMAGE_TAG_FOR_THE_BUILD }}
           ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
@@ -343,6 +345,8 @@ ${{ hashFiles('.pre-commit-config.yaml') }}"
         run: breeze prepare-airflow-package --package-format wheel --version-suffix-for-pypi dev0
       - name: "Move dist packages to docker-context files"
         run: mv -v ./dist/*.whl ./docker-context-files
+      - name: Compile www assets
+        run: breeze compile-www-assets
       - name: >-
           Build & Push PROD images ${{ env.IMAGE_TAG_FOR_THE_BUILD }}
           ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index c459b7001d..78ef756b4f 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -349,6 +349,11 @@ ${{ hashFiles('.pre-commit-config.yaml') }}"
         if: >
           needs.build-info.outputs.in-workflow-build == 'true' &&
           needs.build-info.outputs.default-branch == 'main'
+      - name: Compile www assets
+        run: breeze compile-www-assets
+        if: >
+          needs.build-info.outputs.in-workflow-build == 'true' &&
+          needs.build-info.outputs.default-branch == 'main'
       - name: >
           Build & Push CI images ${{ env.IMAGE_TAG_FOR_THE_BUILD }}
           ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
@@ -448,6 +453,9 @@ ${{ hashFiles('.pre-commit-config.yaml') }}"
       - name: "Move dist packages to docker-context files"
         run: mv -v ./dist/*.whl ./docker-context-files
         if: needs.build-info.outputs.in-workflow-build == 'true'
+      - name: Compile www assets
+        run: breeze compile-www-assets
+        if: needs.build-info.outputs.in-workflow-build == 'true'
       - name: >
           Build & Push PROD images ${{ env.IMAGE_TAG_FOR_THE_BUILD }}
           ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
diff --git a/.gitignore b/.gitignore
index fe3d74aa23..694e3ecf17 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,7 +13,7 @@ unittests.db
 # Airflow temporary artifacts
 airflow/git_version
 airflow/www/static/coverage/
-airflow/www/static/dist
+airflow/www/*.log
 
 /logs/
 airflow-webserver.pid
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 77da7b91ec..0efe856658 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -298,7 +298,7 @@ repos:
         exclude: ^airflow/_vendor/|^RELEASE_NOTES\.txt$|^airflow/www/static/css/material-icons\.css$|^images/.*$
         args:
           - --ignore-words=docs/spelling_wordlist.txt
-          - --skip=docs/*/commits.rst,airflow/providers/*/*.rst,*.lock,INTHEWILD.md,*.min.js,docs/apache-airflow/pipeline_example.csv
+          - --skip=docs/*/commits.rst,airflow/providers/*/*.rst,*.lock,INTHEWILD.md,*.min.js,docs/apache-airflow/pipeline_example.csv,airflow/www/*.log
           - --exclude-file=.codespellignorelines
   - repo: local
     hooks:
@@ -582,9 +582,20 @@ repos:
         name: stylelint
         entry: "stylelint"
         language: node
+        language_version: 18.6.0
         files: ^airflow/www/.*\.(css|scss|sass)$
         # Keep dependency versions in sync w/ airflow/www/package.json
         additional_dependencies: ['stylelint@13.3.1', 'stylelint-config-standard@20.0.0']
+      - id: compile-www-assets
+        name: Compile www assets
+        language: node
+        language_version: 18.6.0
+        stages: ['manual']
+        'types_or': [javascript, tsx, ts]
+        files: ^airflow/www/
+        entry: ./scripts/ci/pre_commit/pre_commit_compile_www_assets.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
@@ -657,6 +668,7 @@ repos:
         description: Checks the style of Markdown files.
         entry: markdownlint
         language: node
+        language_version: 18.6.0
         types: [markdown]
         files: \.(md|mdown|markdown)$
         additional_dependencies: ['markdownlint-cli']
@@ -777,6 +789,41 @@ repos:
         files: newsfragments/.*\.rst
         entry: ./scripts/ci/pre_commit/pre_commit_newsfragments.py
         pass_filenames: true
+        # We sometimes won't have newsfragments in the repo, so always run it so `check-hooks-apply` passes
+        # This is fast, so not too much downside
+        always_run: true
+      - id: check-system-tests-tocs
+        name: Check that system tests is properly added
+        entry: ./scripts/ci/pre_commit/pre_commit_check_system_tests_hidden_in_index.py
+        language: python
+        pass_filenames: true
+        files: ^docs/apache-airflow-providers-[^/]*/index\.rst$
+        additional_dependencies: ['rich>=12.4.4', 'pyyaml']
+      - id: create-missing-init-py-files-tests
+        name: Create missing init.py files in tests
+        entry: ./scripts/ci/pre_commit/pre_commit_check_init_in_tests.py
+        language: python
+        additional_dependencies: ['rich>=12.4.4']
+        pass_filenames: false
+        files: ^tests/.*\.py$
+      - id: lint-javascript
+        name: ESLint against airflow/ui
+        language: node
+        language_version: 18.6.0
+        'types_or': [javascript, tsx, ts]
+        files: ^airflow/ui/
+        entry: ./scripts/ci/pre_commit/pre_commit_ui_lint.py
+        pass_filenames: false
+        additional_dependencies: ['yarn@1.22.19']
+      - id: lint-javascript
+        name: ESLint against current UI JavaScript files
+        language: node
+        language_version: 18.6.0
+        'types_or': [javascript, tsx, ts]
+        files: ^airflow/www/static/js/
+        entry: ./scripts/ci/pre_commit/pre_commit_www_lint.py
+        additional_dependencies: ['yarn@1.22.19']
+        pass_filenames: false
         ## ADD MOST PRE-COMMITS ABOVE THAT LINE
         # The below pre-commits are those requiring CI image to be built
       - id: run-mypy
@@ -817,22 +864,6 @@ repos:
         pass_filenames: true
         exclude: ^airflow/_vendor/
         additional_dependencies: ['rich>=12.4.4', 'inputimeout']
-      - id: lint-javascript
-        name: ESLint against airflow/ui
-        language: python
-        'types_or': [javascript, tsx, ts]
-        files: ^airflow/ui/
-        entry: ./scripts/ci/pre_commit/pre_commit_ui_lint.py
-        pass_filenames: false
-        additional_dependencies: ['rich>=12.4.4', 'inputimeout']
-      - id: lint-javascript
-        name: ESLint against current UI JavaScript files
-        language: python
-        'types_or': [javascript]
-        files: ^airflow/www/static/js/
-        entry: ./scripts/ci/pre_commit/pre_commit_www_lint.py
-        pass_filenames: false
-        additional_dependencies: ['rich>=12.4.4', 'inputimeout']
       - id: update-migration-references
         name: Update migration ref doc
         language: python
diff --git a/BREEZE.rst b/BREEZE.rst
index 3a3034b06f..1489e2158c 100644
--- a/BREEZE.rst
+++ b/BREEZE.rst
@@ -438,6 +438,16 @@ regenerate all those images (which might be needed in case new version of rich i
   :alt: Breeze regenerate-command-images
 
 
+Compiling www assets
+====================
+
+Airflow webserver needs to prepare www assets - compiled with node and yarn. The ``compile-www-assets``
+command takes care about it. This is needed when you want to run webserver inside of the breeze.
+
+.. image:: ./images/breeze/output-compile-www-assets.svg
+  :width: 100%
+  :alt: Breeze compile-www-assets
+
 Starting complete Airflow installation
 ======================================
 
@@ -445,6 +455,13 @@ For testing Airflow oyou often want to start multiple components (in multiple te
 built-in ``start-airflow`` command that start breeze container, launches multiple terminals using tmux
 and launches all Airflow necessary components in those terminals.
 
+When you are starting airflow from local sources, www asset compilation is automatically executed before.
+
+.. code-block:: bash
+
+    breeze --python 3.7 --backend mysql start-airflow
+
+
 You can also use it to start any released version of Airflow from ``PyPI`` with the
 ``--use-airflow-version`` flag.
 
@@ -496,6 +513,7 @@ Those are commands mostly used by contributors:
 * Execute arbitrary command in the test environment with ``breeze shell`` command
 * Enter interactive shell in CI container when ``shell`` (or no command) is specified
 * Start containerised, development-friendly airflow installation with ``breeze start-airflow`` command
+* Compile www assets for webserver ``breeze compile-www-assets`` command
 * Build documentation with ``breeze build-docs`` command
 * Initialize local virtualenv with ``./scripts/tools/initialize_virtualenv.py`` command
 * Run static checks with autocomplete support ``breeze static-checks`` command
@@ -1575,24 +1593,14 @@ If you set these variables, next time when you enter the environment the new por
 Managing Dependencies
 ---------------------
 
-If you need to change apt dependencies in the ``Dockerfile.ci``, add Python packages in ``setup.py`` or
-add JavaScript dependencies in ``package.json``, you can either add dependencies temporarily for a single
-Breeze session or permanently in ``setup.py``, ``Dockerfile.ci``, or ``package.json`` files.
-
-Installing Dependencies for a Single Breeze Session
-...................................................
-
-You can install dependencies inside the container using ``sudo apt install``, ``pip install`` or
-``yarn install`` (in ``airflow/www`` folder) respectively. This is useful if you want to test something
-quickly while you are in the container. However, these changes are not retained: they disappear once you
-exit the container (except for the node.js dependencies if your sources are mounted to the container).
-Therefore, if you want to retain a new dependency, follow the second option described below.
+If you need to change apt dependencies in the ``Dockerfile.ci``, add Python packages in ``setup.py``
+for airflow and in provider.yaml for packages. If you add any "node" dependencies in ``airflow/www``
+or ``airflow/ui``, you need to compile them in the host with ``breeze compile-www-assets`` command.
 
 Adding Dependencies Permanently
 ...............................
 
-You can add dependencies to the ``Dockerfile.ci``, ``setup.py`` or ``package.json`` and rebuild the image.
-This should happen automatically if you modify any of these files.
+You can add dependencies to the ``Dockerfile.ci``, ``setup.py``.
 After you exit the container and re-run ``breeze``, Breeze detects changes in dependencies,
 asks you to confirm rebuilding the image and proceeds with rebuilding if you confirm (or skip it
 if you do not confirm). After rebuilding is done, Breeze drops you to shell. You may also use the
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
index 1904c15abe..facd5d9863 100644
--- a/CONTRIBUTING.rst
+++ b/CONTRIBUTING.rst
@@ -1162,12 +1162,12 @@ itself comes bundled with jQuery and bootstrap. While they may be phased out
 over time, these packages are currently not managed with yarn.
 
 Make sure you are using recent versions of node and yarn. No problems have been
-found with node\>=8.11.3 and yarn\>=1.19.1.
+found with node\>=8.11.3 and yarn\>=1.19.1. The pre-commit framework of ours install
+node and yarn automatically when installed - if you use ``breeze`` you do not need to install
+neither node nor yarn.
 
-Installing yarn and its packages
---------------------------------
-
-Make sure yarn is available in your environment.
+Installing yarn and its packages manually
+-----------------------------------------
 
 To install yarn on macOS:
 
@@ -1191,27 +1191,6 @@ To install yarn on macOS:
     export PATH="$HOME/.yarn/bin:$PATH"
 
 4.  Install third-party libraries defined in ``package.json`` by running the
-    following commands within the ``airflow/www/`` directory:
-
-
-.. code-block:: bash
-
-    # from the root of the repository, move to where our JS package.json lives
-    cd airflow/www/
-    # run yarn install to fetch all the dependencies
-    yarn install
-
-
-These commands install the libraries in a new ``node_modules/`` folder within
-``www/``.
-
-Should you add or upgrade a node package, run
-``yarn add --dev <package>`` for packages needed in development or
-``yarn add <package>`` for packages used by the code.
-Then push the newly generated ``package.json`` and ``yarn.lock`` file so that we
-could get a reproducible build. See the `Yarn docs
-<https://yarnpkg.com/en/docs/cli/add#adding-dependencies->`_ for more details.
-
 
 Generate Bundled Files with yarn
 --------------------------------
@@ -1225,6 +1204,7 @@ commands:
     yarn run prod
 
     # Starts a web server that manages and updates your assets as you modify them
+    # You'll need to run the webserver in debug mode too: ``airflow webserver -d``
     yarn run dev
 
 
diff --git a/Dockerfile b/Dockerfile
index b4ddddef80..7fd6b8bbf6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -397,101 +397,6 @@ function common::show_pip_version_and_location() {
 }
 EOF
 
-# The content below is automatically copied from scripts/docker/prepare_node_modules.sh
-COPY <<"EOF" /prepare_node_modules.sh
-set -euo pipefail
-
-COLOR_BLUE=$'\e[34m'
-readonly COLOR_BLUE
-COLOR_RESET=$'\e[0m'
-readonly COLOR_RESET
-
-function prepare_node_modules() {
-    echo
-    echo "${COLOR_BLUE}Preparing node modules${COLOR_RESET}"
-    echo
-    local www_dir
-    if [[ ${AIRFLOW_INSTALLATION_METHOD=} == "." ]]; then
-        # In case we are building from sources in production image, we should build the assets
-        www_dir="${AIRFLOW_SOURCES_TO=${AIRFLOW_SOURCES}}/airflow/www"
-    else
-        www_dir="$(python -m site --user-site)/airflow/www"
-    fi
-    pushd ${www_dir} || exit 1
-    set +e
-    yarn install --frozen-lockfile --no-cache 2>/tmp/out-yarn-install.txt
-    local res=$?
-    if [[ ${res} != 0 ]]; then
-        >&2 echo
-        >&2 echo "Error when running yarn install:"
-        >&2 echo
-        >&2 cat /tmp/out-yarn-install.txt && rm -f /tmp/out-yarn-install.txt
-        exit 1
-    fi
-    rm -f /tmp/out-yarn-install.txt
-    popd || exit 1
-}
-
-prepare_node_modules
-EOF
-
-# The content below is automatically copied from scripts/docker/compile_www_assets.sh
-COPY <<"EOF" /compile_www_assets.sh
-set -euo pipefail
-
-BUILD_TYPE=${BUILD_TYPE="prod"}
-REMOVE_ARTIFACTS=${REMOVE_ARTIFACTS="true"}
-
-COLOR_BLUE=$'\e[34m'
-readonly COLOR_BLUE
-COLOR_RESET=$'\e[0m'
-readonly COLOR_RESET
-
-function compile_www_assets() {
-    echo
-    echo "${COLOR_BLUE}Compiling www assets: running yarn ${BUILD_TYPE}${COLOR_RESET}"
-    echo
-    local www_dir
-    if [[ ${AIRFLOW_INSTALLATION_METHOD=} == "." ]]; then
-        # In case we are building from sources in production image, we should build the assets
-        www_dir="${AIRFLOW_SOURCES_TO=${AIRFLOW_SOURCES}}/airflow/www"
-    else
-        www_dir="$(python -m site --user-site)/airflow/www"
-    fi
-    pushd ${www_dir} || exit 1
-    set +e
-    yarn run "${BUILD_TYPE}" 2>/tmp/out-yarn-run.txt
-    res=$?
-    if [[ ${res} != 0 ]]; then
-        >&2 echo
-        >&2 echo "Error when running yarn run:"
-        >&2 echo
-        >&2 cat /tmp/out-yarn-run.txt && rm -rf /tmp/out-yarn-run.txt
-        exit 1
-    fi
-    rm -f /tmp/out-yarn-run.txt
-    set -e
-    local md5sum_file
-    md5sum_file="static/dist/sum.md5"
-    readonly md5sum_file
-    find package.json yarn.lock static/css static/js -type f | sort | xargs md5sum > "${md5sum_file}"
-    if [[ ${REMOVE_ARTIFACTS} == "true" ]]; then
-        echo
-        echo "${COLOR_BLUE}Removing generated node modules${COLOR_RESET}"
-        echo
-        rm -rf "${www_dir}/node_modules"
-        rm -vf "${www_dir}"/{package.json,yarn.lock,.eslintignore,.eslintrc,.stylelintignore,.stylelintrc,compile_assets.sh,webpack.config.js}
-    else
-        echo
-        echo "${COLOR_BLUE}Leaving generated node modules${COLOR_RESET}"
-        echo
-    fi
-    popd || exit 1
-}
-
-compile_www_assets
-EOF
-
 # The content below is automatically copied from scripts/docker/pip
 COPY <<"EOF" /pip
 #!/usr/bin/env bash
@@ -1120,7 +1025,6 @@ ARG DEV_APT_DEPS="\
      libssl-dev \
      locales  \
      lsb-release \
-     nodejs \
      openssh-client \
      sasl2-bin \
      software-properties-common \
@@ -1132,9 +1036,7 @@ ARG DEV_APT_DEPS="\
 
 ARG ADDITIONAL_DEV_APT_DEPS=""
 ARG DEV_APT_COMMAND="\
-    curl --silent --fail --location https://deb.nodesource.com/setup_14.x | \
-        bash -o pipefail -o errexit -o nolog - \
-    && curl --silent https://dl.yarnpkg.com/debian/pubkey.gpg | \
+    curl --silent https://dl.yarnpkg.com/debian/pubkey.gpg | \
     apt-key add - >/dev/null 2>&1\
     && echo 'deb https://dl.yarnpkg.com/debian/ stable main' > /etc/apt/sources.list.d/yarn.list"
 ARG ADDITIONAL_DEV_APT_COMMAND="echo"
@@ -1196,18 +1098,10 @@ ARG INSTALL_PROVIDERS_FROM_SOURCES="false"
 # But it also can be `.` from local installation or GitHub URL pointing to specific branch or tag
 # Of Airflow. Note That for local source installation you need to have local sources of
 # Airflow checked out together with the Dockerfile and AIRFLOW_SOURCES_FROM and AIRFLOW_SOURCES_TO
-# set to "." and "/opt/airflow" respectively. Similarly AIRFLOW_SOURCES_WWW_FROM/TO are set to right source
-# and destination
+# set to "." and "/opt/airflow" respectively.
 ARG AIRFLOW_INSTALLATION_METHOD="apache-airflow"
 # By default we do not upgrade to latest dependencies
 ARG UPGRADE_TO_NEWER_DEPENDENCIES="false"
-# By default we install latest airflow from PyPI so we do not need to copy sources of Airflow
-# www to compile the assets but in case of breeze/CI builds we use latest sources and we override those
-# those SOURCES_FROM/TO with "airflow/www" and "/opt/airflow/airflow/www" respectively.
-# This is to rebuild the assets only when any of the www sources change
-ARG AIRFLOW_SOURCES_WWW_FROM="Dockerfile"
-ARG AIRFLOW_SOURCES_WWW_TO="/Dockerfile"
-
 # By default we install latest airflow from PyPI so we do not need to copy sources of Airflow
 # but in case of breeze/CI builds we use latest sources and we override those
 # those SOURCES_FROM/TO with "." and "/opt/airflow" respectively
@@ -1303,26 +1197,8 @@ RUN bash /scripts/docker/install_pip_version.sh; \
         bash /scripts/docker/install_airflow_dependencies_from_branch_tip.sh; \
     fi
 
-COPY --from=scripts compile_www_assets.sh prepare_node_modules.sh /scripts/docker/
-COPY --chown=airflow:0 ${AIRFLOW_SOURCES_WWW_FROM} ${AIRFLOW_SOURCES_WWW_TO}
-
-# hadolint ignore=SC2086, SC2010
-RUN if [[ ${AIRFLOW_INSTALLATION_METHOD} == "." ]]; then \
-        # only prepare node modules and compile assets if the prod image is build from sources
-        # otherwise they are already compiled-in the package.
-        bash /scripts/docker/prepare_node_modules.sh; \
-        REMOVE_ARTIFACTS="true" BUILD_TYPE="prod" bash /scripts/docker/compile_www_assets.sh; \
-        # Copy generated dist folder (otherwise it will be overridden by the COPY step below)
-        mv -f /opt/airflow/airflow/www/static/dist /tmp/dist; \
-    fi;
-
 COPY --chown=airflow:0 ${AIRFLOW_SOURCES_FROM} ${AIRFLOW_SOURCES_TO}
 
-# Copy back the generated dist folder
-RUN if [[ ${AIRFLOW_INSTALLATION_METHOD} == "." ]]; then \
-        mv -f /tmp/dist /opt/airflow/airflow/www/static/dist; \
-    fi;
-
 # Add extra python dependencies
 ARG ADDITIONAL_PYTHON_DEPS=""
 
diff --git a/Dockerfile.ci b/Dockerfile.ci
index 4abaa4ad44..c06534357d 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -384,101 +384,6 @@ common::get_colors
 install_pipx_tools
 EOF
 
-# The content below is automatically copied from scripts/docker/prepare_node_modules.sh
-COPY <<"EOF" /prepare_node_modules.sh
-set -euo pipefail
-
-COLOR_BLUE=$'\e[34m'
-readonly COLOR_BLUE
-COLOR_RESET=$'\e[0m'
-readonly COLOR_RESET
-
-function prepare_node_modules() {
-    echo
-    echo "${COLOR_BLUE}Preparing node modules${COLOR_RESET}"
-    echo
-    local www_dir
-    if [[ ${AIRFLOW_INSTALLATION_METHOD=} == "." ]]; then
-        # In case we are building from sources in production image, we should build the assets
-        www_dir="${AIRFLOW_SOURCES_TO=${AIRFLOW_SOURCES}}/airflow/www"
-    else
-        www_dir="$(python -m site --user-site)/airflow/www"
-    fi
-    pushd ${www_dir} || exit 1
-    set +e
-    yarn install --frozen-lockfile --no-cache 2>/tmp/out-yarn-install.txt
-    local res=$?
-    if [[ ${res} != 0 ]]; then
-        >&2 echo
-        >&2 echo "Error when running yarn install:"
-        >&2 echo
-        >&2 cat /tmp/out-yarn-install.txt && rm -f /tmp/out-yarn-install.txt
-        exit 1
-    fi
-    rm -f /tmp/out-yarn-install.txt
-    popd || exit 1
-}
-
-prepare_node_modules
-EOF
-
-# The content below is automatically copied from scripts/docker/compile_www_assets.sh
-COPY <<"EOF" /compile_www_assets.sh
-set -euo pipefail
-
-BUILD_TYPE=${BUILD_TYPE="prod"}
-REMOVE_ARTIFACTS=${REMOVE_ARTIFACTS="true"}
-
-COLOR_BLUE=$'\e[34m'
-readonly COLOR_BLUE
-COLOR_RESET=$'\e[0m'
-readonly COLOR_RESET
-
-function compile_www_assets() {
-    echo
-    echo "${COLOR_BLUE}Compiling www assets: running yarn ${BUILD_TYPE}${COLOR_RESET}"
-    echo
-    local www_dir
-    if [[ ${AIRFLOW_INSTALLATION_METHOD=} == "." ]]; then
-        # In case we are building from sources in production image, we should build the assets
-        www_dir="${AIRFLOW_SOURCES_TO=${AIRFLOW_SOURCES}}/airflow/www"
-    else
-        www_dir="$(python -m site --user-site)/airflow/www"
-    fi
-    pushd ${www_dir} || exit 1
-    set +e
-    yarn run "${BUILD_TYPE}" 2>/tmp/out-yarn-run.txt
-    res=$?
-    if [[ ${res} != 0 ]]; then
-        >&2 echo
-        >&2 echo "Error when running yarn run:"
-        >&2 echo
-        >&2 cat /tmp/out-yarn-run.txt && rm -rf /tmp/out-yarn-run.txt
-        exit 1
-    fi
-    rm -f /tmp/out-yarn-run.txt
-    set -e
-    local md5sum_file
-    md5sum_file="static/dist/sum.md5"
-    readonly md5sum_file
-    find package.json yarn.lock static/css static/js -type f | sort | xargs md5sum > "${md5sum_file}"
-    if [[ ${REMOVE_ARTIFACTS} == "true" ]]; then
-        echo
-        echo "${COLOR_BLUE}Removing generated node modules${COLOR_RESET}"
-        echo
-        rm -rf "${www_dir}/node_modules"
-        rm -vf "${www_dir}"/{package.json,yarn.lock,.eslintignore,.eslintrc,.stylelintignore,.stylelintrc,compile_assets.sh,webpack.config.js}
-    else
-        echo
-        echo "${COLOR_BLUE}Leaving generated node modules${COLOR_RESET}"
-        echo
-    fi
-    popd || exit 1
-}
-
-compile_www_assets
-EOF
-
 # The content below is automatically copied from scripts/docker/install_airflow.sh
 COPY <<"EOF" /install_airflow.sh
 
@@ -663,11 +568,6 @@ if [[ ${SKIP_ENVIRONMENT_INITIALIZATION=} != "true" ]]; then
         echo
         echo "${COLOR_BLUE}Using airflow version from current sources${COLOR_RESET}"
         echo
-        if [[ -d "${AIRFLOW_SOURCES}/airflow/www/" ]]; then
-            pushd "${AIRFLOW_SOURCES}/airflow/www/" >/dev/null
-            ./ask_for_recompile_assets_if_needed.sh
-            popd >/dev/null
-        fi
         # Cleanup the logs, tmp when entering the environment
         sudo rm -rf "${AIRFLOW_SOURCES}"/logs/*
         sudo rm -rf "${AIRFLOW_SOURCES}"/tmp/*
@@ -795,6 +695,8 @@ if [[ ${SKIP_ENVIRONMENT_INITIALIZATION=} != "true" ]]; then
     touch /usr/lib/google-cloud-sdk/bin/gcloud
     ln -s -f /usr/bin/gcloud /usr/lib/google-cloud-sdk/bin/gcloud
 
+    in_container_fix_ownership
+
     if [[ ${SKIP_SSH_SETUP="false"} == "false" ]]; then
         # Set up ssh keys
         echo 'yes' | ssh-keygen -t rsa -C your_email@youremail.com -m PEM -P '' -f ~/.ssh/id_rsa \
@@ -1025,16 +927,6 @@ COPY <<"EOF" /entrypoint_exec.sh
 exec /bin/bash "${@}"
 EOF
 
-##############################################################################################
-# This is the www image where we keep all inlined files needed to build ui
-# It is copied separately to volume to speed up building and avoid cache miss on changed
-# file permissions.
-# We use PYTHON_BASE_IMAGE to make sure that the scripts are different for different platforms.
-##############################################################################################
-FROM ${PYTHON_BASE_IMAGE} as www
-COPY airflow/www/package.json airflow/www/yarn.lock airflow/www/webpack.config.js /
-COPY airflow/www/static/ /static
-
 FROM ${PYTHON_BASE_IMAGE} as main
 
 # Nolog bash flag is currently ignored - but you can replace it with other flags (for example
@@ -1060,8 +952,7 @@ RUN echo "Base image version: ${PYTHON_BASE_IMAGE}"
 
 ARG ADDITIONAL_DEV_APT_DEPS=""
 ARG DEV_APT_COMMAND="\
-    curl --silent --fail --location https://deb.nodesource.com/setup_14.x | bash - \
-    && curl --silent --fail https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - >/dev/null 2>&1 \
+    curl --silent --fail https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - >/dev/null 2>&1 \
     && echo 'deb https://dl.yarnpkg.com/debian/ stable main' > /etc/apt/sources.list.d/yarn.list"
 ARG ADDITIONAL_DEV_APT_COMMAND=""
 ARG ADDITIONAL_DEV_ENV_VARS=""
@@ -1104,7 +995,6 @@ RUN apt-get update \
            "${DISTRO_LIBENCHANT}" \
            locales  \
            netcat \
-           nodejs \
            rsync \
            sasl2-bin \
            sudo \
@@ -1307,25 +1197,6 @@ COPY --from=scripts install_pipx_tools.sh /scripts/docker/
 # dependencies installed in Airflow
 RUN bash /scripts/docker/install_pipx_tools.sh
 
-# Copy package.json and yarn.lock to install node modules
-# this way even if other static check files change, node modules will not need to be installed
-# we want to keep node_modules so we can do this step separately from compiling assets
-COPY --from=www package.json yarn.lock ${AIRFLOW_SOURCES}/airflow/www/
-COPY --from=scripts prepare_node_modules.sh /scripts/docker/
-
-# Package JS/css for production
-RUN bash /scripts/docker/prepare_node_modules.sh
-
-# Copy all the needed www/ for assets compilation. Done as two separate COPY
-# commands so as otherwise it copies the _contents_ of static/ in to www/
-COPY --from=www webpack.config.js ${AIRFLOW_SOURCES}/airflow/www/
-COPY --from=www static ${AIRFLOW_SOURCES}/airflow/www/static/
-COPY --from=scripts compile_www_assets.sh /scripts/docker/
-
-# Build artifacts without removing temporary artifacts (we will need them for incremental changes)
-# in build  mode
-RUN REMOVE_ARTIFACTS="false" BUILD_TYPE="build" bash /scripts/docker/compile_www_assets.sh
-
 # Airflow sources change frequently but dependency configuration won't change that often
 # We copy setup.py and other files needed to perform setup of dependencies
 # So in case setup.py changes we can install latest dependencies required.
diff --git a/STATIC_CODE_CHECKS.rst b/STATIC_CODE_CHECKS.rst
index b5b5e37ecb..cb05efa4e2 100644
--- a/STATIC_CODE_CHECKS.rst
+++ b/STATIC_CODE_CHECKS.rst
@@ -205,10 +205,16 @@ require Breeze Docker image to be build locally.
 +--------------------------------------------------------+------------------------------------------------------------------+---------+
 | check-system-tests-present                             | Check if system tests have required segments of code             |         |
 +--------------------------------------------------------+------------------------------------------------------------------+---------+
+| check-system-tests-tocs                                | Check that system tests is properly added                        |         |
++--------------------------------------------------------+------------------------------------------------------------------+---------+
 | check-xml                                              | Check XML files with xmllint                                     |         |
 +--------------------------------------------------------+------------------------------------------------------------------+---------+
 | codespell                                              | Run codespell to check for common misspellings in files          |         |
 +--------------------------------------------------------+------------------------------------------------------------------+---------+
+| compile-www-assets                                     | Compile www assets                                               |         |
++--------------------------------------------------------+------------------------------------------------------------------+---------+
+| create-missing-init-py-files-tests                     | Create missing init.py files in tests                            |         |
++--------------------------------------------------------+------------------------------------------------------------------+---------+
 | debug-statements                                       | Detect accidentally committed debug statements                   |         |
 +--------------------------------------------------------+------------------------------------------------------------------+---------+
 | detect-private-key                                     | Detect if private key is added to the repository                 |         |
@@ -246,7 +252,7 @@ require Breeze Docker image to be build locally.
 +--------------------------------------------------------+------------------------------------------------------------------+---------+
 | lint-helm-chart                                        | Lint Helm Chart                                                  |         |
 +--------------------------------------------------------+------------------------------------------------------------------+---------+
-| lint-javascript                                        | * ESLint against airflow/ui                                      | *       |
+| lint-javascript                                        | * ESLint against airflow/ui                                      |         |
 |                                                        | * ESLint against current UI JavaScript files                     |         |
 +--------------------------------------------------------+------------------------------------------------------------------+---------+
 | lint-json-schema                                       | * Lint JSON Schema files with JSON Schema                        |         |
diff --git a/airflow/www/ask_for_recompile_assets_if_needed.sh b/airflow/www/ask_for_recompile_assets_if_needed.sh
deleted file mode 100755
index 8342ae7631..0000000000
--- a/airflow/www/ask_for_recompile_assets_if_needed.sh
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/env bash
-# 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.
-set -e
-
-if [[ ${GITHUB_ACTIONS:="false"} == "true" ]]; then
-    echo
-    echo -e "${BLUE}Skipping asset compilation check in CI.${NO_COLOR}"
-    echo
-    exit 0
-fi
-
-cd "$( dirname "${BASH_SOURCE[0]}" )"
-
-MD5SUM_FILE="static/dist/sum.md5"
-readonly MD5SUM_FILE
-
-GREEN='\033[1;32m'
-YELLOW='\033[1;33m'
-NO_COLOR='\033[0m'
-
-md5sum=$(find package.json yarn.lock static/css static/js -type f | sort | xargs md5sum)
-old_md5sum=$(cat "${MD5SUM_FILE}" 2>/dev/null || true)
-if [[ ${old_md5sum} != "${md5sum}" ]]; then
-    if [[ ( ${START_AIRFLOW:="false"} == "true" || ${START_AIRFLOW} == "True" )  && ${USE_AIRFLOW_VERSION:=} == "" ]]; then
-        echo
-        echo -e "${YELLOW}Recompiling assets as they have changed and you need them for 'start_airflow' command${NO_COLOR}"
-        echo
-        ./compile_assets.sh
-    else
-        echo
-        echo -e "${YELLOW}WARNING: It seems that the generated assets files do not match the content of the sources.${NO_COLOR}"
-        echo "To recompile assets, run:"
-        echo ""
-        echo "   ./airflow/www/compile_assets.sh"
-        echo ""
-    fi
-else
-    echo
-    echo -e "${GREEN}No need for www assets recompilation.${NO_COLOR}"
-    echo
-fi
diff --git a/breeze-legacy b/breeze-legacy
index 0bb257494c..b03f5ae18f 100755
--- a/breeze-legacy
+++ b/breeze-legacy
@@ -136,14 +136,6 @@ function breeze::setup_default_breeze_constants() {
     AIRFLOW_SOURCES_TO=${AIRFLOW_SOURCES_TO:="/opt/airflow"}
     export AIRFLOW_SOURCES_TO
 
-    # Sources by default are installed from local sources when using breeze
-    AIRFLOW_SOURCES_WWW_FROM=${AIRFLOW_SOURCES_WWW_FROM:="./airflow/www"}
-    export AIRFLOW_SOURCES_WWW_FROM
-
-    # They are copied to /opt/airflow by default in breeze
-    AIRFLOW_SOURCES_WWW_TO=${AIRFLOW_SOURCES_WWW_TO:="/opt/airflow/airflow/www"}
-    export AIRFLOW_SOURCES_WWW_TO
-
     # Unlike in CI scripts, in breeze by default production image is installed from sources
     export AIRFLOW_INSTALLATION_METHOD="."
 
diff --git a/dev/breeze/src/airflow_breeze/commands/developer_commands.py b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
index 268dad01a8..404c2e2863 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
@@ -75,6 +75,7 @@ from airflow_breeze.utils.run_utils import (
     assert_pre_commit_installed,
     filter_out_none,
     run_command,
+    run_compile_www_assets,
 )
 from airflow_breeze.utils.visuals import ASCIIART, ASCIIART_STYLE, CHEATSHEET, CHEATSHEET_STYLE
 
@@ -83,6 +84,7 @@ DEVELOPER_COMMANDS = {
     "commands": [
         "shell",
         "start-airflow",
+        "compile-www-assets",
         "exec",
         "stop",
         "build-docs",
@@ -357,6 +359,8 @@ def start_airflow(
     extra_args: Tuple,
 ):
     """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)
     enter_shell(
         verbose=verbose,
         dry_run=dry_run,
@@ -546,6 +550,26 @@ def static_checks(
     sys.exit(static_checks_result.returncode)
 
 
+@main.command(
+    name="compile-www-assets",
+    help="Compiles www assets.",
+    context_settings=dict(
+        ignore_unknown_options=True,
+        allow_extra_args=True,
+    ),
+)
+@option_verbose
+@option_dry_run
+def compile_www_assets(
+    verbose: bool,
+    dry_run: bool,
+):
+    compile_www_assets_result = run_compile_www_assets(verbose=verbose, dry_run=dry_run)
+    if compile_www_assets_result.returncode != 0:
+        get_console().print("[warn]New assets were generated[/]")
+    sys.exit(0)
+
+
 @main.command(name="stop", help="Stop running breeze environment.")
 @option_verbose
 @option_dry_run
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 6a2c331e6d..87dae0c9a2 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -65,7 +65,7 @@ from airflow_breeze.utils.docker_command_utils import (
 )
 from airflow_breeze.utils.parallel import check_async_run_results
 from airflow_breeze.utils.python_versions import get_python_version_list
-from airflow_breeze.utils.run_utils import RunCommandResult, run_command
+from airflow_breeze.utils.run_utils import RunCommandResult, run_command, run_compile_www_assets
 
 RELEASE_MANAGEMENT_PARAMETERS = {
     "breeze prepare-airflow-package": [
@@ -234,6 +234,7 @@ def prepare_airflow_packages(
     debug: bool,
 ):
     perform_environment_checks(verbose=verbose)
+    run_compile_www_assets(verbose=verbose, dry_run=dry_run)
     shell_params = ShellParams(
         verbose=verbose,
         github_repository=github_repository,
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py b/dev/breeze/src/airflow_breeze/global_constants.py
index 5ba825e71f..1b724974ae 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -225,18 +225,12 @@ FILES_FOR_REBUILD_CHECK = [
     'setup.cfg',
     'Dockerfile.ci',
     '.dockerignore',
-    'scripts/docker/compile_www_assets.sh',
     'scripts/docker/common.sh',
     'scripts/docker/install_additional_dependencies.sh',
     'scripts/docker/install_airflow.sh',
     'scripts/docker/install_airflow_dependencies_from_branch_tip.sh',
     'scripts/docker/install_from_docker_context_files.sh',
     'scripts/docker/install_mysql.sh',
-    'airflow/www/package.json',
-    'airflow/www/yarn.lock',
-    'airflow/www/webpack.config.js',
-    'airflow/ui/package.json',
-    'airflow/ui/yarn.lock',
 ]
 
 ENABLED_SYSTEMS = ""
@@ -265,8 +259,6 @@ MIN_DOCKER_COMPOSE_VERSION = "1.29.0"
 
 AIRFLOW_SOURCES_FROM = "."
 AIRFLOW_SOURCES_TO = "/opt/airflow"
-AIRFLOW_SOURCES_WWW_FROM = "./airflow/www"
-AIRFLOW_SOURCES_WWW_TO = "/opt/airflow/airflow/www"
 
 DEFAULT_EXTRAS = [
     # BEGINNING OF EXTRAS LIST UPDATED BY PRE COMMIT
diff --git a/dev/breeze/src/airflow_breeze/params/build_prod_params.py b/dev/breeze/src/airflow_breeze/params/build_prod_params.py
index 86a25b6999..9e30b95f69 100644
--- a/dev/breeze/src/airflow_breeze/params/build_prod_params.py
+++ b/dev/breeze/src/airflow_breeze/params/build_prod_params.py
@@ -26,8 +26,6 @@ from airflow_breeze.branch_defaults import AIRFLOW_BRANCH, DEFAULT_AIRFLOW_CONST
 from airflow_breeze.global_constants import (
     AIRFLOW_SOURCES_FROM,
     AIRFLOW_SOURCES_TO,
-    AIRFLOW_SOURCES_WWW_FROM,
-    AIRFLOW_SOURCES_WWW_TO,
     get_airflow_extras,
     get_airflow_version,
 )
@@ -73,10 +71,6 @@ class BuildProdParams(CommonBuildParams):
         build_args = []
         build_args.extend(
             [
-                "--build-arg",
-                "AIRFLOW_SOURCES_WWW_FROM=empty",
-                "--build-arg",
-                "AIRFLOW_SOURCES_WWW_TO=/empty",
                 "--build-arg",
                 "AIRFLOW_SOURCES_FROM=empty",
                 "--build-arg",
@@ -159,10 +153,6 @@ class BuildProdParams(CommonBuildParams):
                     "--build-arg",
                     f"AIRFLOW_SOURCES_TO={AIRFLOW_SOURCES_TO}",
                     "--build-arg",
-                    f"AIRFLOW_SOURCES_WWW_FROM={AIRFLOW_SOURCES_WWW_FROM}",
-                    "--build-arg",
-                    f"AIRFLOW_SOURCES_WWW_TO={AIRFLOW_SOURCES_WWW_TO}",
-                    "--build-arg",
                     f"AIRFLOW_INSTALLATION_METHOD={self.installation_method}",
                     "--build-arg",
                     f"AIRFLOW_CONSTRAINTS_REFERENCE={self.airflow_constraints_reference}",
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index a5f998ddef..b77f1931dc 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -59,8 +59,11 @@ PRE_COMMIT_LIST = [
     'check-setup-order',
     'check-start-date-not-used-in-defaults',
     'check-system-tests-present',
+    'check-system-tests-tocs',
     'check-xml',
     'codespell',
+    'compile-www-assets',
+    'create-missing-init-py-files-tests',
     'debug-statements',
     'detect-private-key',
     'doctoc',
diff --git a/dev/breeze/src/airflow_breeze/utils/run_utils.py b/dev/breeze/src/airflow_breeze/utils/run_utils.py
index 29268be8b3..36c5c6fa93 100644
--- a/dev/breeze/src/airflow_breeze/utils/run_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/run_utils.py
@@ -354,3 +354,34 @@ def get_runnable_ci_image(verbose: bool, dry_run: bool) -> str:
         instruction=f"breeze build-image --python {python_version}",
     )
     return airflow_image
+
+
+def run_compile_www_assets(
+    verbose: bool,
+    dry_run: bool,
+):
+    from airflow_breeze.utils.docker_command_utils import perform_environment_checks
+
+    assert_pre_commit_installed(verbose=verbose)
+    perform_environment_checks(verbose=verbose)
+    command_to_execute = [
+        sys.executable,
+        "-m",
+        "pre_commit",
+        'run',
+        "--hook-stage",
+        "manual",
+        'compile-www-assets',
+        '--all-files',
+    ]
+    env = os.environ.copy()
+    compile_www_assets_result = run_command(
+        command_to_execute,
+        verbose=verbose,
+        dry_run=dry_run,
+        check=False,
+        no_output_dump_on_exception=True,
+        text=True,
+        env=env,
+    )
+    return compile_www_assets_result
diff --git a/docs/docker-stack/build-arg-ref.rst b/docs/docker-stack/build-arg-ref.rst
index d38dc585fe..3b5745e1e3 100644
--- a/docs/docker-stack/build-arg-ref.rst
+++ b/docs/docker-stack/build-arg-ref.rst
@@ -208,16 +208,6 @@ You can see some examples of those in:
 |                                    |                                          | "/opt/airflow" when you install Airflow  |
 |                                    |                                          | from local sources.                      |
 +------------------------------------+------------------------------------------+------------------------------------------+
-| ``AIRFLOW_SOURCES_WWW_FROM``       | ``Dockerfile``                           | Sources of Airflow WWW files used for    |
-|                                    |                                          | asset compilation. Set it to             |
-|                                    |                                          | "./airflow/www" when                     |
-|                                    |                                          | you install Airflow from local sources   |
-+------------------------------------+------------------------------------------+------------------------------------------+
-| ``AIRFLOW_SOURCES_WWW_TO``         | ``/Dockerfile``                          | Target for Airflow files used for        |
-|                                    |                                          | asset compilation. Set it to             |
-|                                    |                                          | "/opt/airflow/airflow/www" when          |
-|                                    |                                          | you install Airflow from local sources.  |
-+------------------------------------+------------------------------------------+------------------------------------------+
 | ``AIRFLOW_VERSION_SPECIFICATION``  |                                          | Optional - might be used for using limit |
 |                                    |                                          | for Airflow version installation - for   |
 |                                    |                                          | example ``<2.0.2`` for automated builds. |
diff --git a/images/breeze/output-commands-hash.txt b/images/breeze/output-commands-hash.txt
index df2aa32c0a..a0ca87ce90 100644
--- a/images/breeze/output-commands-hash.txt
+++ b/images/breeze/output-commands-hash.txt
@@ -8,6 +8,7 @@ build-image:b00ae014f9c45c116e8dd0ea72b61d19
 build-prod-image:6c614f9c76e776912dc1cf4506d2b6f5
 cleanup:9a94bd1063296ea86e895f671db0b330
 command-hash-export:83bc6a4a8c60b62da3d0f00e81d2c3ea
+compile-www-assets:5f0d8af0a2a074f2ee577604662598c8
 config:92653afc11889e1b78e3a2e38f41107f
 docker-compose-tests:8ae3b6211fd31db81a750d1c6b96ec3d
 exec:e4329909b8b2a610fa4fad5116c4b896
@@ -28,7 +29,7 @@ self-upgrade:b5437c0a1a91533a11ee9d0a9692369c
 setup-autocomplete:355b72dee171c2fcba46fc90ac7c97b0
 shell:ab7955da71048b3a695485c152d06786
 start-airflow:30caa077555bef44e5bdf76dfeca092c
-static-checks:69bbef8c50c452faf58403d7a06f34b6
+static-checks:0166657e80e91b83e1cf69b022c4e864
 stop:8ebd8a42f1003495d37b884de5ac7ce6
 tests:e39111ecbd33a65ababb3cbfbac2b069
 verify-image:a6b3c70957aea96a5d4d261f23359a2d
diff --git a/images/breeze/output-commands.svg b/images/breeze/output-commands.svg
index 2e21ac9804..77e487bfd1 100644
--- a/images/breeze/output-commands.svg
+++ b/images/breeze/output-commands.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2197.2" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2221.6" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -19,393 +19,397 @@
         font-weight: 700;
     }
 
-    .terminal-460130354-matrix {
+    .terminal-4069008649-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-460130354-title {
+    .terminal-4069008649-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-460130354-r1 { fill: #c5c8c6;font-weight: bold }
-.terminal-460130354-r2 { fill: #c5c8c6 }
-.terminal-460130354-r3 { fill: #d0b344;font-weight: bold }
-.terminal-460130354-r4 { fill: #868887 }
-.terminal-460130354-r5 { fill: #68a0b3;font-weight: bold }
-.terminal-460130354-r6 { fill: #98a84b;font-weight: bold }
-.terminal-460130354-r7 { fill: #8d7b39 }
+    .terminal-4069008649-r1 { fill: #c5c8c6;font-weight: bold }
+.terminal-4069008649-r2 { fill: #c5c8c6 }
+.terminal-4069008649-r3 { fill: #d0b344;font-weight: bold }
+.terminal-4069008649-r4 { fill: #868887 }
+.terminal-4069008649-r5 { fill: #68a0b3;font-weight: bold }
+.terminal-4069008649-r6 { fill: #98a84b;font-weight: bold }
+.terminal-4069008649-r7 { fill: #8d7b39 }
     </style>
 
     <defs>
-    <clipPath id="terminal-460130354-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="2146.2" />
+    <clipPath id="terminal-4069008649-clip-terminal">
+      <rect x="0" y="0" width="1463.0" height="2170.6" />
     </clipPath>
-    <clipPath id="terminal-460130354-line-0">
+    <clipPath id="terminal-4069008649-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-1">
+<clipPath id="terminal-4069008649-line-1">
     <rect x="0" y="25.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-2">
+<clipPath id="terminal-4069008649-line-2">
     <rect x="0" y="50.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-3">
+<clipPath id="terminal-4069008649-line-3">
     <rect x="0" y="74.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-4">
+<clipPath id="terminal-4069008649-line-4">
     <rect x="0" y="99.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-5">
+<clipPath id="terminal-4069008649-line-5">
     <rect x="0" y="123.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-6">
+<clipPath id="terminal-4069008649-line-6">
     <rect x="0" y="147.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-7">
+<clipPath id="terminal-4069008649-line-7">
     <rect x="0" y="172.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-8">
+<clipPath id="terminal-4069008649-line-8">
     <rect x="0" y="196.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-9">
+<clipPath id="terminal-4069008649-line-9">
     <rect x="0" y="221.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-10">
+<clipPath id="terminal-4069008649-line-10">
     <rect x="0" y="245.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-11">
+<clipPath id="terminal-4069008649-line-11">
     <rect x="0" y="269.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-12">
+<clipPath id="terminal-4069008649-line-12">
     <rect x="0" y="294.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-13">
+<clipPath id="terminal-4069008649-line-13">
     <rect x="0" y="318.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-14">
+<clipPath id="terminal-4069008649-line-14">
     <rect x="0" y="343.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-15">
+<clipPath id="terminal-4069008649-line-15">
     <rect x="0" y="367.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-16">
+<clipPath id="terminal-4069008649-line-16">
     <rect x="0" y="391.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-17">
+<clipPath id="terminal-4069008649-line-17">
     <rect x="0" y="416.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-18">
+<clipPath id="terminal-4069008649-line-18">
     <rect x="0" y="440.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-19">
+<clipPath id="terminal-4069008649-line-19">
     <rect x="0" y="465.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-20">
+<clipPath id="terminal-4069008649-line-20">
     <rect x="0" y="489.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-21">
+<clipPath id="terminal-4069008649-line-21">
     <rect x="0" y="513.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-22">
+<clipPath id="terminal-4069008649-line-22">
     <rect x="0" y="538.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-23">
+<clipPath id="terminal-4069008649-line-23">
     <rect x="0" y="562.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-24">
+<clipPath id="terminal-4069008649-line-24">
     <rect x="0" y="587.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-25">
+<clipPath id="terminal-4069008649-line-25">
     <rect x="0" y="611.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-26">
+<clipPath id="terminal-4069008649-line-26">
     <rect x="0" y="635.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-27">
+<clipPath id="terminal-4069008649-line-27">
     <rect x="0" y="660.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-28">
+<clipPath id="terminal-4069008649-line-28">
     <rect x="0" y="684.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-29">
+<clipPath id="terminal-4069008649-line-29">
     <rect x="0" y="709.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-30">
+<clipPath id="terminal-4069008649-line-30">
     <rect x="0" y="733.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-31">
+<clipPath id="terminal-4069008649-line-31">
     <rect x="0" y="757.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-32">
+<clipPath id="terminal-4069008649-line-32">
     <rect x="0" y="782.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-33">
+<clipPath id="terminal-4069008649-line-33">
     <rect x="0" y="806.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-34">
+<clipPath id="terminal-4069008649-line-34">
     <rect x="0" y="831.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-35">
+<clipPath id="terminal-4069008649-line-35">
     <rect x="0" y="855.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-36">
+<clipPath id="terminal-4069008649-line-36">
     <rect x="0" y="879.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-37">
+<clipPath id="terminal-4069008649-line-37">
     <rect x="0" y="904.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-38">
+<clipPath id="terminal-4069008649-line-38">
     <rect x="0" y="928.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-39">
+<clipPath id="terminal-4069008649-line-39">
     <rect x="0" y="953.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-40">
+<clipPath id="terminal-4069008649-line-40">
     <rect x="0" y="977.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-41">
+<clipPath id="terminal-4069008649-line-41">
     <rect x="0" y="1001.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-42">
+<clipPath id="terminal-4069008649-line-42">
     <rect x="0" y="1026.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-43">
+<clipPath id="terminal-4069008649-line-43">
     <rect x="0" y="1050.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-44">
+<clipPath id="terminal-4069008649-line-44">
     <rect x="0" y="1075.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-45">
+<clipPath id="terminal-4069008649-line-45">
     <rect x="0" y="1099.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-46">
+<clipPath id="terminal-4069008649-line-46">
     <rect x="0" y="1123.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-47">
+<clipPath id="terminal-4069008649-line-47">
     <rect x="0" y="1148.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-48">
+<clipPath id="terminal-4069008649-line-48">
     <rect x="0" y="1172.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-49">
+<clipPath id="terminal-4069008649-line-49">
     <rect x="0" y="1197.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-50">
+<clipPath id="terminal-4069008649-line-50">
     <rect x="0" y="1221.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-51">
+<clipPath id="terminal-4069008649-line-51">
     <rect x="0" y="1245.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-52">
+<clipPath id="terminal-4069008649-line-52">
     <rect x="0" y="1270.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-53">
+<clipPath id="terminal-4069008649-line-53">
     <rect x="0" y="1294.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-54">
+<clipPath id="terminal-4069008649-line-54">
     <rect x="0" y="1319.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-55">
+<clipPath id="terminal-4069008649-line-55">
     <rect x="0" y="1343.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-56">
+<clipPath id="terminal-4069008649-line-56">
     <rect x="0" y="1367.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-57">
+<clipPath id="terminal-4069008649-line-57">
     <rect x="0" y="1392.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-58">
+<clipPath id="terminal-4069008649-line-58">
     <rect x="0" y="1416.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-59">
+<clipPath id="terminal-4069008649-line-59">
     <rect x="0" y="1441.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-60">
+<clipPath id="terminal-4069008649-line-60">
     <rect x="0" y="1465.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-61">
+<clipPath id="terminal-4069008649-line-61">
     <rect x="0" y="1489.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-62">
+<clipPath id="terminal-4069008649-line-62">
     <rect x="0" y="1514.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-63">
+<clipPath id="terminal-4069008649-line-63">
     <rect x="0" y="1538.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-64">
+<clipPath id="terminal-4069008649-line-64">
     <rect x="0" y="1563.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-65">
+<clipPath id="terminal-4069008649-line-65">
     <rect x="0" y="1587.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-66">
+<clipPath id="terminal-4069008649-line-66">
     <rect x="0" y="1611.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-67">
+<clipPath id="terminal-4069008649-line-67">
     <rect x="0" y="1636.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-68">
+<clipPath id="terminal-4069008649-line-68">
     <rect x="0" y="1660.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-69">
+<clipPath id="terminal-4069008649-line-69">
     <rect x="0" y="1685.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-70">
+<clipPath id="terminal-4069008649-line-70">
     <rect x="0" y="1709.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-71">
+<clipPath id="terminal-4069008649-line-71">
     <rect x="0" y="1733.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-72">
+<clipPath id="terminal-4069008649-line-72">
     <rect x="0" y="1758.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-73">
+<clipPath id="terminal-4069008649-line-73">
     <rect x="0" y="1782.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-74">
+<clipPath id="terminal-4069008649-line-74">
     <rect x="0" y="1807.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-75">
+<clipPath id="terminal-4069008649-line-75">
     <rect x="0" y="1831.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-76">
+<clipPath id="terminal-4069008649-line-76">
     <rect x="0" y="1855.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-77">
+<clipPath id="terminal-4069008649-line-77">
     <rect x="0" y="1880.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-78">
+<clipPath id="terminal-4069008649-line-78">
     <rect x="0" y="1904.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-79">
+<clipPath id="terminal-4069008649-line-79">
     <rect x="0" y="1929.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-80">
+<clipPath id="terminal-4069008649-line-80">
     <rect x="0" y="1953.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-81">
+<clipPath id="terminal-4069008649-line-81">
     <rect x="0" y="1977.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-82">
+<clipPath id="terminal-4069008649-line-82">
     <rect x="0" y="2002.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-83">
+<clipPath id="terminal-4069008649-line-83">
     <rect x="0" y="2026.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-84">
+<clipPath id="terminal-4069008649-line-84">
     <rect x="0" y="2051.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-85">
+<clipPath id="terminal-4069008649-line-85">
     <rect x="0" y="2075.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-460130354-line-86">
+<clipPath id="terminal-4069008649-line-86">
     <rect x="0" y="2099.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="terminal-4069008649-line-87">
+    <rect x="0" y="2124.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="2195.2" rx="8"/><text class="terminal-460130354-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Breeze&#160;commands</text>
+    <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="terminal-4069008649-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Breeze&#160;commands</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-460130354-clip-terminal)">
+    <g transform="translate(9, 41)" clip-path="url(#terminal-4069008649-clip-terminal)">
     
-    <g class="terminal-460130354-matrix">
-    <text class="terminal-460130354-r2" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-460130354-line-0)">
-</text><text class="terminal-460130354-r3" x="12.2" y="44.4" textLength="85.4" clip-path="url(#terminal-460130354-line-1)">Usage:&#160;</text><text class="terminal-460130354-r1" x="97.6" y="44.4" textLength="414.8" clip-path="url(#terminal-460130354-line-1)">breeze&#160;[OPTIONS]&#160;COMMAND&#160;[ARGS]...</text><text class="terminal-460130354-r2" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-460130354-line-1)">
-</text><text class="terminal-460130354-r2" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-460130354-line-2)">
-</text><text class="terminal-460130354-r4" x="0" y="93.2" textLength="24.4" clip-path="url(#terminal-460130354-line-3)">╭─</text><text class="terminal-460130354-r4" x="24.4" y="93.2" textLength="1415.2" clip-path="url(#terminal-460130354-line-3)">&#160;Basic&#160;flags&#160;for&#160;the&#160;default&#160;(shell)&#160;command&#160;───────────────────────────────────────────────────────────────────────</text><text class="terminal-460130354-r4" x="1439.6" y="93.2" textLength="24.4" clip-pat [...]
-</text><text class="terminal-460130354-r4" x="0" y="117.6" textLength="12.2" clip-path="url(#terminal-460130354-line-4)">│</text><text class="terminal-460130354-r5" x="24.4" y="117.6" textLength="12.2" clip-path="url(#terminal-460130354-line-4)">-</text><text class="terminal-460130354-r5" x="36.6" y="117.6" textLength="85.4" clip-path="url(#terminal-460130354-line-4)">-python</text><text class="terminal-460130354-r6" x="305" y="117.6" textLength="24.4" clip-path="url(#terminal-460130354- [...]
-</text><text class="terminal-460130354-r4" x="0" y="142" textLength="12.2" clip-path="url(#terminal-460130354-line-5)">│</text><text class="terminal-460130354-r4" x="353.8" y="142" textLength="732" clip-path="url(#terminal-460130354-line-5)">[default:&#160;3.7]&#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-460130354-r4" x="0" y="166.4" textLength="12.2" clip-path="url(#terminal-460130354-line-6)">│</text><text class="terminal-460130354-r5" x="24.4" y="166.4" textLength="12.2" clip-path="url(#terminal-460130354-line-6)">-</text><text class="terminal-460130354-r5" x="36.6" y="166.4" textLength="97.6" clip-path="url(#terminal-460130354-line-6)">-backend</text><text class="terminal-460130354-r6" x="305" y="166.4" textLength="24.4" clip-path="url(#terminal-460130354 [...]
-</text><text class="terminal-460130354-r4" x="0" y="190.8" textLength="12.2" clip-path="url(#terminal-460130354-line-7)">│</text><text class="terminal-460130354-r5" x="24.4" y="190.8" textLength="12.2" clip-path="url(#terminal-460130354-line-7)">-</text><text class="terminal-460130354-r5" x="36.6" y="190.8" textLength="109.8" clip-path="url(#terminal-460130354-line-7)">-postgres</text><text class="terminal-460130354-r5" x="146.4" y="190.8" textLength="97.6" clip-path="url(#terminal-46013 [...]
-</text><text class="terminal-460130354-r4" x="0" y="215.2" textLength="12.2" clip-path="url(#terminal-460130354-line-8)">│</text><text class="terminal-460130354-r5" x="24.4" y="215.2" textLength="12.2" clip-path="url(#terminal-460130354-line-8)">-</text><text class="terminal-460130354-r5" x="36.6" y="215.2" textLength="73.2" clip-path="url(#terminal-460130354-line-8)">-mysql</text><text class="terminal-460130354-r5" x="109.8" y="215.2" textLength="97.6" clip-path="url(#terminal-460130354 [...]
-</text><text class="terminal-460130354-r4" x="0" y="239.6" textLength="12.2" clip-path="url(#terminal-460130354-line-9)">│</text><text class="terminal-460130354-r5" x="24.4" y="239.6" textLength="12.2" clip-path="url(#terminal-460130354-line-9)">-</text><text class="terminal-460130354-r5" x="36.6" y="239.6" textLength="73.2" clip-path="url(#terminal-460130354-line-9)">-mssql</text><text class="terminal-460130354-r5" x="109.8" y="239.6" textLength="97.6" clip-path="url(#terminal-460130354 [...]
-</text><text class="terminal-460130354-r4" x="0" y="264" textLength="12.2" clip-path="url(#terminal-460130354-line-10)">│</text><text class="terminal-460130354-r5" x="24.4" y="264" textLength="12.2" clip-path="url(#terminal-460130354-line-10)">-</text><text class="terminal-460130354-r5" x="36.6" y="264" textLength="146.4" clip-path="url(#terminal-460130354-line-10)">-integration</text><text class="terminal-460130354-r2" x="353.8" y="264" textLength="1085.8" clip-path="url(#terminal-46013 [...]
-</text><text class="terminal-460130354-r4" x="0" y="288.4" textLength="12.2" clip-path="url(#terminal-460130354-line-11)">│</text><text class="terminal-460130354-r7" x="353.8" y="288.4" textLength="1085.8" clip-path="url(#terminal-460130354-line-11)">(cassandra&#160;|&#160;kerberos&#160;|&#160;mongo&#160;|&#160;openldap&#160;|&#160;pinot&#160;|&#160;rabbitmq&#160;|&#160;redis&#160;|&#160;statsd&#160;|&#160;trino&#160;|&#160;&#160;&#160;</text><text class="terminal-460130354-r4" x="1451.8 [...]
-</text><text class="terminal-460130354-r4" x="0" y="312.8" textLength="12.2" clip-path="url(#terminal-460130354-line-12)">│</text><text class="terminal-460130354-r7" x="353.8" y="312.8" textLength="1085.8" clip-path="url(#terminal-460130354-line-12)">all)&#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-460130354-r4" x="0" y="337.2" textLength="12.2" clip-path="url(#terminal-460130354-line-13)">│</text><text class="terminal-460130354-r5" x="24.4" y="337.2" textLength="12.2" clip-path="url(#terminal-460130354-line-13)">-</text><text class="terminal-460130354-r5" x="36.6" y="337.2" textLength="97.6" clip-path="url(#terminal-460130354-line-13)">-forward</text><text class="terminal-460130354-r5" x="134.2" y="337.2" textLength="146.4" clip-path="url(#terminal-460 [...]
-</text><text class="terminal-460130354-r4" x="0" y="361.6" textLength="12.2" clip-path="url(#terminal-460130354-line-14)">│</text><text class="terminal-460130354-r5" x="24.4" y="361.6" textLength="12.2" clip-path="url(#terminal-460130354-line-14)">-</text><text class="terminal-460130354-r5" x="36.6" y="361.6" textLength="36.6" clip-path="url(#terminal-460130354-line-14)">-db</text><text class="terminal-460130354-r5" x="73.2" y="361.6" textLength="73.2" clip-path="url(#terminal-460130354- [...]
-</text><text class="terminal-460130354-r4" x="0" y="386" textLength="1464" clip-path="url(#terminal-460130354-line-15)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-460130354-r2" x="1464" y="386" textLength="12.2" clip-path="url(#terminal-460130354-line-15)">
-</text><text class="terminal-460130354-r4" x="0" y="410.4" textLength="24.4" clip-path="url(#terminal-460130354-line-16)">╭─</text><text class="terminal-460130354-r4" x="24.4" y="410.4" textLength="1415.2" clip-path="url(#terminal-460130354-line-16)">&#160;Advanced&#160;flags&#160;for&#160;the&#160;default&#160;(shell)&#160;command&#160;────────────────────────────────────────────────────────────────────</text><text class="terminal-460130354-r4" x="1439.6" y="410.4" textLength="24.4" cli [...]
-</text><text class="terminal-460130354-r4" x="0" y="434.8" textLength="12.2" clip-path="url(#terminal-460130354-line-17)">│</text><text class="terminal-460130354-r5" x="24.4" y="434.8" textLength="12.2" clip-path="url(#terminal-460130354-line-17)">-</text><text class="terminal-460130354-r5" x="36.6" y="434.8" textLength="48.8" clip-path="url(#terminal-460130354-line-17)">-use</text><text class="terminal-460130354-r5" x="85.4" y="434.8" textLength="195.2" clip-path="url(#terminal-46013035 [...]
-</text><text class="terminal-460130354-r4" x="0" y="459.2" textLength="12.2" clip-path="url(#terminal-460130354-line-18)">│</text><text class="terminal-460130354-r2" x="366" y="459.2" textLength="1073.6" clip-path="url(#terminal-460130354-line-18)">`sdist`&#160;if&#160;Airflow&#160;should&#160;be&#160;removed,&#160;installed&#160;from&#160;wheel&#160;packages&#160;or&#160;sdist&#160;packages&#160;&#160;&#160;</text><text class="terminal-460130354-r4" x="1451.8" y="459.2" textLength="12.2 [...]
-</text><text class="terminal-460130354-r4" x="0" y="483.6" textLength="12.2" clip-path="url(#terminal-460130354-line-19)">│</text><text class="terminal-460130354-r2" x="366" y="483.6" textLength="573.4" clip-path="url(#terminal-460130354-line-19)">available&#160;in&#160;dist&#160;folder&#160;respectively.&#160;Implies&#160;</text><text class="terminal-460130354-r5" x="939.4" y="483.6" textLength="12.2" clip-path="url(#terminal-460130354-line-19)">-</text><text class="terminal-460130354-r [...]
-</text><text class="terminal-460130354-r4" x="0" y="508" textLength="12.2" clip-path="url(#terminal-460130354-line-20)">│</text><text class="terminal-460130354-r7" x="366" y="508" textLength="1073.6" clip-path="url(#terminal-460130354-line-20)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#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-460130354-r4" x="0" y="532.4" textLength="12.2" clip-path="url(#terminal-460130354-line-21)">│</text><text class="terminal-460130354-r5" x="24.4" y="532.4" textLength="12.2" clip-path="url(#terminal-460130354-line-21)">-</text><text class="terminal-460130354-r5" x="36.6" y="532.4" textLength="97.6" clip-path="url(#terminal-460130354-line-21)">-airflow</text><text class="terminal-460130354-r5" x="134.2" y="532.4" textLength="85.4" clip-path="url(#terminal-4601 [...]
-</text><text class="terminal-460130354-r4" x="0" y="556.8" textLength="12.2" clip-path="url(#terminal-460130354-line-22)">│</text><text class="terminal-460130354-r5" x="24.4" y="556.8" textLength="12.2" clip-path="url(#terminal-460130354-line-22)">-</text><text class="terminal-460130354-r5" x="36.6" y="556.8" textLength="48.8" clip-path="url(#terminal-460130354-line-22)">-use</text><text class="terminal-460130354-r5" x="85.4" y="556.8" textLength="231.8" clip-path="url(#terminal-46013035 [...]
-</text><text class="terminal-460130354-r4" x="0" y="581.2" textLength="12.2" clip-path="url(#terminal-460130354-line-23)">│</text><text class="terminal-460130354-r2" x="366" y="581.2" textLength="1073.6" clip-path="url(#terminal-460130354-line-23)">entering&#160;breeze.&#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-460130354-r4" x="0" y="605.6" textLength="12.2" clip-path="url(#terminal-460130354-line-24)">│</text><text class="terminal-460130354-r5" x="24.4" y="605.6" textLength="12.2" clip-path="url(#terminal-460130354-line-24)">-</text><text class="terminal-460130354-r5" x="36.6" y="605.6" textLength="97.6" clip-path="url(#terminal-460130354-line-24)">-package</text><text class="terminal-460130354-r5" x="134.2" y="605.6" textLength="85.4" clip-path="url(#terminal-4601 [...]
-</text><text class="terminal-460130354-r4" x="0" y="630" textLength="12.2" clip-path="url(#terminal-460130354-line-25)">│</text><text class="terminal-460130354-r5" x="24.4" y="630" textLength="12.2" clip-path="url(#terminal-460130354-line-25)">-</text><text class="terminal-460130354-r5" x="36.6" y="630" textLength="73.2" clip-path="url(#terminal-460130354-line-25)">-force</text><text class="terminal-460130354-r5" x="109.8" y="630" textLength="73.2" clip-path="url(#terminal-460130354-line [...]
-</text><text class="terminal-460130354-r4" x="0" y="654.4" textLength="12.2" clip-path="url(#terminal-460130354-line-26)">│</text><text class="terminal-460130354-r5" x="24.4" y="654.4" textLength="12.2" clip-path="url(#terminal-460130354-line-26)">-</text><text class="terminal-460130354-r5" x="36.6" y="654.4" textLength="73.2" clip-path="url(#terminal-460130354-line-26)">-mount</text><text class="terminal-460130354-r5" x="109.8" y="654.4" textLength="97.6" clip-path="url(#terminal-460130 [...]
-</text><text class="terminal-460130354-r4" x="0" y="678.8" textLength="12.2" clip-path="url(#terminal-460130354-line-27)">│</text><text class="terminal-460130354-r2" x="366" y="678.8" textLength="1073.6" clip-path="url(#terminal-460130354-line-27)">selected).&#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-460130354-r4" x="0" y="703.2" textLength="12.2" clip-path="url(#terminal-460130354-line-28)">│</text><text class="terminal-460130354-r7" x="366" y="703.2" textLength="1073.6" clip-path="url(#terminal-460130354-line-28)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove)&#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-460130354-r4" x="0" y="727.6" textLength="12.2" clip-path="url(#terminal-460130354-line-29)">│</text><text class="terminal-460130354-r4" x="366" y="727.6" textLength="1073.6" clip-path="url(#terminal-460130354-line-29)">[default:&#160;selected]&#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-460130354-r4" x="0" y="752" textLength="12.2" clip-path="url(#terminal-460130354-line-30)">│</text><text class="terminal-460130354-r5" x="24.4" y="752" textLength="12.2" clip-path="url(#terminal-460130354-line-30)">-</text><text class="terminal-460130354-r5" x="36.6" y="752" textLength="85.4" clip-path="url(#terminal-460130354-line-30)">-debian</text><text class="terminal-460130354-r5" x="122" y="752" textLength="97.6" clip-path="url(#terminal-460130354-line- [...]
-</text><text class="terminal-460130354-r4" x="0" y="776.4" textLength="1464" clip-path="url(#terminal-460130354-line-31)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-460130354-r2" x="1464" y="776.4" textLength="12.2" clip-path="url(#terminal-460130354-line-31)">
-</text><text class="terminal-460130354-r4" x="0" y="800.8" textLength="24.4" clip-path="url(#terminal-460130354-line-32)">╭─</text><text class="terminal-460130354-r4" x="24.4" y="800.8" textLength="1415.2" clip-path="url(#terminal-460130354-line-32)">&#160;Options&#160;───────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-460130354-r4" x="1439.6" y="800.8" textLength="24.4" clip-path="url(#terminal-46013035 [...]
-</text><text class="terminal-460130354-r4" x="0" y="825.2" textLength="12.2" clip-path="url(#terminal-460130354-line-33)">│</text><text class="terminal-460130354-r5" x="24.4" y="825.2" textLength="12.2" clip-path="url(#terminal-460130354-line-33)">-</text><text class="terminal-460130354-r5" x="36.6" y="825.2" textLength="97.6" clip-path="url(#terminal-460130354-line-33)">-verbose</text><text class="terminal-460130354-r6" x="280.6" y="825.2" textLength="24.4" clip-path="url(#terminal-4601 [...]
-</text><text class="terminal-460130354-r4" x="0" y="849.6" textLength="12.2" clip-path="url(#terminal-460130354-line-34)">│</text><text class="terminal-460130354-r5" x="24.4" y="849.6" textLength="12.2" clip-path="url(#terminal-460130354-line-34)">-</text><text class="terminal-460130354-r5" x="36.6" y="849.6" textLength="48.8" clip-path="url(#terminal-460130354-line-34)">-dry</text><text class="terminal-460130354-r5" x="85.4" y="849.6" textLength="48.8" clip-path="url(#terminal-460130354 [...]
-</text><text class="terminal-460130354-r4" x="0" y="874" textLength="12.2" clip-path="url(#terminal-460130354-line-35)">│</text><text class="terminal-460130354-r5" x="24.4" y="874" textLength="12.2" clip-path="url(#terminal-460130354-line-35)">-</text><text class="terminal-460130354-r5" x="36.6" y="874" textLength="85.4" clip-path="url(#terminal-460130354-line-35)">-github</text><text class="terminal-460130354-r5" x="122" y="874" textLength="134.2" clip-path="url(#terminal-460130354-line [...]
-</text><text class="terminal-460130354-r4" x="0" y="898.4" textLength="12.2" clip-path="url(#terminal-460130354-line-36)">│</text><text class="terminal-460130354-r5" x="24.4" y="898.4" textLength="12.2" clip-path="url(#terminal-460130354-line-36)">-</text><text class="terminal-460130354-r5" x="36.6" y="898.4" textLength="85.4" clip-path="url(#terminal-460130354-line-36)">-answer</text><text class="terminal-460130354-r6" x="280.6" y="898.4" textLength="24.4" clip-path="url(#terminal-46013 [...]
-</text><text class="terminal-460130354-r4" x="0" y="922.8" textLength="12.2" clip-path="url(#terminal-460130354-line-37)">│</text><text class="terminal-460130354-r5" x="24.4" y="922.8" textLength="12.2" clip-path="url(#terminal-460130354-line-37)">-</text><text class="terminal-460130354-r5" x="36.6" y="922.8" textLength="61" clip-path="url(#terminal-460130354-line-37)">-help</text><text class="terminal-460130354-r6" x="280.6" y="922.8" textLength="24.4" clip-path="url(#terminal-460130354 [...]
-</text><text class="terminal-460130354-r4" x="0" y="947.2" textLength="1464" clip-path="url(#terminal-460130354-line-38)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-460130354-r2" x="1464" y="947.2" textLength="12.2" clip-path="url(#terminal-460130354-line-38)">
-</text><text class="terminal-460130354-r4" x="0" y="971.6" textLength="24.4" clip-path="url(#terminal-460130354-line-39)">╭─</text><text class="terminal-460130354-r4" x="24.4" y="971.6" textLength="1415.2" clip-path="url(#terminal-460130354-line-39)">&#160;Developer&#160;tools&#160;───────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-460130354-r4" x="1439.6" y="971.6" textLength="24.4" clip-path="url(#terminal-460 [...]
-</text><text class="terminal-460130354-r4" x="0" y="996" textLength="12.2" clip-path="url(#terminal-460130354-line-40)">│</text><text class="terminal-460130354-r5" x="24.4" y="996" textLength="183" clip-path="url(#terminal-460130354-line-40)">shell&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="231.8" y="996" textLength="1207.8" clip-path="url(#terminal-460130354-line-40)">Enter&#160;breeze.py&#160;environment.&#160;this&#160;is&# [...]
-</text><text class="terminal-460130354-r4" x="0" y="1020.4" textLength="12.2" clip-path="url(#terminal-460130354-line-41)">│</text><text class="terminal-460130354-r5" x="24.4" y="1020.4" textLength="183" clip-path="url(#terminal-460130354-line-41)">start-airflow&#160;&#160;</text><text class="terminal-460130354-r2" x="231.8" y="1020.4" textLength="1207.8" clip-path="url(#terminal-460130354-line-41)">Enter&#160;breeze.py&#160;environment&#160;and&#160;starts&#160;all&#160;Airflow&#160;com [...]
-</text><text class="terminal-460130354-r4" x="0" y="1044.8" textLength="12.2" clip-path="url(#terminal-460130354-line-42)">│</text><text class="terminal-460130354-r5" x="24.4" y="1044.8" textLength="183" clip-path="url(#terminal-460130354-line-42)">exec&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="231.8" y="1044.8" textLength="1207.8" clip-path="url(#terminal-460130354-line-42)">Joins&#160;the&#160;interactive&#160;shell&# [...]
-</text><text class="terminal-460130354-r4" x="0" y="1069.2" textLength="12.2" clip-path="url(#terminal-460130354-line-43)">│</text><text class="terminal-460130354-r5" x="24.4" y="1069.2" textLength="183" clip-path="url(#terminal-460130354-line-43)">stop&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="231.8" y="1069.2" textLength="1207.8" clip-path="url(#terminal-460130354-line-43)">Stop&#160;running&#160;breeze&#160;environme [...]
-</text><text class="terminal-460130354-r4" x="0" y="1093.6" textLength="12.2" clip-path="url(#terminal-460130354-line-44)">│</text><text class="terminal-460130354-r5" x="24.4" y="1093.6" textLength="183" clip-path="url(#terminal-460130354-line-44)">build-docs&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="231.8" y="1093.6" textLength="1207.8" clip-path="url(#terminal-460130354-line-44)">Build&#160;documentation&#160;in&#160;the&#160;container.&#160;&#160;&#160 [...]
-</text><text class="terminal-460130354-r4" x="0" y="1118" textLength="12.2" clip-path="url(#terminal-460130354-line-45)">│</text><text class="terminal-460130354-r5" x="24.4" y="1118" textLength="183" clip-path="url(#terminal-460130354-line-45)">static-checks&#160;&#160;</text><text class="terminal-460130354-r2" x="231.8" y="1118" textLength="1207.8" clip-path="url(#terminal-460130354-line-45)">Run&#160;static&#160;checks.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="terminal-460130354-r4" x="0" y="1142.4" textLength="1464" clip-path="url(#terminal-460130354-line-46)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-460130354-r2" x="1464" y="1142.4" textLength="12.2" clip-path="url(#terminal-460130354-line-46)">
-</text><text class="terminal-460130354-r4" x="0" y="1166.8" textLength="24.4" clip-path="url(#terminal-460130354-line-47)">╭─</text><text class="terminal-460130354-r4" x="24.4" y="1166.8" textLength="1415.2" clip-path="url(#terminal-460130354-line-47)">&#160;Testing&#160;───────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-460130354-r4" x="1439.6" y="1166.8" textLength="24.4" clip-path="url(#terminal-46013 [...]
-</text><text class="terminal-460130354-r4" x="0" y="1191.2" textLength="12.2" clip-path="url(#terminal-460130354-line-48)">│</text><text class="terminal-460130354-r5" x="24.4" y="1191.2" textLength="256.2" clip-path="url(#terminal-460130354-line-48)">docker-compose-tests&#160;</text><text class="terminal-460130354-r2" x="305" y="1191.2" textLength="1134.6" clip-path="url(#terminal-460130354-line-48)">Run&#160;docker-compose&#160;tests.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="terminal-460130354-r4" x="0" y="1215.6" textLength="12.2" clip-path="url(#terminal-460130354-line-49)">│</text><text class="terminal-460130354-r5" x="24.4" y="1215.6" textLength="256.2" clip-path="url(#terminal-460130354-line-49)">tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="305" y="1215.6" textLength="1134.6" clip-path="url(#terminal-460130354-line-49)">Run&#160;the& [...]
-</text><text class="terminal-460130354-r4" x="0" y="1240" textLength="1464" clip-path="url(#terminal-460130354-line-50)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-460130354-r2" x="1464" y="1240" textLength="12.2" clip-path="url(#terminal-460130354-line-50)">
-</text><text class="terminal-460130354-r4" x="0" y="1264.4" textLength="24.4" clip-path="url(#terminal-460130354-line-51)">╭─</text><text class="terminal-460130354-r4" x="24.4" y="1264.4" textLength="1415.2" clip-path="url(#terminal-460130354-line-51)">&#160;Configuration&#160;&amp;&#160;maintenance&#160;───────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-460130354-r4" x="1439.6" y="1264.4" textLength="24.4" clip-path="url(# [...]
-</text><text class="terminal-460130354-r4" x="0" y="1288.8" textLength="12.2" clip-path="url(#terminal-460130354-line-52)">│</text><text class="terminal-460130354-r5" x="24.4" y="1288.8" textLength="305" clip-path="url(#terminal-460130354-line-52)">cleanup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="353.8" y="1288.8" textLength="1085.8" clip-path="url(#terminal-460130354-line-52)" [...]
-</text><text class="terminal-460130354-r4" x="0" y="1313.2" textLength="12.2" clip-path="url(#terminal-460130354-line-53)">│</text><text class="terminal-460130354-r2" x="353.8" y="1313.2" textLength="1085.8" clip-path="url(#terminal-460130354-line-53)">images.&#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;&#16 [...]
-</text><text class="terminal-460130354-r4" x="0" y="1337.6" textLength="12.2" clip-path="url(#terminal-460130354-line-54)">│</text><text class="terminal-460130354-r5" x="24.4" y="1337.6" textLength="305" clip-path="url(#terminal-460130354-line-54)">self-upgrade&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="353.8" y="1337.6" textLength="1085.8" clip-path="url(#terminal-460130354-line-54)">Self&#160;upgrade&#160;B [...]
-</text><text class="terminal-460130354-r4" x="0" y="1362" textLength="12.2" clip-path="url(#terminal-460130354-line-55)">│</text><text class="terminal-460130354-r5" x="24.4" y="1362" textLength="305" clip-path="url(#terminal-460130354-line-55)">setup-autocomplete&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="353.8" y="1362" textLength="1085.8" clip-path="url(#terminal-460130354-line-55)">Enables&#160;autocompletion&#160;of&#160;breeze&#160;command [...]
-</text><text class="terminal-460130354-r4" x="0" y="1386.4" textLength="12.2" clip-path="url(#terminal-460130354-line-56)">│</text><text class="terminal-460130354-r5" x="24.4" y="1386.4" textLength="305" clip-path="url(#terminal-460130354-line-56)">config&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="353.8" y="1386.4" textLength="1085.8" clip-path="url(#terminal-460130354-line [...]
-</text><text class="terminal-460130354-r4" x="0" y="1410.8" textLength="12.2" clip-path="url(#terminal-460130354-line-57)">│</text><text class="terminal-460130354-r5" x="24.4" y="1410.8" textLength="305" clip-path="url(#terminal-460130354-line-57)">regenerate-command-images</text><text class="terminal-460130354-r2" x="353.8" y="1410.8" textLength="1085.8" clip-path="url(#terminal-460130354-line-57)">Regenerate&#160;breeze&#160;command&#160;images.&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="terminal-460130354-r4" x="0" y="1435.2" textLength="12.2" clip-path="url(#terminal-460130354-line-58)">│</text><text class="terminal-460130354-r5" x="24.4" y="1435.2" textLength="305" clip-path="url(#terminal-460130354-line-58)">command-hash-export&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="353.8" y="1435.2" textLength="1085.8" clip-path="url(#terminal-460130354-line-58)">Outputs&#160;hash&#160;of&#160;all&#160;click&#160;commands [...]
-</text><text class="terminal-460130354-r4" x="0" y="1459.6" textLength="12.2" clip-path="url(#terminal-460130354-line-59)">│</text><text class="terminal-460130354-r2" x="353.8" y="1459.6" textLength="1085.8" clip-path="url(#terminal-460130354-line-59)">images&#160;should&#160;be&#160;regenerated).&#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-460130354-r4" x="0" y="1484" textLength="12.2" clip-path="url(#terminal-460130354-line-60)">│</text><text class="terminal-460130354-r5" x="24.4" y="1484" textLength="305" clip-path="url(#terminal-460130354-line-60)">version&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="353.8" y="1484" textLength="1085.8" clip-path="url(#terminal-460130354-line-60)">Print [...]
-</text><text class="terminal-460130354-r4" x="0" y="1508.4" textLength="1464" clip-path="url(#terminal-460130354-line-61)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-460130354-r2" x="1464" y="1508.4" textLength="12.2" clip-path="url(#terminal-460130354-line-61)">
-</text><text class="terminal-460130354-r4" x="0" y="1532.8" textLength="24.4" clip-path="url(#terminal-460130354-line-62)">╭─</text><text class="terminal-460130354-r4" x="24.4" y="1532.8" textLength="1415.2" clip-path="url(#terminal-460130354-line-62)">&#160;CI&#160;Image&#160;tools&#160;────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-460130354-r4" x="1439.6" y="1532.8" textLength="24.4" clip-path="url(#term [...]
-</text><text class="terminal-460130354-r4" x="0" y="1557.2" textLength="12.2" clip-path="url(#terminal-460130354-line-63)">│</text><text class="terminal-460130354-r5" x="24.4" y="1557.2" textLength="170.8" clip-path="url(#terminal-460130354-line-63)">build-image&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="219.6" y="1557.2" textLength="1220" clip-path="url(#terminal-460130354-line-63)">Build&#160;CI&#160;image.&#160;Include&#160;building&#160;multiple&#160;images&#160;f [...]
-</text><text class="terminal-460130354-r4" x="0" y="1581.6" textLength="12.2" clip-path="url(#terminal-460130354-line-64)">│</text><text class="terminal-460130354-r5" x="24.4" y="1581.6" textLength="170.8" clip-path="url(#terminal-460130354-line-64)">pull-image&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="219.6" y="1581.6" textLength="1220" clip-path="url(#terminal-460130354-line-64)">Pull&#160;and&#160;optionally&#160;verify&#160;CI&#160;images&#160;-&#160;possib [...]
-</text><text class="terminal-460130354-r4" x="0" y="1606" textLength="12.2" clip-path="url(#terminal-460130354-line-65)">│</text><text class="terminal-460130354-r5" x="24.4" y="1606" textLength="170.8" clip-path="url(#terminal-460130354-line-65)">verify-image&#160;&#160;</text><text class="terminal-460130354-r2" x="219.6" y="1606" textLength="1220" clip-path="url(#terminal-460130354-line-65)">Verify&#160;CI&#160;image.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="terminal-460130354-r4" x="0" y="1630.4" textLength="1464" clip-path="url(#terminal-460130354-line-66)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-460130354-r2" x="1464" y="1630.4" textLength="12.2" clip-path="url(#terminal-460130354-line-66)">
-</text><text class="terminal-460130354-r4" x="0" y="1654.8" textLength="24.4" clip-path="url(#terminal-460130354-line-67)">╭─</text><text class="terminal-460130354-r4" x="24.4" y="1654.8" textLength="1415.2" clip-path="url(#terminal-460130354-line-67)">&#160;Production&#160;Image&#160;tools&#160;────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-460130354-r4" x="1439.6" y="1654.8" textLength="24.4" clip-path="url(#term [...]
-</text><text class="terminal-460130354-r4" x="0" y="1679.2" textLength="12.2" clip-path="url(#terminal-460130354-line-68)">│</text><text class="terminal-460130354-r5" x="24.4" y="1679.2" textLength="207.4" clip-path="url(#terminal-460130354-line-68)">build-prod-image&#160;</text><text class="terminal-460130354-r2" x="256.2" y="1679.2" textLength="1183.4" clip-path="url(#terminal-460130354-line-68)">Build&#160;Production&#160;image.&#160;Include&#160;building&#160;multiple&#160;images&#16 [...]
-</text><text class="terminal-460130354-r4" x="0" y="1703.6" textLength="12.2" clip-path="url(#terminal-460130354-line-69)">│</text><text class="terminal-460130354-r2" x="256.2" y="1703.6" textLength="1183.4" clip-path="url(#terminal-460130354-line-69)">sequentially.&#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;&#16 [...]
-</text><text class="terminal-460130354-r4" x="0" y="1728" textLength="12.2" clip-path="url(#terminal-460130354-line-70)">│</text><text class="terminal-460130354-r5" x="24.4" y="1728" textLength="207.4" clip-path="url(#terminal-460130354-line-70)">pull-prod-image&#160;&#160;</text><text class="terminal-460130354-r2" x="256.2" y="1728" textLength="1183.4" clip-path="url(#terminal-460130354-line-70)">Pull&#160;and&#160;optionally&#160;verify&#160;Production&#160;images&#160;-&#160;possibly& [...]
-</text><text class="terminal-460130354-r4" x="0" y="1752.4" textLength="12.2" clip-path="url(#terminal-460130354-line-71)">│</text><text class="terminal-460130354-r5" x="24.4" y="1752.4" textLength="207.4" clip-path="url(#terminal-460130354-line-71)">verify-prod-image</text><text class="terminal-460130354-r2" x="256.2" y="1752.4" textLength="1183.4" clip-path="url(#terminal-460130354-line-71)">Verify&#160;Production&#160;image.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="terminal-460130354-r4" x="0" y="1776.8" textLength="1464" clip-path="url(#terminal-460130354-line-72)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-460130354-r2" x="1464" y="1776.8" textLength="12.2" clip-path="url(#terminal-460130354-line-72)">
-</text><text class="terminal-460130354-r4" x="0" y="1801.2" textLength="24.4" clip-path="url(#terminal-460130354-line-73)">╭─</text><text class="terminal-460130354-r4" x="24.4" y="1801.2" textLength="1415.2" clip-path="url(#terminal-460130354-line-73)">&#160;CI&#160;commands&#160;───────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-460130354-r4" x="1439.6" y="1801.2" textLength="24.4" clip-path="url(#terminal- [...]
-</text><text class="terminal-460130354-r4" x="0" y="1825.6" textLength="12.2" clip-path="url(#terminal-460130354-line-74)">│</text><text class="terminal-460130354-r5" x="24.4" y="1825.6" textLength="378.2" clip-path="url(#terminal-460130354-line-74)">fix-ownership&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="427" y="1825.6" textLength="1012.6" clip-path="url(#terminal-460130354-lin [...]
-</text><text class="terminal-460130354-r4" x="0" y="1850" textLength="12.2" clip-path="url(#terminal-460130354-line-75)">│</text><text class="terminal-460130354-r5" x="24.4" y="1850" textLength="378.2" clip-path="url(#terminal-460130354-line-75)">free-space&#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-460130354-r2" x="427" y="1850" textLength="1012.6" clip-path="url(#terminal-4601 [...]
-</text><text class="terminal-460130354-r4" x="0" y="1874.4" textLength="12.2" clip-path="url(#terminal-460130354-line-76)">│</text><text class="terminal-460130354-r5" x="24.4" y="1874.4" textLength="378.2" clip-path="url(#terminal-460130354-line-76)">resource-check&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="427" y="1874.4" textLength="1012.6" clip-path="url(#terminal-460130354-line-76) [...]
-</text><text class="terminal-460130354-r4" x="0" y="1898.8" textLength="12.2" clip-path="url(#terminal-460130354-line-77)">│</text><text class="terminal-460130354-r5" x="24.4" y="1898.8" textLength="378.2" clip-path="url(#terminal-460130354-line-77)">selective-check&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="427" y="1898.8" textLength="1012.6" clip-path="url(#terminal-460130354-line-77)">Che [...]
-</text><text class="terminal-460130354-r4" x="0" y="1923.2" textLength="12.2" clip-path="url(#terminal-460130354-line-78)">│</text><text class="terminal-460130354-r5" x="24.4" y="1923.2" textLength="378.2" clip-path="url(#terminal-460130354-line-78)">find-newer-dependencies&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="427" y="1923.2" textLength="1012.6" clip-path="url(#terminal-460130354-line-78)">Finds&#160;which&#160;dependencies&#160;are [...]
-</text><text class="terminal-460130354-r4" x="0" y="1947.6" textLength="1464" clip-path="url(#terminal-460130354-line-79)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-460130354-r2" x="1464" y="1947.6" textLength="12.2" clip-path="url(#terminal-460130354-line-79)">
-</text><text class="terminal-460130354-r4" x="0" y="1972" textLength="24.4" clip-path="url(#terminal-460130354-line-80)">╭─</text><text class="terminal-460130354-r4" x="24.4" y="1972" textLength="1415.2" clip-path="url(#terminal-460130354-line-80)">&#160;Release&#160;management&#160;────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-460130354-r4" x="1439.6" y="1972" textLength="24.4" clip-path="url(#terminal-460130 [...]
-</text><text class="terminal-460130354-r4" x="0" y="1996.4" textLength="12.2" clip-path="url(#terminal-460130354-line-81)">│</text><text class="terminal-460130354-r5" x="24.4" y="1996.4" textLength="402.6" clip-path="url(#terminal-460130354-line-81)">verify-provider-packages&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="451.4" y="1996.4" textLength="988.2" clip-path="url(#terminal-460130354-line-81)">Verifies&#160;if&#160;all&#160;prov [...]
-</text><text class="terminal-460130354-r4" x="0" y="2020.8" textLength="12.2" clip-path="url(#terminal-460130354-line-82)">│</text><text class="terminal-460130354-r5" x="24.4" y="2020.8" textLength="402.6" clip-path="url(#terminal-460130354-line-82)">prepare-provider-documentation&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="451.4" y="2020.8" textLength="988.2" clip-path="url(#terminal-460130354-line-82)">Prepare&#160;CHANGELOG,&#160;README&#160;and&#160;COMMITS&#160;in [...]
-</text><text class="terminal-460130354-r4" x="0" y="2045.2" textLength="12.2" clip-path="url(#terminal-460130354-line-83)">│</text><text class="terminal-460130354-r5" x="24.4" y="2045.2" textLength="402.6" clip-path="url(#terminal-460130354-line-83)">prepare-provider-packages&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="451.4" y="2045.2" textLength="988.2" clip-path="url(#terminal-460130354-line-83)">Prepare&#160;sdist/whl&#160;packages&#16 [...]
-</text><text class="terminal-460130354-r4" x="0" y="2069.6" textLength="12.2" clip-path="url(#terminal-460130354-line-84)">│</text><text class="terminal-460130354-r5" x="24.4" y="2069.6" textLength="402.6" clip-path="url(#terminal-460130354-line-84)">prepare-airflow-package&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="451.4" y="2069.6" textLength="988.2" clip-path="url(#terminal-460130354-line-84)">Prepare&#160;sdist/whl&#160;pa [...]
-</text><text class="terminal-460130354-r4" x="0" y="2094" textLength="12.2" clip-path="url(#terminal-460130354-line-85)">│</text><text class="terminal-460130354-r5" x="24.4" y="2094" textLength="402.6" clip-path="url(#terminal-460130354-line-85)">release-prod-images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="451.4" y="2094" textLength="988.2" clip-path="url(#terminal-460130354-line-85)">Release&#160;pro [...]
-</text><text class="terminal-460130354-r4" x="0" y="2118.4" textLength="12.2" clip-path="url(#terminal-460130354-line-86)">│</text><text class="terminal-460130354-r5" x="24.4" y="2118.4" textLength="402.6" clip-path="url(#terminal-460130354-line-86)">generate-constraints&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-460130354-r2" x="451.4" y="2118.4" textLength="988.2" clip-path="url(#terminal-460130354-line-86)">Generates&#160; [...]
-</text><text class="terminal-460130354-r4" x="0" y="2142.8" textLength="1464" clip-path="url(#terminal-460130354-line-87)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-460130354-r2" x="1464" y="2142.8" textLength="12.2" clip-path="url(#terminal-460130354-line-87)">
+    <g class="terminal-4069008649-matrix">
+    <text class="terminal-4069008649-r2" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-4069008649-line-0)">
+</text><text class="terminal-4069008649-r3" x="12.2" y="44.4" textLength="85.4" clip-path="url(#terminal-4069008649-line-1)">Usage:&#160;</text><text class="terminal-4069008649-r1" x="97.6" y="44.4" textLength="414.8" clip-path="url(#terminal-4069008649-line-1)">breeze&#160;[OPTIONS]&#160;COMMAND&#160;[ARGS]...</text><text class="terminal-4069008649-r2" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-1)">
+</text><text class="terminal-4069008649-r2" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-2)">
+</text><text class="terminal-4069008649-r4" x="0" y="93.2" textLength="24.4" clip-path="url(#terminal-4069008649-line-3)">╭─</text><text class="terminal-4069008649-r4" x="24.4" y="93.2" textLength="1415.2" clip-path="url(#terminal-4069008649-line-3)">&#160;Basic&#160;flags&#160;for&#160;the&#160;default&#160;(shell)&#160;command&#160;───────────────────────────────────────────────────────────────────────</text><text class="terminal-4069008649-r4" x="1439.6" y="93.2" textLength="24.4" cli [...]
+</text><text class="terminal-4069008649-r4" x="0" y="117.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-4)">│</text><text class="terminal-4069008649-r5" x="24.4" y="117.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-4)">-</text><text class="terminal-4069008649-r5" x="36.6" y="117.6" textLength="85.4" clip-path="url(#terminal-4069008649-line-4)">-python</text><text class="terminal-4069008649-r6" x="305" y="117.6" textLength="24.4" clip-path="url(#terminal-406 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="142" textLength="12.2" clip-path="url(#terminal-4069008649-line-5)">│</text><text class="terminal-4069008649-r4" x="353.8" y="142" textLength="732" clip-path="url(#terminal-4069008649-line-5)">[default:&#160;3.7]&#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-4069008649-r4" x="0" y="166.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-6)">│</text><text class="terminal-4069008649-r5" x="24.4" y="166.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-6)">-</text><text class="terminal-4069008649-r5" x="36.6" y="166.4" textLength="97.6" clip-path="url(#terminal-4069008649-line-6)">-backend</text><text class="terminal-4069008649-r6" x="305" y="166.4" textLength="24.4" clip-path="url(#terminal-40 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="190.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-7)">│</text><text class="terminal-4069008649-r5" x="24.4" y="190.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-7)">-</text><text class="terminal-4069008649-r5" x="36.6" y="190.8" textLength="109.8" clip-path="url(#terminal-4069008649-line-7)">-postgres</text><text class="terminal-4069008649-r5" x="146.4" y="190.8" textLength="97.6" clip-path="url(#termina [...]
+</text><text class="terminal-4069008649-r4" x="0" y="215.2" textLength="12.2" clip-path="url(#terminal-4069008649-line-8)">│</text><text class="terminal-4069008649-r5" x="24.4" y="215.2" textLength="12.2" clip-path="url(#terminal-4069008649-line-8)">-</text><text class="terminal-4069008649-r5" x="36.6" y="215.2" textLength="73.2" clip-path="url(#terminal-4069008649-line-8)">-mysql</text><text class="terminal-4069008649-r5" x="109.8" y="215.2" textLength="97.6" clip-path="url(#terminal-40 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="239.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-9)">│</text><text class="terminal-4069008649-r5" x="24.4" y="239.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-9)">-</text><text class="terminal-4069008649-r5" x="36.6" y="239.6" textLength="73.2" clip-path="url(#terminal-4069008649-line-9)">-mssql</text><text class="terminal-4069008649-r5" x="109.8" y="239.6" textLength="97.6" clip-path="url(#terminal-40 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="264" textLength="12.2" clip-path="url(#terminal-4069008649-line-10)">│</text><text class="terminal-4069008649-r5" x="24.4" y="264" textLength="12.2" clip-path="url(#terminal-4069008649-line-10)">-</text><text class="terminal-4069008649-r5" x="36.6" y="264" textLength="146.4" clip-path="url(#terminal-4069008649-line-10)">-integration</text><text class="terminal-4069008649-r2" x="353.8" y="264" textLength="1085.8" clip-path="url(#termina [...]
+</text><text class="terminal-4069008649-r4" x="0" y="288.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-11)">│</text><text class="terminal-4069008649-r7" x="353.8" y="288.4" textLength="1085.8" clip-path="url(#terminal-4069008649-line-11)">(cassandra&#160;|&#160;kerberos&#160;|&#160;mongo&#160;|&#160;openldap&#160;|&#160;pinot&#160;|&#160;rabbitmq&#160;|&#160;redis&#160;|&#160;statsd&#160;|&#160;trino&#160;|&#160;&#160;&#160;</text><text class="terminal-4069008649-r4" x="1 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="312.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-12)">│</text><text class="terminal-4069008649-r7" x="353.8" y="312.8" textLength="1085.8" clip-path="url(#terminal-4069008649-line-12)">all)&#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-4069008649-r4" x="0" y="337.2" textLength="12.2" clip-path="url(#terminal-4069008649-line-13)">│</text><text class="terminal-4069008649-r5" x="24.4" y="337.2" textLength="12.2" clip-path="url(#terminal-4069008649-line-13)">-</text><text class="terminal-4069008649-r5" x="36.6" y="337.2" textLength="97.6" clip-path="url(#terminal-4069008649-line-13)">-forward</text><text class="terminal-4069008649-r5" x="134.2" y="337.2" textLength="146.4" clip-path="url(#termi [...]
+</text><text class="terminal-4069008649-r4" x="0" y="361.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-14)">│</text><text class="terminal-4069008649-r5" x="24.4" y="361.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-14)">-</text><text class="terminal-4069008649-r5" x="36.6" y="361.6" textLength="36.6" clip-path="url(#terminal-4069008649-line-14)">-db</text><text class="terminal-4069008649-r5" x="73.2" y="361.6" textLength="73.2" clip-path="url(#terminal-406 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="386" textLength="1464" clip-path="url(#terminal-4069008649-line-15)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-4069008649-r2" x="1464" y="386" textLength="12.2" clip-path="url(#terminal-4069008649-line-15)">
+</text><text class="terminal-4069008649-r4" x="0" y="410.4" textLength="24.4" clip-path="url(#terminal-4069008649-line-16)">╭─</text><text class="terminal-4069008649-r4" x="24.4" y="410.4" textLength="1415.2" clip-path="url(#terminal-4069008649-line-16)">&#160;Advanced&#160;flags&#160;for&#160;the&#160;default&#160;(shell)&#160;command&#160;────────────────────────────────────────────────────────────────────</text><text class="terminal-4069008649-r4" x="1439.6" y="410.4" textLength="24.4 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="434.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-17)">│</text><text class="terminal-4069008649-r5" x="24.4" y="434.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-17)">-</text><text class="terminal-4069008649-r5" x="36.6" y="434.8" textLength="48.8" clip-path="url(#terminal-4069008649-line-17)">-use</text><text class="terminal-4069008649-r5" x="85.4" y="434.8" textLength="195.2" clip-path="url(#terminal-4 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="459.2" textLength="12.2" clip-path="url(#terminal-4069008649-line-18)">│</text><text class="terminal-4069008649-r2" x="366" y="459.2" textLength="1073.6" clip-path="url(#terminal-4069008649-line-18)">`sdist`&#160;if&#160;Airflow&#160;should&#160;be&#160;removed,&#160;installed&#160;from&#160;wheel&#160;packages&#160;or&#160;sdist&#160;packages&#160;&#160;&#160;</text><text class="terminal-4069008649-r4" x="1451.8" y="459.2" textLength= [...]
+</text><text class="terminal-4069008649-r4" x="0" y="483.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-19)">│</text><text class="terminal-4069008649-r2" x="366" y="483.6" textLength="573.4" clip-path="url(#terminal-4069008649-line-19)">available&#160;in&#160;dist&#160;folder&#160;respectively.&#160;Implies&#160;</text><text class="terminal-4069008649-r5" x="939.4" y="483.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-19)">-</text><text class="terminal-40690 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="508" textLength="12.2" clip-path="url(#terminal-4069008649-line-20)">│</text><text class="terminal-4069008649-r7" x="366" y="508" textLength="1073.6" clip-path="url(#terminal-4069008649-line-20)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#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-4069008649-r4" x="0" y="532.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-21)">│</text><text class="terminal-4069008649-r5" x="24.4" y="532.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-21)">-</text><text class="terminal-4069008649-r5" x="36.6" y="532.4" textLength="97.6" clip-path="url(#terminal-4069008649-line-21)">-airflow</text><text class="terminal-4069008649-r5" x="134.2" y="532.4" textLength="85.4" clip-path="url(#termin [...]
+</text><text class="terminal-4069008649-r4" x="0" y="556.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-22)">│</text><text class="terminal-4069008649-r5" x="24.4" y="556.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-22)">-</text><text class="terminal-4069008649-r5" x="36.6" y="556.8" textLength="48.8" clip-path="url(#terminal-4069008649-line-22)">-use</text><text class="terminal-4069008649-r5" x="85.4" y="556.8" textLength="231.8" clip-path="url(#terminal-4 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="581.2" textLength="12.2" clip-path="url(#terminal-4069008649-line-23)">│</text><text class="terminal-4069008649-r2" x="366" y="581.2" textLength="1073.6" clip-path="url(#terminal-4069008649-line-23)">entering&#160;breeze.&#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-4069008649-r4" x="0" y="605.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-24)">│</text><text class="terminal-4069008649-r5" x="24.4" y="605.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-24)">-</text><text class="terminal-4069008649-r5" x="36.6" y="605.6" textLength="97.6" clip-path="url(#terminal-4069008649-line-24)">-package</text><text class="terminal-4069008649-r5" x="134.2" y="605.6" textLength="85.4" clip-path="url(#termin [...]
+</text><text class="terminal-4069008649-r4" x="0" y="630" textLength="12.2" clip-path="url(#terminal-4069008649-line-25)">│</text><text class="terminal-4069008649-r5" x="24.4" y="630" textLength="12.2" clip-path="url(#terminal-4069008649-line-25)">-</text><text class="terminal-4069008649-r5" x="36.6" y="630" textLength="73.2" clip-path="url(#terminal-4069008649-line-25)">-force</text><text class="terminal-4069008649-r5" x="109.8" y="630" textLength="73.2" clip-path="url(#terminal-4069008 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="654.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-26)">│</text><text class="terminal-4069008649-r5" x="24.4" y="654.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-26)">-</text><text class="terminal-4069008649-r5" x="36.6" y="654.4" textLength="73.2" clip-path="url(#terminal-4069008649-line-26)">-mount</text><text class="terminal-4069008649-r5" x="109.8" y="654.4" textLength="97.6" clip-path="url(#terminal [...]
+</text><text class="terminal-4069008649-r4" x="0" y="678.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-27)">│</text><text class="terminal-4069008649-r2" x="366" y="678.8" textLength="1073.6" clip-path="url(#terminal-4069008649-line-27)">selected).&#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-4069008649-r4" x="0" y="703.2" textLength="12.2" clip-path="url(#terminal-4069008649-line-28)">│</text><text class="terminal-4069008649-r7" x="366" y="703.2" textLength="1073.6" clip-path="url(#terminal-4069008649-line-28)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove)&#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-4069008649-r4" x="0" y="727.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-29)">│</text><text class="terminal-4069008649-r4" x="366" y="727.6" textLength="1073.6" clip-path="url(#terminal-4069008649-line-29)">[default:&#160;selected]&#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-4069008649-r4" x="0" y="752" textLength="12.2" clip-path="url(#terminal-4069008649-line-30)">│</text><text class="terminal-4069008649-r5" x="24.4" y="752" textLength="12.2" clip-path="url(#terminal-4069008649-line-30)">-</text><text class="terminal-4069008649-r5" x="36.6" y="752" textLength="85.4" clip-path="url(#terminal-4069008649-line-30)">-debian</text><text class="terminal-4069008649-r5" x="122" y="752" textLength="97.6" clip-path="url(#terminal-40690086 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="776.4" textLength="1464" clip-path="url(#terminal-4069008649-line-31)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-4069008649-r2" x="1464" y="776.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-31)">
+</text><text class="terminal-4069008649-r4" x="0" y="800.8" textLength="24.4" clip-path="url(#terminal-4069008649-line-32)">╭─</text><text class="terminal-4069008649-r4" x="24.4" y="800.8" textLength="1415.2" clip-path="url(#terminal-4069008649-line-32)">&#160;Options&#160;───────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-4069008649-r4" x="1439.6" y="800.8" textLength="24.4" clip-path="url(#terminal-406 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="825.2" textLength="12.2" clip-path="url(#terminal-4069008649-line-33)">│</text><text class="terminal-4069008649-r5" x="24.4" y="825.2" textLength="12.2" clip-path="url(#terminal-4069008649-line-33)">-</text><text class="terminal-4069008649-r5" x="36.6" y="825.2" textLength="97.6" clip-path="url(#terminal-4069008649-line-33)">-verbose</text><text class="terminal-4069008649-r6" x="280.6" y="825.2" textLength="24.4" clip-path="url(#termin [...]
+</text><text class="terminal-4069008649-r4" x="0" y="849.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-34)">│</text><text class="terminal-4069008649-r5" x="24.4" y="849.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-34)">-</text><text class="terminal-4069008649-r5" x="36.6" y="849.6" textLength="48.8" clip-path="url(#terminal-4069008649-line-34)">-dry</text><text class="terminal-4069008649-r5" x="85.4" y="849.6" textLength="48.8" clip-path="url(#terminal-40 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="874" textLength="12.2" clip-path="url(#terminal-4069008649-line-35)">│</text><text class="terminal-4069008649-r5" x="24.4" y="874" textLength="12.2" clip-path="url(#terminal-4069008649-line-35)">-</text><text class="terminal-4069008649-r5" x="36.6" y="874" textLength="85.4" clip-path="url(#terminal-4069008649-line-35)">-github</text><text class="terminal-4069008649-r5" x="122" y="874" textLength="134.2" clip-path="url(#terminal-4069008 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="898.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-36)">│</text><text class="terminal-4069008649-r5" x="24.4" y="898.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-36)">-</text><text class="terminal-4069008649-r5" x="36.6" y="898.4" textLength="85.4" clip-path="url(#terminal-4069008649-line-36)">-answer</text><text class="terminal-4069008649-r6" x="280.6" y="898.4" textLength="24.4" clip-path="url(#termina [...]
+</text><text class="terminal-4069008649-r4" x="0" y="922.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-37)">│</text><text class="terminal-4069008649-r5" x="24.4" y="922.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-37)">-</text><text class="terminal-4069008649-r5" x="36.6" y="922.8" textLength="61" clip-path="url(#terminal-4069008649-line-37)">-help</text><text class="terminal-4069008649-r6" x="280.6" y="922.8" textLength="24.4" clip-path="url(#terminal-40 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="947.2" textLength="1464" clip-path="url(#terminal-4069008649-line-38)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-4069008649-r2" x="1464" y="947.2" textLength="12.2" clip-path="url(#terminal-4069008649-line-38)">
+</text><text class="terminal-4069008649-r4" x="0" y="971.6" textLength="24.4" clip-path="url(#terminal-4069008649-line-39)">╭─</text><text class="terminal-4069008649-r4" x="24.4" y="971.6" textLength="1415.2" clip-path="url(#terminal-4069008649-line-39)">&#160;Developer&#160;tools&#160;───────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-4069008649-r4" x="1439.6" y="971.6" textLength="24.4" clip-path="url(#termina [...]
+</text><text class="terminal-4069008649-r4" x="0" y="996" textLength="12.2" clip-path="url(#terminal-4069008649-line-40)">│</text><text class="terminal-4069008649-r5" x="24.4" y="996" textLength="244" clip-path="url(#terminal-4069008649-line-40)">shell&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="292.8" y="996" textLength="1146.8" clip-path="url(#terminal-4069008649-line-40)">Enter&#160;breeze.py&# [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1020.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-41)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1020.4" textLength="244" clip-path="url(#terminal-4069008649-line-41)">start-airflow&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="292.8" y="1020.4" textLength="1146.8" clip-path="url(#terminal-4069008649-line-41)">Enter&#160;breeze.py&#160;environment&#160;and&#160;s [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1044.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-42)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1044.8" textLength="244" clip-path="url(#terminal-4069008649-line-42)">compile-www-assets&#160;&#160;</text><text class="terminal-4069008649-r2" x="292.8" y="1044.8" textLength="1146.8" clip-path="url(#terminal-4069008649-line-42)">Compiles&#160;www&#160;assets.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1069.2" textLength="12.2" clip-path="url(#terminal-4069008649-line-43)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1069.2" textLength="244" clip-path="url(#terminal-4069008649-line-43)">exec&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="292.8" y="1069.2" textLength="1146.8" clip-path="url(#terminal-4069008649-line-43)">Joins&#1 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1093.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-44)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1093.6" textLength="244" clip-path="url(#terminal-4069008649-line-44)">stop&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="292.8" y="1093.6" textLength="1146.8" clip-path="url(#terminal-4069008649-line-44)">Stop&#16 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1118" textLength="12.2" clip-path="url(#terminal-4069008649-line-45)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1118" textLength="244" clip-path="url(#terminal-4069008649-line-45)">build-docs&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="292.8" y="1118" textLength="1146.8" clip-path="url(#terminal-4069008649-line-45)">Build&#160;documentation&#160;in&#160;the&#1 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1142.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-46)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1142.4" textLength="244" clip-path="url(#terminal-4069008649-line-46)">static-checks&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="292.8" y="1142.4" textLength="1146.8" clip-path="url(#terminal-4069008649-line-46)">Run&#160;static&#160;checks.&#160;&#160;&#160;&#160;& [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1166.8" textLength="1464" clip-path="url(#terminal-4069008649-line-47)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-4069008649-r2" x="1464" y="1166.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-47)">
+</text><text class="terminal-4069008649-r4" x="0" y="1191.2" textLength="24.4" clip-path="url(#terminal-4069008649-line-48)">╭─</text><text class="terminal-4069008649-r4" x="24.4" y="1191.2" textLength="1415.2" clip-path="url(#terminal-4069008649-line-48)">&#160;Testing&#160;───────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-4069008649-r4" x="1439.6" y="1191.2" textLength="24.4" clip-path="url(#terminal- [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1215.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-49)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1215.6" textLength="256.2" clip-path="url(#terminal-4069008649-line-49)">docker-compose-tests&#160;</text><text class="terminal-4069008649-r2" x="305" y="1215.6" textLength="1134.6" clip-path="url(#terminal-4069008649-line-49)">Run&#160;docker-compose&#160;tests.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1240" textLength="12.2" clip-path="url(#terminal-4069008649-line-50)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1240" textLength="256.2" clip-path="url(#terminal-4069008649-line-50)">tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="305" y="1240" textLength="1134.6" clip-path="url(#terminal-4069008649-line-50)">Run&#160;the& [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1264.4" textLength="1464" clip-path="url(#terminal-4069008649-line-51)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-4069008649-r2" x="1464" y="1264.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-51)">
+</text><text class="terminal-4069008649-r4" x="0" y="1288.8" textLength="24.4" clip-path="url(#terminal-4069008649-line-52)">╭─</text><text class="terminal-4069008649-r4" x="24.4" y="1288.8" textLength="1415.2" clip-path="url(#terminal-4069008649-line-52)">&#160;Configuration&#160;&amp;&#160;maintenance&#160;───────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-4069008649-r4" x="1439.6" y="1288.8" textLength="24.4" clip-path=" [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1313.2" textLength="12.2" clip-path="url(#terminal-4069008649-line-53)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1313.2" textLength="305" clip-path="url(#terminal-4069008649-line-53)">cleanup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="353.8" y="1313.2" textLength="1085.8" clip-path="url(#terminal-4069008649-lin [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1337.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-54)">│</text><text class="terminal-4069008649-r2" x="353.8" y="1337.6" textLength="1085.8" clip-path="url(#terminal-4069008649-line-54)">images.&#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-4069008649-r4" x="0" y="1362" textLength="12.2" clip-path="url(#terminal-4069008649-line-55)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1362" textLength="305" clip-path="url(#terminal-4069008649-line-55)">self-upgrade&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="353.8" y="1362" textLength="1085.8" clip-path="url(#terminal-4069008649-line-55)">Self&#160;upgrade&#160;B [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1386.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-56)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1386.4" textLength="305" clip-path="url(#terminal-4069008649-line-56)">setup-autocomplete&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="353.8" y="1386.4" textLength="1085.8" clip-path="url(#terminal-4069008649-line-56)">Enables&#160;autocompletion&#160;of&#160;breeze& [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1410.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-57)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1410.8" textLength="305" clip-path="url(#terminal-4069008649-line-57)">config&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="353.8" y="1410.8" textLength="1085.8" clip-path="url(#terminal-406900864 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1435.2" textLength="12.2" clip-path="url(#terminal-4069008649-line-58)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1435.2" textLength="305" clip-path="url(#terminal-4069008649-line-58)">regenerate-command-images</text><text class="terminal-4069008649-r2" x="353.8" y="1435.2" textLength="1085.8" clip-path="url(#terminal-4069008649-line-58)">Regenerate&#160;breeze&#160;command&#160;images.&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1459.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-59)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1459.6" textLength="305" clip-path="url(#terminal-4069008649-line-59)">command-hash-export&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="353.8" y="1459.6" textLength="1085.8" clip-path="url(#terminal-4069008649-line-59)">Outputs&#160;hash&#160;of&#160;all&#160;click&#160;co [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1484" textLength="12.2" clip-path="url(#terminal-4069008649-line-60)">│</text><text class="terminal-4069008649-r2" x="353.8" y="1484" textLength="1085.8" clip-path="url(#terminal-4069008649-line-60)">images&#160;should&#160;be&#160;regenerated).&#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-4069008649-r4" x="0" y="1508.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-61)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1508.4" textLength="305" clip-path="url(#terminal-4069008649-line-61)">version&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="353.8" y="1508.4" textLength="1085.8" clip-path="url(#terminal-4069008649-lin [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1532.8" textLength="1464" clip-path="url(#terminal-4069008649-line-62)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-4069008649-r2" x="1464" y="1532.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-62)">
+</text><text class="terminal-4069008649-r4" x="0" y="1557.2" textLength="24.4" clip-path="url(#terminal-4069008649-line-63)">╭─</text><text class="terminal-4069008649-r4" x="24.4" y="1557.2" textLength="1415.2" clip-path="url(#terminal-4069008649-line-63)">&#160;CI&#160;Image&#160;tools&#160;────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-4069008649-r4" x="1439.6" y="1557.2" textLength="24.4" clip-path="url( [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1581.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-64)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1581.6" textLength="170.8" clip-path="url(#terminal-4069008649-line-64)">build-image&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="219.6" y="1581.6" textLength="1220" clip-path="url(#terminal-4069008649-line-64)">Build&#160;CI&#160;image.&#160;Include&#160;building&#160;multiple&#160;images& [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1606" textLength="12.2" clip-path="url(#terminal-4069008649-line-65)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1606" textLength="170.8" clip-path="url(#terminal-4069008649-line-65)">pull-image&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="219.6" y="1606" textLength="1220" clip-path="url(#terminal-4069008649-line-65)">Pull&#160;and&#160;optionally&#160;verify&#160;CI&#160;images&#160;-&#160;possib [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1630.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-66)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1630.4" textLength="170.8" clip-path="url(#terminal-4069008649-line-66)">verify-image&#160;&#160;</text><text class="terminal-4069008649-r2" x="219.6" y="1630.4" textLength="1220" clip-path="url(#terminal-4069008649-line-66)">Verify&#160;CI&#160;image.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1654.8" textLength="1464" clip-path="url(#terminal-4069008649-line-67)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-4069008649-r2" x="1464" y="1654.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-67)">
+</text><text class="terminal-4069008649-r4" x="0" y="1679.2" textLength="24.4" clip-path="url(#terminal-4069008649-line-68)">╭─</text><text class="terminal-4069008649-r4" x="24.4" y="1679.2" textLength="1415.2" clip-path="url(#terminal-4069008649-line-68)">&#160;Production&#160;Image&#160;tools&#160;────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-4069008649-r4" x="1439.6" y="1679.2" textLength="24.4" clip-path="url( [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1703.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-69)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1703.6" textLength="207.4" clip-path="url(#terminal-4069008649-line-69)">build-prod-image&#160;</text><text class="terminal-4069008649-r2" x="256.2" y="1703.6" textLength="1183.4" clip-path="url(#terminal-4069008649-line-69)">Build&#160;Production&#160;image.&#160;Include&#160;building&#160;multiple&#160;imag [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1728" textLength="12.2" clip-path="url(#terminal-4069008649-line-70)">│</text><text class="terminal-4069008649-r2" x="256.2" y="1728" textLength="1183.4" clip-path="url(#terminal-4069008649-line-70)">sequentially.&#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;&#16 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1752.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-71)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1752.4" textLength="207.4" clip-path="url(#terminal-4069008649-line-71)">pull-prod-image&#160;&#160;</text><text class="terminal-4069008649-r2" x="256.2" y="1752.4" textLength="1183.4" clip-path="url(#terminal-4069008649-line-71)">Pull&#160;and&#160;optionally&#160;verify&#160;Production&#160;images&#160;-&#1 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1776.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-72)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1776.8" textLength="207.4" clip-path="url(#terminal-4069008649-line-72)">verify-prod-image</text><text class="terminal-4069008649-r2" x="256.2" y="1776.8" textLength="1183.4" clip-path="url(#terminal-4069008649-line-72)">Verify&#160;Production&#160;image.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1801.2" textLength="1464" clip-path="url(#terminal-4069008649-line-73)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-4069008649-r2" x="1464" y="1801.2" textLength="12.2" clip-path="url(#terminal-4069008649-line-73)">
+</text><text class="terminal-4069008649-r4" x="0" y="1825.6" textLength="24.4" clip-path="url(#terminal-4069008649-line-74)">╭─</text><text class="terminal-4069008649-r4" x="24.4" y="1825.6" textLength="1415.2" clip-path="url(#terminal-4069008649-line-74)">&#160;CI&#160;commands&#160;───────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-4069008649-r4" x="1439.6" y="1825.6" textLength="24.4" clip-path="url(#term [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1850" textLength="12.2" clip-path="url(#terminal-4069008649-line-75)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1850" textLength="378.2" clip-path="url(#terminal-4069008649-line-75)">fix-ownership&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="427" y="1850" textLength="1012.6" clip-path="url(#terminal-4069008649-lin [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1874.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-76)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1874.4" textLength="378.2" clip-path="url(#terminal-4069008649-line-76)">free-space&#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-4069008649-r2" x="427" y="1874.4" textLength="1012.6" clip-path="url(#te [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1898.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-77)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1898.8" textLength="378.2" clip-path="url(#terminal-4069008649-line-77)">resource-check&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="427" y="1898.8" textLength="1012.6" clip-path="url(#terminal-4069008649-li [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1923.2" textLength="12.2" clip-path="url(#terminal-4069008649-line-78)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1923.2" textLength="378.2" clip-path="url(#terminal-4069008649-line-78)">selective-check&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="427" y="1923.2" textLength="1012.6" clip-path="url(#terminal-4069008649-line-78 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1947.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-79)">│</text><text class="terminal-4069008649-r5" x="24.4" y="1947.6" textLength="378.2" clip-path="url(#terminal-4069008649-line-79)">find-newer-dependencies&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="427" y="1947.6" textLength="1012.6" clip-path="url(#terminal-4069008649-line-79)">Finds&#160;which&#160;dependencies&#1 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="1972" textLength="1464" clip-path="url(#terminal-4069008649-line-80)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-4069008649-r2" x="1464" y="1972" textLength="12.2" clip-path="url(#terminal-4069008649-line-80)">
+</text><text class="terminal-4069008649-r4" x="0" y="1996.4" textLength="24.4" clip-path="url(#terminal-4069008649-line-81)">╭─</text><text class="terminal-4069008649-r4" x="24.4" y="1996.4" textLength="1415.2" clip-path="url(#terminal-4069008649-line-81)">&#160;Release&#160;management&#160;────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-4069008649-r4" x="1439.6" y="1996.4" textLength="24.4" clip-path="url(#term [...]
+</text><text class="terminal-4069008649-r4" x="0" y="2020.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-82)">│</text><text class="terminal-4069008649-r5" x="24.4" y="2020.8" textLength="402.6" clip-path="url(#terminal-4069008649-line-82)">verify-provider-packages&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="451.4" y="2020.8" textLength="988.2" clip-path="url(#terminal-4069008649-line-82)">Verifies&#160;if&#160;all&#16 [...]
+</text><text class="terminal-4069008649-r4" x="0" y="2045.2" textLength="12.2" clip-path="url(#terminal-4069008649-line-83)">│</text><text class="terminal-4069008649-r5" x="24.4" y="2045.2" textLength="402.6" clip-path="url(#terminal-4069008649-line-83)">prepare-provider-documentation&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="451.4" y="2045.2" textLength="988.2" clip-path="url(#terminal-4069008649-line-83)">Prepare&#160;CHANGELOG,&#160;README&#160;and&#160;COMMITS&# [...]
+</text><text class="terminal-4069008649-r4" x="0" y="2069.6" textLength="12.2" clip-path="url(#terminal-4069008649-line-84)">│</text><text class="terminal-4069008649-r5" x="24.4" y="2069.6" textLength="402.6" clip-path="url(#terminal-4069008649-line-84)">prepare-provider-packages&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="451.4" y="2069.6" textLength="988.2" clip-path="url(#terminal-4069008649-line-84)">Prepare&#160;sdist/whl&#160;packag [...]
+</text><text class="terminal-4069008649-r4" x="0" y="2094" textLength="12.2" clip-path="url(#terminal-4069008649-line-85)">│</text><text class="terminal-4069008649-r5" x="24.4" y="2094" textLength="402.6" clip-path="url(#terminal-4069008649-line-85)">prepare-airflow-package&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="451.4" y="2094" textLength="988.2" clip-path="url(#terminal-4069008649-line-85)">Prepare&#160;sdist/whl&#160;pa [...]
+</text><text class="terminal-4069008649-r4" x="0" y="2118.4" textLength="12.2" clip-path="url(#terminal-4069008649-line-86)">│</text><text class="terminal-4069008649-r5" x="24.4" y="2118.4" textLength="402.6" clip-path="url(#terminal-4069008649-line-86)">release-prod-images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="451.4" y="2118.4" textLength="988.2" clip-path="url(#terminal-4069008649-line-86)">Rele [...]
+</text><text class="terminal-4069008649-r4" x="0" y="2142.8" textLength="12.2" clip-path="url(#terminal-4069008649-line-87)">│</text><text class="terminal-4069008649-r5" x="24.4" y="2142.8" textLength="402.6" clip-path="url(#terminal-4069008649-line-87)">generate-constraints&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-4069008649-r2" x="451.4" y="2142.8" textLength="988.2" clip-path="url(#terminal-4069008649-line-87)">Generates [...]
+</text><text class="terminal-4069008649-r4" x="0" y="2167.2" textLength="1464" clip-path="url(#terminal-4069008649-line-88)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-4069008649-r2" x="1464" y="2167.2" textLength="12.2" clip-path="url(#terminal-4069008649-line-88)">
 </text>
     </g>
     </g>
diff --git a/images/breeze/output-compile-www-assets.svg b/images/breeze/output-compile-www-assets.svg
new file mode 100644
index 0000000000..5ffd5d828f
--- /dev/null
+++ b/images/breeze/output-compile-www-assets.svg
@@ -0,0 +1,99 @@
+<svg class="rich-terminal" viewBox="0 0 1482 294.0" xmlns="http://www.w3.org/2000/svg">
+    <!-- Generated with Rich https://www.textualize.io -->
+    <style>
+
+    @font-face {
+        font-family: "Fira Code";
+        src: local("FiraCode-Regular"),
+                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
+                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
+        font-style: normal;
+        font-weight: 400;
+    }
+    @font-face {
+        font-family: "Fira Code";
+        src: local("FiraCode-Bold"),
+                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
+                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
+        font-style: bold;
+        font-weight: 700;
+    }
+
+    .terminal-2464517397-matrix {
+        font-family: Fira Code, monospace;
+        font-size: 20px;
+        line-height: 24.4px;
+        font-variant-east-asian: full-width;
+    }
+
+    .terminal-2464517397-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 }
+    </style>
+
+    <defs>
+    <clipPath id="terminal-2464517397-clip-terminal">
+      <rect x="0" y="0" width="1463.0" height="243.0" />
+    </clipPath>
+    <clipPath id="terminal-2464517397-line-0">
+    <rect x="0" y="1.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="terminal-2464517397-line-1">
+    <rect x="0" y="25.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="terminal-2464517397-line-2">
+    <rect x="0" y="50.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="terminal-2464517397-line-3">
+    <rect x="0" y="74.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="terminal-2464517397-line-4">
+    <rect x="0" y="99.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="terminal-2464517397-line-5">
+    <rect x="0" y="123.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="terminal-2464517397-line-6">
+    <rect x="0" y="147.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="terminal-2464517397-line-7">
+    <rect x="0" y="172.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="terminal-2464517397-line-8">
+    <rect x="0" y="196.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="292" rx="8"/><text class="terminal-2464517397-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 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)">
+</text>
+    </g>
+    </g>
+</svg>
diff --git a/images/breeze/output-static-checks.svg b/images/breeze/output-static-checks.svg
index 75126bd608..e27e8489f1 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 1221.1999999999998" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1270.0" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -19,233 +19,241 @@
         font-weight: 700;
     }
 
-    .terminal-751396731-matrix {
+    .terminal-1542824486-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-751396731-title {
+    .terminal-1542824486-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-751396731-r1 { fill: #c5c8c6;font-weight: bold }
-.terminal-751396731-r2 { fill: #c5c8c6 }
-.terminal-751396731-r3 { fill: #d0b344;font-weight: bold }
-.terminal-751396731-r4 { fill: #868887 }
-.terminal-751396731-r5 { fill: #68a0b3;font-weight: bold }
-.terminal-751396731-r6 { fill: #98a84b;font-weight: bold }
-.terminal-751396731-r7 { fill: #8d7b39 }
+    .terminal-1542824486-r1 { fill: #c5c8c6;font-weight: bold }
+.terminal-1542824486-r2 { fill: #c5c8c6 }
+.terminal-1542824486-r3 { fill: #d0b344;font-weight: bold }
+.terminal-1542824486-r4 { fill: #868887 }
+.terminal-1542824486-r5 { fill: #68a0b3;font-weight: bold }
+.terminal-1542824486-r6 { fill: #98a84b;font-weight: bold }
+.terminal-1542824486-r7 { fill: #8d7b39 }
     </style>
 
     <defs>
-    <clipPath id="terminal-751396731-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="1170.1999999999998" />
+    <clipPath id="terminal-1542824486-clip-terminal">
+      <rect x="0" y="0" width="1463.0" height="1219.0" />
     </clipPath>
-    <clipPath id="terminal-751396731-line-0">
+    <clipPath id="terminal-1542824486-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-1">
+<clipPath id="terminal-1542824486-line-1">
     <rect x="0" y="25.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-2">
+<clipPath id="terminal-1542824486-line-2">
     <rect x="0" y="50.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-3">
+<clipPath id="terminal-1542824486-line-3">
     <rect x="0" y="74.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-4">
+<clipPath id="terminal-1542824486-line-4">
     <rect x="0" y="99.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-5">
+<clipPath id="terminal-1542824486-line-5">
     <rect x="0" y="123.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-6">
+<clipPath id="terminal-1542824486-line-6">
     <rect x="0" y="147.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-7">
+<clipPath id="terminal-1542824486-line-7">
     <rect x="0" y="172.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-8">
+<clipPath id="terminal-1542824486-line-8">
     <rect x="0" y="196.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-9">
+<clipPath id="terminal-1542824486-line-9">
     <rect x="0" y="221.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-10">
+<clipPath id="terminal-1542824486-line-10">
     <rect x="0" y="245.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-11">
+<clipPath id="terminal-1542824486-line-11">
     <rect x="0" y="269.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-12">
+<clipPath id="terminal-1542824486-line-12">
     <rect x="0" y="294.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-13">
+<clipPath id="terminal-1542824486-line-13">
     <rect x="0" y="318.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-14">
+<clipPath id="terminal-1542824486-line-14">
     <rect x="0" y="343.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-15">
+<clipPath id="terminal-1542824486-line-15">
     <rect x="0" y="367.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-16">
+<clipPath id="terminal-1542824486-line-16">
     <rect x="0" y="391.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-17">
+<clipPath id="terminal-1542824486-line-17">
     <rect x="0" y="416.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-18">
+<clipPath id="terminal-1542824486-line-18">
     <rect x="0" y="440.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-19">
+<clipPath id="terminal-1542824486-line-19">
     <rect x="0" y="465.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-20">
+<clipPath id="terminal-1542824486-line-20">
     <rect x="0" y="489.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-21">
+<clipPath id="terminal-1542824486-line-21">
     <rect x="0" y="513.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-22">
+<clipPath id="terminal-1542824486-line-22">
     <rect x="0" y="538.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-23">
+<clipPath id="terminal-1542824486-line-23">
     <rect x="0" y="562.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-24">
+<clipPath id="terminal-1542824486-line-24">
     <rect x="0" y="587.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-25">
+<clipPath id="terminal-1542824486-line-25">
     <rect x="0" y="611.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-26">
+<clipPath id="terminal-1542824486-line-26">
     <rect x="0" y="635.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-27">
+<clipPath id="terminal-1542824486-line-27">
     <rect x="0" y="660.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-28">
+<clipPath id="terminal-1542824486-line-28">
     <rect x="0" y="684.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-29">
+<clipPath id="terminal-1542824486-line-29">
     <rect x="0" y="709.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-30">
+<clipPath id="terminal-1542824486-line-30">
     <rect x="0" y="733.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-31">
+<clipPath id="terminal-1542824486-line-31">
     <rect x="0" y="757.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-32">
+<clipPath id="terminal-1542824486-line-32">
     <rect x="0" y="782.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-33">
+<clipPath id="terminal-1542824486-line-33">
     <rect x="0" y="806.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-34">
+<clipPath id="terminal-1542824486-line-34">
     <rect x="0" y="831.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-35">
+<clipPath id="terminal-1542824486-line-35">
     <rect x="0" y="855.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-36">
+<clipPath id="terminal-1542824486-line-36">
     <rect x="0" y="879.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-37">
+<clipPath id="terminal-1542824486-line-37">
     <rect x="0" y="904.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-38">
+<clipPath id="terminal-1542824486-line-38">
     <rect x="0" y="928.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-39">
+<clipPath id="terminal-1542824486-line-39">
     <rect x="0" y="953.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-40">
+<clipPath id="terminal-1542824486-line-40">
     <rect x="0" y="977.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-41">
+<clipPath id="terminal-1542824486-line-41">
     <rect x="0" y="1001.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-42">
+<clipPath id="terminal-1542824486-line-42">
     <rect x="0" y="1026.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-43">
+<clipPath id="terminal-1542824486-line-43">
     <rect x="0" y="1050.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-44">
+<clipPath id="terminal-1542824486-line-44">
     <rect x="0" y="1075.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-45">
+<clipPath id="terminal-1542824486-line-45">
     <rect x="0" y="1099.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-751396731-line-46">
+<clipPath id="terminal-1542824486-line-46">
     <rect x="0" y="1123.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="terminal-1542824486-line-47">
+    <rect x="0" y="1148.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="terminal-1542824486-line-48">
+    <rect x="0" y="1172.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="1219.2" rx="8"/><text class="terminal-751396731-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="1268" rx="8"/><text class="terminal-1542824486-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-751396731-clip-terminal)">
+    <g transform="translate(9, 41)" clip-path="url(#terminal-1542824486-clip-terminal)">
     
-    <g class="terminal-751396731-matrix">
-    <text class="terminal-751396731-r2" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-751396731-line-0)">
-</text><text class="terminal-751396731-r3" x="12.2" y="44.4" textLength="85.4" clip-path="url(#terminal-751396731-line-1)">Usage:&#160;</text><text class="terminal-751396731-r1" x="97.6" y="44.4" textLength="610" clip-path="url(#terminal-751396731-line-1)">breeze&#160;static-checks&#160;[OPTIONS]&#160;[PRECOMMIT_ARGS]...</text><text class="terminal-751396731-r2" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-751396731-line-1)">
-</text><text class="terminal-751396731-r2" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-751396731-line-2)">
-</text><text class="terminal-751396731-r2" x="12.2" y="93.2" textLength="219.6" clip-path="url(#terminal-751396731-line-3)">Run&#160;static&#160;checks.</text><text class="terminal-751396731-r2" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-751396731-line-3)">
-</text><text class="terminal-751396731-r2" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-751396731-line-4)">
-</text><text class="terminal-751396731-r4" x="0" y="142" textLength="24.4" clip-path="url(#terminal-751396731-line-5)">╭─</text><text class="terminal-751396731-r4" x="24.4" y="142" textLength="1415.2" clip-path="url(#terminal-751396731-line-5)">&#160;Pre-commit&#160;flags&#160;──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-751396731-r4" x="1439.6" y="142" textLength="24.4" clip-path="url(#terminal-751396731-l [...]
-</text><text class="terminal-751396731-r4" x="0" y="166.4" textLength="12.2" clip-path="url(#terminal-751396731-line-6)">│</text><text class="terminal-751396731-r5" x="24.4" y="166.4" textLength="12.2" clip-path="url(#terminal-751396731-line-6)">-</text><text class="terminal-751396731-r5" x="36.6" y="166.4" textLength="61" clip-path="url(#terminal-751396731-line-6)">-type</text><text class="terminal-751396731-r6" x="317.2" y="166.4" textLength="24.4" clip-path="url(#terminal-751396731-li [...]
-</text><text class="terminal-751396731-r4" x="0" y="190.8" textLength="12.2" clip-path="url(#terminal-751396731-line-7)">│</text><text class="terminal-751396731-r7" x="366" y="190.8" textLength="1073.6" clip-path="url(#terminal-751396731-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-751396731-r4" x="0" y="215.2" textLength="12.2" clip-path="url(#terminal-751396731-line-8)">│</text><text class="terminal-751396731-r7" x="366" y="215.2" textLength="1073.6" clip-path="url(#terminal-751396731-line-8)">check-airflow-config-yaml-consistent&#160;|&#160;check-airflow-providers-have-extras&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-751396731-r4" x="1451.8" y="215.2" textLength="12.2"  [...]
-</text><text class="terminal-751396731-r4" x="0" y="239.6" textLength="12.2" clip-path="url(#terminal-751396731-line-9)">│</text><text class="terminal-751396731-r7" x="366" y="239.6" textLength="1073.6" clip-path="url(#terminal-751396731-line-9)">check-apache-license-rat&#160;|&#160;check-base-operator-usage&#160;|&#160;check-boring-cyborg-configuration</text><text class="terminal-751396731-r4" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#terminal-751396731-line-9)">│</text><te [...]
-</text><text class="terminal-751396731-r4" x="0" y="264" textLength="12.2" clip-path="url(#terminal-751396731-line-10)">│</text><text class="terminal-751396731-r7" x="366" y="264" textLength="1073.6" clip-path="url(#terminal-751396731-line-10)">|&#160;check-breeze-top-dependencies-limited&#160;|&#160;check-builtin-literals&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal- [...]
-</text><text class="terminal-751396731-r4" x="0" y="288.4" textLength="12.2" clip-path="url(#terminal-751396731-line-11)">│</text><text class="terminal-751396731-r7" x="366" y="288.4" textLength="1073.6" clip-path="url(#terminal-751396731-line-11)">check-changelog-has-no-duplicates&#160;|&#160;check-daysago-import-from-utils&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-751396731-r4" x= [...]
-</text><text class="terminal-751396731-r4" x="0" y="312.8" textLength="12.2" clip-path="url(#terminal-751396731-line-12)">│</text><text class="terminal-751396731-r7" x="366" y="312.8" textLength="1073.6" clip-path="url(#terminal-751396731-line-12)">check-docstring-param-types&#160;|&#160;check-executables-have-shebangs&#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-751396731-r4" x="0" y="337.2" textLength="12.2" clip-path="url(#terminal-751396731-line-13)">│</text><text class="terminal-751396731-r7" x="366" y="337.2" textLength="1073.6" clip-path="url(#terminal-751396731-line-13)">check-extra-packages-references&#160;|&#160;check-extras-order&#160;|&#160;check-for-inclusive-language&#160;|&#160;&#160;&#160;</text><text class="terminal-751396731-r4" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#terminal-75139673 [...]
-</text><text class="terminal-751396731-r4" x="0" y="361.6" textLength="12.2" clip-path="url(#terminal-751396731-line-14)">│</text><text class="terminal-751396731-r7" x="366" y="361.6" textLength="1073.6" clip-path="url(#terminal-751396731-line-14)">check-hooks-apply&#160;|&#160;check-incorrect-use-of-LoggingMixin&#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-751396731-r4" x="0" y="386" textLength="12.2" clip-path="url(#terminal-751396731-line-15)">│</text><text class="terminal-751396731-r7" x="366" y="386" textLength="1073.6" clip-path="url(#terminal-751396731-line-15)">check-integrations-are-consistent&#160;|&#160;check-merge-conflict&#160;|&#160;check-newsfragments-are-valid</text><text class="terminal-751396731-r4" x="1451.8" y="386" textLength="12.2" clip-path="url(#terminal-751396731-line-15)">│</text><text  [...]
-</text><text class="terminal-751396731-r4" x="0" y="410.4" textLength="12.2" clip-path="url(#terminal-751396731-line-16)">│</text><text class="terminal-751396731-r7" x="366" y="410.4" textLength="1073.6" clip-path="url(#terminal-751396731-line-16)">|&#160;check-no-providers-in-core-examples&#160;|&#160;check-no-relative-imports&#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-7 [...]
-</text><text class="terminal-751396731-r4" x="0" y="434.8" textLength="12.2" clip-path="url(#terminal-751396731-line-17)">│</text><text class="terminal-751396731-r7" x="366" y="434.8" textLength="1073.6" clip-path="url(#terminal-751396731-line-17)">check-persist-credentials-disabled-in-github-workflows&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="terminal-751396731-r4" x="0" y="459.2" textLength="12.2" clip-path="url(#terminal-751396731-line-18)">│</text><text class="terminal-751396731-r7" x="366" y="459.2" textLength="1073.6" clip-path="url(#terminal-751396731-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-751396731-r4" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#termina [...]
-</text><text class="terminal-751396731-r4" x="0" y="483.6" textLength="12.2" clip-path="url(#terminal-751396731-line-19)">│</text><text class="terminal-751396731-r7" x="366" y="483.6" textLength="1073.6" clip-path="url(#terminal-751396731-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-751396731-r4" x="0" y="508" textLength="12.2" clip-path="url(#terminal-751396731-line-20)">│</text><text class="terminal-751396731-r7" x="366" y="508" textLength="1073.6" clip-path="url(#terminal-751396731-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-751396731-r4" x="1451.8" y="508" textLen [...]
-</text><text class="terminal-751396731-r4" x="0" y="532.4" textLength="12.2" clip-path="url(#terminal-751396731-line-21)">│</text><text class="terminal-751396731-r7" x="366" y="532.4" textLength="1073.6" clip-path="url(#terminal-751396731-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-751396731-r4" x="1451.8" y="532.4" textLength="12.2" clip-pat [...]
-</text><text class="terminal-751396731-r4" x="0" y="556.8" textLength="12.2" clip-path="url(#terminal-751396731-line-22)">│</text><text class="terminal-751396731-r7" x="366" y="556.8" textLength="1073.6" clip-path="url(#terminal-751396731-line-22)">check-start-date-not-used-in-defaults&#160;|&#160;check-system-tests-present&#160;|&#160;check-xml&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-751396731-r4" x="1451.8" y="556.8" textLength="12.2" clip-pat [...]
-</text><text class="terminal-751396731-r4" x="0" y="581.2" textLength="12.2" clip-path="url(#terminal-751396731-line-23)">│</text><text class="terminal-751396731-r7" x="366" y="581.2" textLength="1073.6" clip-path="url(#terminal-751396731-line-23)">codespell&#160;|&#160;debug-statements&#160;|&#160;detect-private-key&#160;|&#160;doctoc&#160;|&#160;end-of-file-fixer&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-751396731-r4" x="1451.8" y="581.2" textLe [...]
-</text><text class="terminal-751396731-r4" x="0" y="605.6" textLength="12.2" clip-path="url(#terminal-751396731-line-24)">│</text><text class="terminal-751396731-r7" x="366" y="605.6" textLength="1073.6" clip-path="url(#terminal-751396731-line-24)">fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;forbid-tabs&#160;|&#160;identity&#160;|&#160;insert-license&#160;|&#160;isort&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-751396731-r4" x="1451.8" y [...]
-</text><text class="terminal-751396731-r4" x="0" y="630" textLength="12.2" clip-path="url(#terminal-751396731-line-25)">│</text><text class="terminal-751396731-r7" x="366" y="630" textLength="1073.6" clip-path="url(#terminal-751396731-line-25)">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-751396731-r4" x="1451.8" y="630" textLength="12.2" clip-path="url [...]
-</text><text class="terminal-751396731-r4" x="0" y="654.4" textLength="12.2" clip-path="url(#terminal-751396731-line-26)">│</text><text class="terminal-751396731-r7" x="366" y="654.4" textLength="1073.6" clip-path="url(#terminal-751396731-line-26)">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-751396731-r4" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#terminal-75139673 [...]
-</text><text class="terminal-751396731-r4" x="0" y="678.8" textLength="12.2" clip-path="url(#terminal-751396731-line-27)">│</text><text class="terminal-751396731-r7" x="366" y="678.8" textLength="1073.6" clip-path="url(#terminal-751396731-line-27)">|&#160;pydocstyle&#160;|&#160;python-no-log-warn&#160;|&#160;pyupgrade&#160;|&#160;rst-backticks&#160;|&#160;run-flake8&#160;|&#160;run-mypy&#160;|&#160;</text><text class="terminal-751396731-r4" x="1451.8" y="678.8" textLength="12.2" clip-pat [...]
-</text><text class="terminal-751396731-r4" x="0" y="703.2" textLength="12.2" clip-path="url(#terminal-751396731-line-28)">│</text><text class="terminal-751396731-r7" x="366" y="703.2" textLength="1073.6" clip-path="url(#terminal-751396731-line-28)">run-shellcheck&#160;|&#160;static-check-autoflake&#160;|&#160;trailing-whitespace&#160;|&#160;update-breeze-cmd-output</text><text class="terminal-751396731-r4" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#terminal-751396731-line-28) [...]
-</text><text class="terminal-751396731-r4" x="0" y="727.6" textLength="12.2" clip-path="url(#terminal-751396731-line-29)">│</text><text class="terminal-751396731-r7" x="366" y="727.6" textLength="1073.6" clip-path="url(#terminal-751396731-line-29)">|&#160;update-breeze-readme-config-hash&#160;|&#160;update-extras&#160;|&#160;update-in-the-wild-to-be-sorted&#160;|&#160;&#160;</text><text class="terminal-751396731-r4" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#terminal-75139673 [...]
-</text><text class="terminal-751396731-r4" x="0" y="752" textLength="12.2" clip-path="url(#terminal-751396731-line-30)">│</text><text class="terminal-751396731-r7" x="366" y="752" textLength="1073.6" clip-path="url(#terminal-751396731-line-30)">update-inlined-dockerfile-scripts&#160;|&#160;update-local-yml-file&#160;|&#160;update-migration-references&#160;</text><text class="terminal-751396731-r4" x="1451.8" y="752" textLength="12.2" clip-path="url(#terminal-751396731-line-30)">│</text>< [...]
-</text><text class="terminal-751396731-r4" x="0" y="776.4" textLength="12.2" clip-path="url(#terminal-751396731-line-31)">│</text><text class="terminal-751396731-r7" x="366" y="776.4" textLength="1073.6" clip-path="url(#terminal-751396731-line-31)">|&#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-751396731-r4" x="0" y="800.8" textLength="12.2" clip-path="url(#terminal-751396731-line-32)">│</text><text class="terminal-751396731-r7" x="366" y="800.8" textLength="1073.6" clip-path="url(#terminal-751396731-line-32)">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-751396 [...]
-</text><text class="terminal-751396731-r4" x="0" y="825.2" textLength="12.2" clip-path="url(#terminal-751396731-line-33)">│</text><text class="terminal-751396731-r7" x="366" y="825.2" textLength="1073.6" clip-path="url(#terminal-751396731-line-33)">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-751396731-r [...]
-</text><text class="terminal-751396731-r4" x="0" y="849.6" textLength="12.2" clip-path="url(#terminal-751396731-line-34)">│</text><text class="terminal-751396731-r5" x="24.4" y="849.6" textLength="12.2" clip-path="url(#terminal-751396731-line-34)">-</text><text class="terminal-751396731-r5" x="36.6" y="849.6" textLength="61" clip-path="url(#terminal-751396731-line-34)">-file</text><text class="terminal-751396731-r6" x="317.2" y="849.6" textLength="24.4" clip-path="url(#terminal-751396731 [...]
-</text><text class="terminal-751396731-r4" x="0" y="874" textLength="12.2" clip-path="url(#terminal-751396731-line-35)">│</text><text class="terminal-751396731-r5" x="24.4" y="874" textLength="12.2" clip-path="url(#terminal-751396731-line-35)">-</text><text class="terminal-751396731-r5" x="36.6" y="874" textLength="48.8" clip-path="url(#terminal-751396731-line-35)">-all</text><text class="terminal-751396731-r5" x="85.4" y="874" textLength="73.2" clip-path="url(#terminal-751396731-line-35 [...]
-</text><text class="terminal-751396731-r4" x="0" y="898.4" textLength="12.2" clip-path="url(#terminal-751396731-line-36)">│</text><text class="terminal-751396731-r5" x="24.4" y="898.4" textLength="12.2" clip-path="url(#terminal-751396731-line-36)">-</text><text class="terminal-751396731-r5" x="36.6" y="898.4" textLength="61" clip-path="url(#terminal-751396731-line-36)">-show</text><text class="terminal-751396731-r5" x="97.6" y="898.4" textLength="195.2" clip-path="url(#terminal-751396731 [...]
-</text><text class="terminal-751396731-r4" x="0" y="922.8" textLength="12.2" clip-path="url(#terminal-751396731-line-37)">│</text><text class="terminal-751396731-r5" x="24.4" y="922.8" textLength="12.2" clip-path="url(#terminal-751396731-line-37)">-</text><text class="terminal-751396731-r5" x="36.6" y="922.8" textLength="61" clip-path="url(#terminal-751396731-line-37)">-last</text><text class="terminal-751396731-r5" x="97.6" y="922.8" textLength="85.4" clip-path="url(#terminal-751396731- [...]
-</text><text class="terminal-751396731-r4" x="0" y="947.2" textLength="1464" clip-path="url(#terminal-751396731-line-38)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-751396731-r2" x="1464" y="947.2" textLength="12.2" clip-path="url(#terminal-751396731-line-38)">
-</text><text class="terminal-751396731-r4" x="0" y="971.6" textLength="24.4" clip-path="url(#terminal-751396731-line-39)">╭─</text><text class="terminal-751396731-r4" x="24.4" y="971.6" textLength="1415.2" clip-path="url(#terminal-751396731-line-39)">&#160;Options&#160;───────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-751396731-r4" x="1439.6" y="971.6" textLength="24.4" clip-path="url(#terminal-75139673 [...]
-</text><text class="terminal-751396731-r4" x="0" y="996" textLength="12.2" clip-path="url(#terminal-751396731-line-40)">│</text><text class="terminal-751396731-r5" x="24.4" y="996" textLength="12.2" clip-path="url(#terminal-751396731-line-40)">-</text><text class="terminal-751396731-r5" x="36.6" y="996" textLength="85.4" clip-path="url(#terminal-751396731-line-40)">-commit</text><text class="terminal-751396731-r5" x="122" y="996" textLength="48.8" clip-path="url(#terminal-751396731-line- [...]
-</text><text class="terminal-751396731-r4" x="0" y="1020.4" textLength="12.2" clip-path="url(#terminal-751396731-line-41)">│</text><text class="terminal-751396731-r2" x="329.4" y="1020.4" textLength="183" clip-path="url(#terminal-751396731-line-41)">exclusive&#160;with&#160;</text><text class="terminal-751396731-r5" x="512.4" y="1020.4" textLength="12.2" clip-path="url(#terminal-751396731-line-41)">-</text><text class="terminal-751396731-r5" x="524.6" y="1020.4" textLength="61" clip-path [...]
-</text><text class="terminal-751396731-r4" x="0" y="1044.8" textLength="12.2" clip-path="url(#terminal-751396731-line-42)">│</text><text class="terminal-751396731-r7" x="329.4" y="1044.8" textLength="1110.2" clip-path="url(#terminal-751396731-line-42)">(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-751396731-r4" x="0" y="1069.2" textLength="12.2" clip-path="url(#terminal-751396731-line-43)">│</text><text class="terminal-751396731-r5" x="24.4" y="1069.2" textLength="12.2" clip-path="url(#terminal-751396731-line-43)">-</text><text class="terminal-751396731-r5" x="36.6" y="1069.2" textLength="97.6" clip-path="url(#terminal-751396731-line-43)">-verbose</text><text class="terminal-751396731-r6" x="280.6" y="1069.2" textLength="24.4" clip-path="url(#terminal- [...]
-</text><text class="terminal-751396731-r4" x="0" y="1093.6" textLength="12.2" clip-path="url(#terminal-751396731-line-44)">│</text><text class="terminal-751396731-r5" x="24.4" y="1093.6" textLength="12.2" clip-path="url(#terminal-751396731-line-44)">-</text><text class="terminal-751396731-r5" x="36.6" y="1093.6" textLength="48.8" clip-path="url(#terminal-751396731-line-44)">-dry</text><text class="terminal-751396731-r5" x="85.4" y="1093.6" textLength="48.8" clip-path="url(#terminal-75139 [...]
-</text><text class="terminal-751396731-r4" x="0" y="1118" textLength="12.2" clip-path="url(#terminal-751396731-line-45)">│</text><text class="terminal-751396731-r5" x="24.4" y="1118" textLength="12.2" clip-path="url(#terminal-751396731-line-45)">-</text><text class="terminal-751396731-r5" x="36.6" y="1118" textLength="85.4" clip-path="url(#terminal-751396731-line-45)">-github</text><text class="terminal-751396731-r5" x="122" y="1118" textLength="134.2" clip-path="url(#terminal-751396731- [...]
-</text><text class="terminal-751396731-r4" x="0" y="1142.4" textLength="12.2" clip-path="url(#terminal-751396731-line-46)">│</text><text class="terminal-751396731-r5" x="24.4" y="1142.4" textLength="12.2" clip-path="url(#terminal-751396731-line-46)">-</text><text class="terminal-751396731-r5" x="36.6" y="1142.4" textLength="61" clip-path="url(#terminal-751396731-line-46)">-help</text><text class="terminal-751396731-r6" x="280.6" y="1142.4" textLength="24.4" clip-path="url(#terminal-75139 [...]
-</text><text class="terminal-751396731-r4" x="0" y="1166.8" textLength="1464" clip-path="url(#terminal-751396731-line-47)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-751396731-r2" x="1464" y="1166.8" textLength="12.2" clip-path="url(#terminal-751396731-line-47)">
+    <g class="terminal-1542824486-matrix">
+    <text class="terminal-1542824486-r2" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-1542824486-line-0)">
+</text><text class="terminal-1542824486-r3" x="12.2" y="44.4" textLength="85.4" clip-path="url(#terminal-1542824486-line-1)">Usage:&#160;</text><text class="terminal-1542824486-r1" x="97.6" y="44.4" textLength="610" clip-path="url(#terminal-1542824486-line-1)">breeze&#160;static-checks&#160;[OPTIONS]&#160;[PRECOMMIT_ARGS]...</text><text class="terminal-1542824486-r2" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-1542824486-line-1)">
+</text><text class="terminal-1542824486-r2" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-1542824486-line-2)">
+</text><text class="terminal-1542824486-r2" x="12.2" y="93.2" textLength="219.6" clip-path="url(#terminal-1542824486-line-3)">Run&#160;static&#160;checks.</text><text class="terminal-1542824486-r2" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-1542824486-line-3)">
+</text><text class="terminal-1542824486-r2" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-1542824486-line-4)">
+</text><text class="terminal-1542824486-r4" x="0" y="142" textLength="24.4" clip-path="url(#terminal-1542824486-line-5)">╭─</text><text class="terminal-1542824486-r4" x="24.4" y="142" textLength="1415.2" clip-path="url(#terminal-1542824486-line-5)">&#160;Pre-commit&#160;flags&#160;──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-1542824486-r4" x="1439.6" y="142" textLength="24.4" clip-path="url(#terminal-154282 [...]
+</text><text class="terminal-1542824486-r4" x="0" y="166.4" textLength="12.2" clip-path="url(#terminal-1542824486-line-6)">│</text><text class="terminal-1542824486-r5" x="24.4" y="166.4" textLength="12.2" clip-path="url(#terminal-1542824486-line-6)">-</text><text class="terminal-1542824486-r5" x="36.6" y="166.4" textLength="61" clip-path="url(#terminal-1542824486-line-6)">-type</text><text class="terminal-1542824486-r6" x="317.2" y="166.4" textLength="24.4" clip-path="url(#terminal-15428 [...]
+</text><text class="terminal-1542824486-r4" x="0" y="190.8" textLength="12.2" clip-path="url(#terminal-1542824486-line-7)">│</text><text class="terminal-1542824486-r7" x="366" y="190.8" textLength="1073.6" clip-path="url(#terminal-1542824486-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 [...]
+</text><text class="terminal-1542824486-r4" x="0" y="215.2" textLength="12.2" clip-path="url(#terminal-1542824486-line-8)">│</text><text class="terminal-1542824486-r7" x="366" y="215.2" textLength="1073.6" clip-path="url(#terminal-1542824486-line-8)">check-airflow-config-yaml-consistent&#160;|&#160;check-airflow-providers-have-extras&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-1542824486-r4" x="1451.8" y="215.2" textLength="1 [...]
+</text><text class="terminal-1542824486-r4" x="0" y="239.6" textLength="12.2" clip-path="url(#terminal-1542824486-line-9)">│</text><text class="terminal-1542824486-r7" x="366" y="239.6" textLength="1073.6" clip-path="url(#terminal-1542824486-line-9)">check-apache-license-rat&#160;|&#160;check-base-operator-usage&#160;|&#160;check-boring-cyborg-configuration</text><text class="terminal-1542824486-r4" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#terminal-1542824486-line-9)">│</te [...]
+</text><text class="terminal-1542824486-r4" x="0" y="264" textLength="12.2" clip-path="url(#terminal-1542824486-line-10)">│</text><text class="terminal-1542824486-r7" x="366" y="264" textLength="1073.6" clip-path="url(#terminal-1542824486-line-10)">|&#160;check-breeze-top-dependencies-limited&#160;|&#160;check-builtin-literals&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="termi [...]
+</text><text class="terminal-1542824486-r4" x="0" y="288.4" textLength="12.2" clip-path="url(#terminal-1542824486-line-11)">│</text><text class="terminal-1542824486-r7" x="366" y="288.4" textLength="1073.6" clip-path="url(#terminal-1542824486-line-11)">check-changelog-has-no-duplicates&#160;|&#160;check-daysago-import-from-utils&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-1542824486-r [...]
+</text><text class="terminal-1542824486-r4" x="0" y="312.8" textLength="12.2" clip-path="url(#terminal-1542824486-line-12)">│</text><text class="terminal-1542824486-r7" x="366" y="312.8" textLength="1073.6" clip-path="url(#terminal-1542824486-line-12)">check-docstring-param-types&#160;|&#160;check-executables-have-shebangs&#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><tex [...]
+</text><text class="terminal-1542824486-r4" x="0" y="337.2" textLength="12.2" clip-path="url(#terminal-1542824486-line-13)">│</text><text class="terminal-1542824486-r7" x="366" y="337.2" textLength="1073.6" clip-path="url(#terminal-1542824486-line-13)">check-extra-packages-references&#160;|&#160;check-extras-order&#160;|&#160;check-for-inclusive-language&#160;|&#160;&#160;&#160;</text><text class="terminal-1542824486-r4" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#terminal-154 [...]
+</text><text class="terminal-1542824486-r4" x="0" y="361.6" textLength="12.2" clip-path="url(#terminal-1542824486-line-14)">│</text><text class="terminal-1542824486-r7" x="366" y="361.6" textLength="1073.6" clip-path="url(#terminal-1542824486-line-14)">check-hooks-apply&#160;|&#160;check-incorrect-use-of-LoggingMixin&#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-1542824486-r4" x="0" y="386" textLength="12.2" clip-path="url(#terminal-1542824486-line-15)">│</text><text class="terminal-1542824486-r7" x="366" y="386" textLength="1073.6" clip-path="url(#terminal-1542824486-line-15)">check-integrations-are-consistent&#160;|&#160;check-merge-conflict&#160;|&#160;check-newsfragments-are-valid</text><text class="terminal-1542824486-r4" x="1451.8" y="386" textLength="12.2" clip-path="url(#terminal-1542824486-line-15)">│</text> [...]
+</text><text class="terminal-1542824486-r4" x="0" y="410.4" textLength="12.2" clip-path="url(#terminal-1542824486-line-16)">│</text><text class="terminal-1542824486-r7" x="366" y="410.4" textLength="1073.6" clip-path="url(#terminal-1542824486-line-16)">|&#160;check-no-providers-in-core-examples&#160;|&#160;check-no-relative-imports&#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="termin [...]
+</text><text class="terminal-1542824486-r4" x="0" y="434.8" textLength="12.2" clip-path="url(#terminal-1542824486-line-17)">│</text><text class="terminal-1542824486-r7" x="366" y="434.8" textLength="1073.6" clip-path="url(#terminal-1542824486-line-17)">check-persist-credentials-disabled-in-github-workflows&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="terminal-1542824486-r4" x="0" y="459.2" textLength="12.2" clip-path="url(#terminal-1542824486-line-18)">│</text><text class="terminal-1542824486-r7" x="366" y="459.2" textLength="1073.6" clip-path="url(#terminal-1542824486-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-1542824486-r4" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#te [...]
+</text><text class="terminal-1542824486-r4" x="0" y="483.6" textLength="12.2" clip-path="url(#terminal-1542824486-line-19)">│</text><text class="terminal-1542824486-r7" x="366" y="483.6" textLength="1073.6" clip-path="url(#terminal-1542824486-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><tex [...]
+</text><text class="terminal-1542824486-r4" x="0" y="508" textLength="12.2" clip-path="url(#terminal-1542824486-line-20)">│</text><text class="terminal-1542824486-r7" x="366" y="508" textLength="1073.6" clip-path="url(#terminal-1542824486-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-1542824486-r4" x="1451.8" y="508" te [...]
+</text><text class="terminal-1542824486-r4" x="0" y="532.4" textLength="12.2" clip-path="url(#terminal-1542824486-line-21)">│</text><text class="terminal-1542824486-r7" x="366" y="532.4" textLength="1073.6" clip-path="url(#terminal-1542824486-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-1542824486-r4" x="1451.8" y="532.4" textLength="12.2" cli [...]
+</text><text class="terminal-1542824486-r4" x="0" y="556.8" textLength="12.2" clip-path="url(#terminal-1542824486-line-22)">│</text><text class="terminal-1542824486-r7" x="366" y="556.8" textLength="1073.6" clip-path="url(#terminal-1542824486-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-1542824 [...]
+</text><text class="terminal-1542824486-r4" x="0" y="581.2" textLength="12.2" clip-path="url(#terminal-1542824486-line-23)">│</text><text class="terminal-1542824486-r7" x="366" y="581.2" textLength="1073.6" clip-path="url(#terminal-1542824486-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="termin [...]
+</text><text class="terminal-1542824486-r4" x="0" y="605.6" textLength="12.2" clip-path="url(#terminal-1542824486-line-24)">│</text><text class="terminal-1542824486-r7" x="366" y="605.6" textLength="1073.6" clip-path="url(#terminal-1542824486-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-1542824486-r4" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#te [...]
+</text><text class="terminal-1542824486-r4" x="0" y="630" textLength="12.2" clip-path="url(#terminal-1542824486-line-25)">│</text><text class="terminal-1542824486-r7" x="366" y="630" textLength="1073.6" clip-path="url(#terminal-1542824486-line-25)">end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;forbid-tabs&#160;|&#160;identity&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-1542824486- [...]
+</text><text class="terminal-1542824486-r4" x="0" y="654.4" textLength="12.2" clip-path="url(#terminal-1542824486-line-26)">│</text><text class="terminal-1542824486-r7" x="366" y="654.4" textLength="1073.6" clip-path="url(#terminal-1542824486-line-26)">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;&#160;&#160;</text><text class="terminal-15 [...]
+</text><text class="terminal-1542824486-r4" x="0" y="678.8" textLength="12.2" clip-path="url(#terminal-1542824486-line-27)">│</text><text class="terminal-1542824486-r7" x="366" y="678.8" textLength="1073.6" clip-path="url(#terminal-1542824486-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-1542824486-r4" x="1451.8" y="678.8" textLength="12.2" clip-pat [...]
+</text><text class="terminal-1542824486-r4" x="0" y="703.2" textLength="12.2" clip-path="url(#terminal-1542824486-line-28)">│</text><text class="terminal-1542824486-r7" x="366" y="703.2" textLength="1073.6" clip-path="url(#terminal-1542824486-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-1542824486-r4" x="1451.8" y="703.2" textLength="12.2" clip-path="ur [...]
+</text><text class="terminal-1542824486-r4" x="0" y="727.6" textLength="12.2" clip-path="url(#terminal-1542824486-line-29)">│</text><text class="terminal-1542824486-r7" x="366" y="727.6" textLength="1073.6" clip-path="url(#terminal-1542824486-line-29)">rst-backticks&#160;|&#160;run-flake8&#160;|&#160;run-mypy&#160;|&#160;run-shellcheck&#160;|&#160;static-check-autoflake&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-1542824486-r4" x="1451.8" y="727.6" textLe [...]
+</text><text class="terminal-1542824486-r4" x="0" y="752" textLength="12.2" clip-path="url(#terminal-1542824486-line-30)">│</text><text class="terminal-1542824486-r7" x="366" y="752" textLength="1073.6" clip-path="url(#terminal-1542824486-line-30)">trailing-whitespace&#160;|&#160;update-breeze-cmd-output&#160;|&#160;update-breeze-readme-config-hash&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="terminal-1542824486-r4" x="1451.8" y="752" textLength="12.2" clip-path="url(#terminal [...]
+</text><text class="terminal-1542824486-r4" x="0" y="776.4" textLength="12.2" clip-path="url(#terminal-1542824486-line-31)">│</text><text class="terminal-1542824486-r7" x="366" y="776.4" textLength="1073.6" clip-path="url(#terminal-1542824486-line-31)">update-extras&#160;|&#160;update-in-the-wild-to-be-sorted&#160;|&#160;update-inlined-dockerfile-scripts&#160;|&#160;&#160;&#160;</text><text class="terminal-1542824486-r4" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#terminal-154 [...]
+</text><text class="terminal-1542824486-r4" x="0" y="800.8" textLength="12.2" clip-path="url(#terminal-1542824486-line-32)">│</text><text class="terminal-1542824486-r7" x="366" y="800.8" textLength="1073.6" clip-path="url(#terminal-1542824486-line-32)">update-local-yml-file&#160;|&#160;update-migration-references&#160;|&#160;update-providers-dependencies&#160;|&#160;&#160;&#160;</text><text class="terminal-1542824486-r4" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#terminal-154 [...]
+</text><text class="terminal-1542824486-r4" x="0" y="825.2" textLength="12.2" clip-path="url(#terminal-1542824486-line-33)">│</text><text class="terminal-1542824486-r7" x="366" y="825.2" textLength="1073.6" clip-path="url(#terminal-1542824486-line-33)">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><tex [...]
+</text><text class="terminal-1542824486-r4" x="0" y="849.6" textLength="12.2" clip-path="url(#terminal-1542824486-line-34)">│</text><text class="terminal-1542824486-r7" x="366" y="849.6" textLength="1073.6" clip-path="url(#terminal-1542824486-line-34)">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-1542824486-r4" x="1451.8" y="849.6" textLength="12.2" clip-pat [...]
+</text><text class="terminal-1542824486-r4" x="0" y="874" textLength="12.2" clip-path="url(#terminal-1542824486-line-35)">│</text><text class="terminal-1542824486-r7" x="366" y="874" textLength="1073.6" clip-path="url(#terminal-1542824486-line-35)">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-1542824486-r4" x="0" y="898.4" textLength="12.2" clip-path="url(#terminal-1542824486-line-36)">│</text><text class="terminal-1542824486-r5" x="24.4" y="898.4" textLength="12.2" clip-path="url(#terminal-1542824486-line-36)">-</text><text class="terminal-1542824486-r5" x="36.6" y="898.4" textLength="61" clip-path="url(#terminal-1542824486-line-36)">-file</text><text class="terminal-1542824486-r6" x="317.2" y="898.4" textLength="24.4" clip-path="url(#terminal-15 [...]
+</text><text class="terminal-1542824486-r4" x="0" y="922.8" textLength="12.2" clip-path="url(#terminal-1542824486-line-37)">│</text><text class="terminal-1542824486-r5" x="24.4" y="922.8" textLength="12.2" clip-path="url(#terminal-1542824486-line-37)">-</text><text class="terminal-1542824486-r5" x="36.6" y="922.8" textLength="48.8" clip-path="url(#terminal-1542824486-line-37)">-all</text><text class="terminal-1542824486-r5" x="85.4" y="922.8" textLength="73.2" clip-path="url(#terminal-15 [...]
+</text><text class="terminal-1542824486-r4" x="0" y="947.2" textLength="12.2" clip-path="url(#terminal-1542824486-line-38)">│</text><text class="terminal-1542824486-r5" x="24.4" y="947.2" textLength="12.2" clip-path="url(#terminal-1542824486-line-38)">-</text><text class="terminal-1542824486-r5" x="36.6" y="947.2" textLength="61" clip-path="url(#terminal-1542824486-line-38)">-show</text><text class="terminal-1542824486-r5" x="97.6" y="947.2" textLength="195.2" clip-path="url(#terminal-15 [...]
+</text><text class="terminal-1542824486-r4" x="0" y="971.6" textLength="12.2" clip-path="url(#terminal-1542824486-line-39)">│</text><text class="terminal-1542824486-r5" x="24.4" y="971.6" textLength="12.2" clip-path="url(#terminal-1542824486-line-39)">-</text><text class="terminal-1542824486-r5" x="36.6" y="971.6" textLength="61" clip-path="url(#terminal-1542824486-line-39)">-last</text><text class="terminal-1542824486-r5" x="97.6" y="971.6" textLength="85.4" clip-path="url(#terminal-154 [...]
+</text><text class="terminal-1542824486-r4" x="0" y="996" textLength="1464" clip-path="url(#terminal-1542824486-line-40)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-1542824486-r2" x="1464" y="996" textLength="12.2" clip-path="url(#terminal-1542824486-line-40)">
+</text><text class="terminal-1542824486-r4" x="0" y="1020.4" textLength="24.4" clip-path="url(#terminal-1542824486-line-41)">╭─</text><text class="terminal-1542824486-r4" x="24.4" y="1020.4" textLength="1415.2" clip-path="url(#terminal-1542824486-line-41)">&#160;Options&#160;───────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-1542824486-r4" x="1439.6" y="1020.4" textLength="24.4" clip-path="url(#terminal- [...]
+</text><text class="terminal-1542824486-r4" x="0" y="1044.8" textLength="12.2" clip-path="url(#terminal-1542824486-line-42)">│</text><text class="terminal-1542824486-r5" x="24.4" y="1044.8" textLength="12.2" clip-path="url(#terminal-1542824486-line-42)">-</text><text class="terminal-1542824486-r5" x="36.6" y="1044.8" textLength="85.4" clip-path="url(#terminal-1542824486-line-42)">-commit</text><text class="terminal-1542824486-r5" x="122" y="1044.8" textLength="48.8" clip-path="url(#termi [...]
+</text><text class="terminal-1542824486-r4" x="0" y="1069.2" textLength="12.2" clip-path="url(#terminal-1542824486-line-43)">│</text><text class="terminal-1542824486-r2" x="329.4" y="1069.2" textLength="183" clip-path="url(#terminal-1542824486-line-43)">exclusive&#160;with&#160;</text><text class="terminal-1542824486-r5" x="512.4" y="1069.2" textLength="12.2" clip-path="url(#terminal-1542824486-line-43)">-</text><text class="terminal-1542824486-r5" x="524.6" y="1069.2" textLength="61" cl [...]
+</text><text class="terminal-1542824486-r4" x="0" y="1093.6" textLength="12.2" clip-path="url(#terminal-1542824486-line-44)">│</text><text class="terminal-1542824486-r7" x="329.4" y="1093.6" textLength="1110.2" clip-path="url(#terminal-1542824486-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;& [...]
+</text><text class="terminal-1542824486-r4" x="0" y="1118" textLength="12.2" clip-path="url(#terminal-1542824486-line-45)">│</text><text class="terminal-1542824486-r5" x="24.4" y="1118" textLength="12.2" clip-path="url(#terminal-1542824486-line-45)">-</text><text class="terminal-1542824486-r5" x="36.6" y="1118" textLength="97.6" clip-path="url(#terminal-1542824486-line-45)">-verbose</text><text class="terminal-1542824486-r6" x="280.6" y="1118" textLength="24.4" clip-path="url(#terminal-1 [...]
+</text><text class="terminal-1542824486-r4" x="0" y="1142.4" textLength="12.2" clip-path="url(#terminal-1542824486-line-46)">│</text><text class="terminal-1542824486-r5" x="24.4" y="1142.4" textLength="12.2" clip-path="url(#terminal-1542824486-line-46)">-</text><text class="terminal-1542824486-r5" x="36.6" y="1142.4" textLength="48.8" clip-path="url(#terminal-1542824486-line-46)">-dry</text><text class="terminal-1542824486-r5" x="85.4" y="1142.4" textLength="48.8" clip-path="url(#termina [...]
+</text><text class="terminal-1542824486-r4" x="0" y="1166.8" textLength="12.2" clip-path="url(#terminal-1542824486-line-47)">│</text><text class="terminal-1542824486-r5" x="24.4" y="1166.8" textLength="12.2" clip-path="url(#terminal-1542824486-line-47)">-</text><text class="terminal-1542824486-r5" x="36.6" y="1166.8" textLength="85.4" clip-path="url(#terminal-1542824486-line-47)">-github</text><text class="terminal-1542824486-r5" x="122" y="1166.8" textLength="134.2" clip-path="url(#term [...]
+</text><text class="terminal-1542824486-r4" x="0" y="1191.2" textLength="12.2" clip-path="url(#terminal-1542824486-line-48)">│</text><text class="terminal-1542824486-r5" x="24.4" y="1191.2" textLength="12.2" clip-path="url(#terminal-1542824486-line-48)">-</text><text class="terminal-1542824486-r5" x="36.6" y="1191.2" textLength="61" clip-path="url(#terminal-1542824486-line-48)">-help</text><text class="terminal-1542824486-r6" x="280.6" y="1191.2" textLength="24.4" clip-path="url(#termina [...]
+</text><text class="terminal-1542824486-r4" x="0" y="1215.6" textLength="1464" clip-path="url(#terminal-1542824486-line-49)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-1542824486-r2" x="1464" y="1215.6" textLength="12.2" clip-path="url(#terminal-1542824486-line-49)">
 </text>
     </g>
     </g>
diff --git a/scripts/ci/libraries/_initialization.sh b/scripts/ci/libraries/_initialization.sh
index 96d3a65bf7..a7727f23eb 100644
--- a/scripts/ci/libraries/_initialization.sh
+++ b/scripts/ci/libraries/_initialization.sh
@@ -217,26 +217,12 @@ function initialization::initialize_available_integrations() {
 FILES_FOR_REBUILD_CHECK=()
 
 # Determine which files trigger rebuild check
-#
-# !!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!
-#  When you add files here, please make sure to not add files
-#  with the same name. And if you do - make sure that files with the
-#  same name are stored in directories with different name. For
-#  example we have two package.json files here, but they are in
-#  directories with different names (`www` and `ui`).
-#  The problem is that md5 hashes of those files are stored in
-#  `./build/directory` in the same directory as <PARENT_DIR>-<FILE>.md5sum.
-#  For example md5sum of the `airflow/www/package.json` file is stored
-#  as `www-package.json` and `airflow/ui/package.json` as `ui-package.json`,
-#  The file list here changes extremely rarely.
-# !!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!
 function initialization::initialize_files_for_rebuild_check() {
     FILES_FOR_REBUILD_CHECK+=(
         "setup.py"
         "setup.cfg"
         "Dockerfile.ci"
         ".dockerignore"
-        "scripts/docker/compile_www_assets.sh"
         "scripts/docker/common.sh"
         "scripts/docker/install_additional_dependencies.sh"
         "scripts/docker/install_airflow.sh"
@@ -244,11 +230,6 @@ function initialization::initialize_files_for_rebuild_check() {
         "scripts/docker/install_from_docker_context_files.sh"
         "scripts/docker/install_mysql.sh"
         "scripts/docker/install_postgres.sh"
-        "airflow/www/package.json"
-        "airflow/www/yarn.lock"
-        "airflow/www/webpack.config.js"
-        "airflow/ui/package.json"
-        "airflow/ui/yarn.lock"
     )
 }
 
@@ -440,13 +421,6 @@ function initialization::initialize_image_build_variables() {
     AIRFLOW_SOURCES_TO=${AIRFLOW_SOURCES_TO:="/Dockerfile"}
     export AIRFLOW_SOURCES_TO
 
-    # By default no sources are copied to image
-    AIRFLOW_SOURCES_WWW_FROM=${AIRFLOW_SOURCES_WWW_FROM:="Dockerfile"}
-    export AIRFLOW_SOURCES_WWW_FROM
-
-    AIRFLOW_SOURCES_WWW_TO=${AIRFLOW_SOURCES_WWW_TO:="/Dockerfile"}
-    export AIRFLOW_SOURCES_WWW_TO
-
     # By default in scripts production docker image is installed from PyPI package
     export AIRFLOW_INSTALLATION_METHOD=${AIRFLOW_INSTALLATION_METHOD:="apache-airflow"}
 
@@ -735,8 +709,6 @@ Production image build variables:
     AIRFLOW_VERSION_SPECIFICATION: '${AIRFLOW_VERSION_SPECIFICATION}'
     AIRFLOW_SOURCES_FROM: '${AIRFLOW_SOURCES_FROM}'
     AIRFLOW_SOURCES_TO: '${AIRFLOW_SOURCES_TO}'
-    AIRFLOW_SOURCES_WWW_FROM: '${AIRFLOW_SOURCES_WWW_FROM}'
-    AIRFLOW_SOURCES_WWW_TO: '${AIRFLOW_SOURCES_WWW_TO}'
 
 Detected GitHub environment:
 
diff --git a/airflow/www/compile_assets.sh b/scripts/ci/pre_commit/pre_commit_compile_www_assets.py
similarity index 60%
copy from airflow/www/compile_assets.sh
copy to scripts/ci/pre_commit/pre_commit_compile_www_assets.py
index ba4576614d..c7dfae9936 100755
--- a/airflow/www/compile_assets.sh
+++ b/scripts/ci/pre_commit/pre_commit_compile_www_assets.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/usr/bin/env python
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements.  See the NOTICE file
 # distributed with this work for additional information
@@ -15,20 +15,16 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+import subprocess
+from pathlib import Path
 
-set -e
+if __name__ not in ("__main__", "__mp_main__"):
+    raise SystemExit(
+        "This file is intended to be executed as an executable program. You cannot use it as a module."
+        f"To run this script, run the ./{__file__} command"
+    )
 
-cd "$( dirname "${BASH_SOURCE[0]}" )"
-
-MD5SUM_FILE="static/dist/sum.md5"
-readonly MD5SUM_FILE
-
-# first bump up package.json manually, commit and tag
-if [[ -d ./static/dist ]]; then
-  rm -f ./static/dist/*
-fi
-
-yarn install --frozen-lockfile
-yarn run build
-
-find package.json yarn.lock static/css static/js -type f | sort | xargs md5sum > "${MD5SUM_FILE}"
+if __name__ == '__main__':
+    dir = Path("airflow") / "www"
+    subprocess.check_call(['yarn', 'install', '--frozen-lockfile'], cwd=str(dir))
+    subprocess.check_call(['yarn', 'run', 'build'], cwd=str(dir))
diff --git a/scripts/ci/pre_commit/pre_commit_ui_lint.py b/scripts/ci/pre_commit/pre_commit_ui_lint.py
index 5812344a45..eee7526564 100755
--- a/scripts/ci/pre_commit/pre_commit_ui_lint.py
+++ b/scripts/ci/pre_commit/pre_commit_ui_lint.py
@@ -15,8 +15,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-import os
-import sys
+import subprocess
 from pathlib import Path
 
 if __name__ not in ("__main__", "__mp_main__"):
@@ -25,38 +24,7 @@ if __name__ not in ("__main__", "__mp_main__"):
         f"To run this script, run the ./{__file__} command"
     )
 
-AIRFLOW_SOURCES = Path(__file__).parents[3].resolve()
-# allow "False", "false", "True", "true", "f", "F", "t", "T" and the like
-VERBOSE = os.environ.get('VERBOSE', "false")[0].lower() == "t"
-DRY_RUN = os.environ.get('DRY_RUN', "false")[0].lower() == "t"
-
 if __name__ == '__main__':
-    sys.path.insert(0, str(AIRFLOW_SOURCES / "dev" / "breeze" / "src"))
-    from airflow_breeze.global_constants import MOUNT_SELECTED
-    from airflow_breeze.utils.docker_command_utils import get_extra_docker_flags
-    from airflow_breeze.utils.path_utils import create_static_check_volumes
-    from airflow_breeze.utils.run_utils import get_runnable_ci_image, run_command
-
-    airflow_image = get_runnable_ci_image(verbose=VERBOSE, dry_run=DRY_RUN)
-    create_static_check_volumes()
-    cmd_result = run_command(
-        [
-            "docker",
-            "run",
-            "-t",
-            *get_extra_docker_flags(MOUNT_SELECTED),
-            "-e",
-            "SKIP_ENVIRONMENT_INITIALIZATION=true",
-            "-e",
-            "PRINT_INFO_FROM_SCRIPTS=false",
-            "--pull",
-            "never",
-            airflow_image,
-            "-c",
-            'cd airflow/ui && yarn --frozen-lockfile --non-interactive && yarn run lint',
-        ],
-        check=False,
-        verbose=VERBOSE,
-        dry_run=DRY_RUN,
-    )
-    sys.exit(cmd_result.returncode)
+    dir = Path("airflow") / "ui"
+    subprocess.check_call(['yarn', '--frozen-lockfile', '--non-interactive'], cwd=str(dir))
+    subprocess.check_call(['yarn', 'run', 'lint'], cwd=str(dir))
diff --git a/scripts/ci/pre_commit/pre_commit_www_lint.py b/scripts/ci/pre_commit/pre_commit_www_lint.py
index b22750c56d..472c20b98e 100755
--- a/scripts/ci/pre_commit/pre_commit_www_lint.py
+++ b/scripts/ci/pre_commit/pre_commit_www_lint.py
@@ -15,8 +15,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-import os
-import sys
+import subprocess
 from pathlib import Path
 
 if __name__ not in ("__main__", "__mp_main__"):
@@ -25,39 +24,7 @@ if __name__ not in ("__main__", "__mp_main__"):
         f"To run this script, run the ./{__file__} command"
     )
 
-AIRFLOW_SOURCES = Path(__file__).parents[3].resolve()
-GITHUB_REPOSITORY = os.environ.get('GITHUB_REPOSITORY', "apache/airflow")
-# allow "False", "false", "True", "true", "f", "F", "t", "T" and the like
-VERBOSE = os.environ.get('VERBOSE', "false")[0].lower() == "t"
-DRY_RUN = os.environ.get('DRY_RUN', "false")[0].lower() == "t"
-
 if __name__ == '__main__':
-    sys.path.insert(0, str(AIRFLOW_SOURCES / "dev" / "breeze" / "src"))
-    from airflow_breeze.global_constants import MOUNT_SELECTED
-    from airflow_breeze.utils.docker_command_utils import get_extra_docker_flags
-    from airflow_breeze.utils.path_utils import create_static_check_volumes
-    from airflow_breeze.utils.run_utils import get_runnable_ci_image, run_command
-
-    airflow_image = get_runnable_ci_image(verbose=VERBOSE, dry_run=DRY_RUN)
-    create_static_check_volumes()
-    cmd_result = run_command(
-        [
-            "docker",
-            "run",
-            "-t",
-            *get_extra_docker_flags(MOUNT_SELECTED),
-            "-e",
-            "SKIP_ENVIRONMENT_INITIALIZATION=true",
-            "-e",
-            "PRINT_INFO_FROM_SCRIPTS=false",
-            "--pull",
-            "never",
-            airflow_image,
-            "-c",
-            'cd airflow/www && yarn --frozen-lockfile --non-interactive && yarn run lint',
-        ],
-        check=False,
-        verbose=VERBOSE,
-        dry_run=DRY_RUN,
-    )
-    sys.exit(cmd_result.returncode)
+    dir = Path("airflow") / "www"
+    subprocess.check_call(['yarn', '--frozen-lockfile', '--non-interactive'], cwd=dir)
+    subprocess.check_call(['yarn', 'run', 'lint'], cwd=dir)
diff --git a/scripts/docker/compile_www_assets.sh b/scripts/docker/compile_www_assets.sh
deleted file mode 100644
index 7bc87d85e9..0000000000
--- a/scripts/docker/compile_www_assets.sh
+++ /dev/null
@@ -1,71 +0,0 @@
-# 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.
-# shellcheck shell=bash disable=SC2086
-set -euo pipefail
-
-BUILD_TYPE=${BUILD_TYPE="prod"}
-REMOVE_ARTIFACTS=${REMOVE_ARTIFACTS="true"}
-
-COLOR_BLUE=$'\e[34m'
-readonly COLOR_BLUE
-COLOR_RESET=$'\e[0m'
-readonly COLOR_RESET
-
-# Installs additional dependencies passed as Argument to the Docker build command
-function compile_www_assets() {
-    echo
-    echo "${COLOR_BLUE}Compiling www assets: running yarn ${BUILD_TYPE}${COLOR_RESET}"
-    echo
-    local www_dir
-    if [[ ${AIRFLOW_INSTALLATION_METHOD=} == "." ]]; then
-        # In case we are building from sources in production image, we should build the assets
-        www_dir="${AIRFLOW_SOURCES_TO=${AIRFLOW_SOURCES}}/airflow/www"
-    else
-        www_dir="$(python -m site --user-site)/airflow/www"
-    fi
-    pushd ${www_dir} || exit 1
-    set +e
-    yarn run "${BUILD_TYPE}" 2>/tmp/out-yarn-run.txt
-    res=$?
-    if [[ ${res} != 0 ]]; then
-        >&2 echo
-        >&2 echo "Error when running yarn run:"
-        >&2 echo
-        >&2 cat /tmp/out-yarn-run.txt && rm -rf /tmp/out-yarn-run.txt
-        exit 1
-    fi
-    rm -f /tmp/out-yarn-run.txt
-    set -e
-    local md5sum_file
-    md5sum_file="static/dist/sum.md5"
-    readonly md5sum_file
-    find package.json yarn.lock static/css static/js -type f | sort | xargs md5sum > "${md5sum_file}"
-    if [[ ${REMOVE_ARTIFACTS} == "true" ]]; then
-        echo
-        echo "${COLOR_BLUE}Removing generated node modules${COLOR_RESET}"
-        echo
-        rm -rf "${www_dir}/node_modules"
-        rm -vf "${www_dir}"/{package.json,yarn.lock,.eslintignore,.eslintrc,.stylelintignore,.stylelintrc,compile_assets.sh,webpack.config.js}
-    else
-        echo
-        echo "${COLOR_BLUE}Leaving generated node modules${COLOR_RESET}"
-        echo
-    fi
-    popd || exit 1
-}
-
-compile_www_assets
diff --git a/scripts/docker/entrypoint_ci.sh b/scripts/docker/entrypoint_ci.sh
index ae4961ea64..ef6d092779 100755
--- a/scripts/docker/entrypoint_ci.sh
+++ b/scripts/docker/entrypoint_ci.sh
@@ -71,11 +71,6 @@ if [[ ${SKIP_ENVIRONMENT_INITIALIZATION=} != "true" ]]; then
         echo
         echo "${COLOR_BLUE}Using airflow version from current sources${COLOR_RESET}"
         echo
-        if [[ -d "${AIRFLOW_SOURCES}/airflow/www/" ]]; then
-            pushd "${AIRFLOW_SOURCES}/airflow/www/" >/dev/null
-            ./ask_for_recompile_assets_if_needed.sh
-            popd >/dev/null
-        fi
         # Cleanup the logs, tmp when entering the environment
         sudo rm -rf "${AIRFLOW_SOURCES}"/logs/*
         sudo rm -rf "${AIRFLOW_SOURCES}"/tmp/*
@@ -203,6 +198,8 @@ if [[ ${SKIP_ENVIRONMENT_INITIALIZATION=} != "true" ]]; then
     touch /usr/lib/google-cloud-sdk/bin/gcloud
     ln -s -f /usr/bin/gcloud /usr/lib/google-cloud-sdk/bin/gcloud
 
+    in_container_fix_ownership
+
     if [[ ${SKIP_SSH_SETUP="false"} == "false" ]]; then
         # Set up ssh keys
         echo 'yes' | ssh-keygen -t rsa -C your_email@youremail.com -m PEM -P '' -f ~/.ssh/id_rsa \
diff --git a/scripts/docker/prepare_node_modules.sh b/scripts/docker/prepare_node_modules.sh
deleted file mode 100644
index 6c39de9c4d..0000000000
--- a/scripts/docker/prepare_node_modules.sh
+++ /dev/null
@@ -1,52 +0,0 @@
-# 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.
-# shellcheck shell=bash disable=SC2086
-set -euo pipefail
-
-COLOR_BLUE=$'\e[34m'
-readonly COLOR_BLUE
-COLOR_RESET=$'\e[0m'
-readonly COLOR_RESET
-
-# Prepares node modules needed to compile WWW assets
-function prepare_node_modules() {
-    echo
-    echo "${COLOR_BLUE}Preparing node modules${COLOR_RESET}"
-    echo
-    local www_dir
-    if [[ ${AIRFLOW_INSTALLATION_METHOD=} == "." ]]; then
-        # In case we are building from sources in production image, we should build the assets
-        www_dir="${AIRFLOW_SOURCES_TO=${AIRFLOW_SOURCES}}/airflow/www"
-    else
-        www_dir="$(python -m site --user-site)/airflow/www"
-    fi
-    pushd ${www_dir} || exit 1
-    set +e
-    yarn install --frozen-lockfile --no-cache 2>/tmp/out-yarn-install.txt
-    local res=$?
-    if [[ ${res} != 0 ]]; then
-        >&2 echo
-        >&2 echo "Error when running yarn install:"
-        >&2 echo
-        >&2 cat /tmp/out-yarn-install.txt && rm -f /tmp/out-yarn-install.txt
-        exit 1
-    fi
-    rm -f /tmp/out-yarn-install.txt
-    popd || exit 1
-}
-
-prepare_node_modules
diff --git a/scripts/in_container/_in_container_utils.sh b/scripts/in_container/_in_container_utils.sh
index 66f2e6b083..cf35acc943 100644
--- a/scripts/in_container/_in_container_utils.sh
+++ b/scripts/in_container/_in_container_utils.sh
@@ -127,23 +127,21 @@ function in_container_fix_ownership() {
         DIRECTORIES_TO_FIX=(
             "/dist"
             "/files"
-            "/root/.aws"
-            "/root/.azure"
-            "/root/.config/gcloud"
-            "/root/.docker"
             "/opt/airflow/logs"
             "/opt/airflow/docs"
             "/opt/airflow/dags"
-            "${AIRFLOW_SOURCES}"
+            "/opt/airflow/airflow/"
         )
-        echo
-        echo "${COLOR_BLUE}Fixing ownership of generated files as Host OS is ${HOST_OS}${COLOR_RESET}"
-        echo "${COLOR_BLUE}Directories: ${DIRECTORIES_TO_FIX[*]}${COLOR_RESET}"
-        echo
-        find "${DIRECTORIES_TO_FIX[@]}" -print0 -user root 2>/dev/null |
-            xargs --null chown "${HOST_USER_ID}.${HOST_GROUP_ID}" --no-dereference || true >/dev/null 2>&1
-        echo "${COLOR_BLUE}Fixed ownership of generated files."
-        echo
+        count_matching=$(find "${DIRECTORIES_TO_FIX[@]}" -mindepth 1 -user root -printf . 2>/dev/null | wc -m || true)
+        if [[ ${count_matching=} != "0" && ${count_matching=} != "" ]]; then
+            echo
+            echo "${COLOR_BLUE}Fixing ownership of ${count_matching} root owned files on ${HOST_OS}${COLOR_RESET}"
+            echo
+            find "${DIRECTORIES_TO_FIX[@]}" -mindepth 1 -user root -print0 2> /dev/null |
+                xargs --null chown "${HOST_USER_ID}.${HOST_GROUP_ID}" --no-dereference || true >/dev/null 2>&1
+            echo "${COLOR_BLUE}Fixed ownership of generated files${COLOR_RESET}."
+            echo
+        fi
      else
         echo
         echo "${COLOR_YELLOW}Skip fixing ownership of generated files as Host OS is ${HOST_OS}${COLOR_RESET}"
diff --git a/scripts/in_container/run_prepare_airflow_packages.sh b/scripts/in_container/run_prepare_airflow_packages.sh
index 791724d2bb..50d4fb8f8a 100755
--- a/scripts/in_container/run_prepare_airflow_packages.sh
+++ b/scripts/in_container/run_prepare_airflow_packages.sh
@@ -63,7 +63,7 @@ function prepare_airflow_packages() {
     fi
 
     # Prepare airflow's wheel
-    PYTHONUNBUFFERED=1 python setup.py compile_assets "${tag_build[@]}" "${packages[@]}"
+    PYTHONUNBUFFERED=1 python setup.py "${tag_build[@]}" "${packages[@]}"
 
     # clean-up
     rm -rf -- *egg-info*
diff --git a/airflow/www/compile_assets.sh b/tests/internal_api/__init__.py
old mode 100755
new mode 100644
similarity index 67%
copy from airflow/www/compile_assets.sh
copy to tests/internal_api/__init__.py
index ba4576614d..13a83393a9
--- a/airflow/www/compile_assets.sh
+++ b/tests/internal_api/__init__.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env bash
 # 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
@@ -15,20 +14,3 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-
-set -e
-
-cd "$( dirname "${BASH_SOURCE[0]}" )"
-
-MD5SUM_FILE="static/dist/sum.md5"
-readonly MD5SUM_FILE
-
-# first bump up package.json manually, commit and tag
-if [[ -d ./static/dist ]]; then
-  rm -f ./static/dist/*
-fi
-
-yarn install --frozen-lockfile
-yarn run build
-
-find package.json yarn.lock static/css static/js -type f | sort | xargs md5sum > "${MD5SUM_FILE}"
diff --git a/airflow/www/compile_assets.sh b/tests/system/__init__.py
old mode 100755
new mode 100644
similarity index 67%
copy from airflow/www/compile_assets.sh
copy to tests/system/__init__.py
index ba4576614d..13a83393a9
--- a/airflow/www/compile_assets.sh
+++ b/tests/system/__init__.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env bash
 # 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
@@ -15,20 +14,3 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-
-set -e
-
-cd "$( dirname "${BASH_SOURCE[0]}" )"
-
-MD5SUM_FILE="static/dist/sum.md5"
-readonly MD5SUM_FILE
-
-# first bump up package.json manually, commit and tag
-if [[ -d ./static/dist ]]; then
-  rm -f ./static/dist/*
-fi
-
-yarn install --frozen-lockfile
-yarn run build
-
-find package.json yarn.lock static/css static/js -type f | sort | xargs md5sum > "${MD5SUM_FILE}"
diff --git a/airflow/www/compile_assets.sh b/tests/system/providers/__init__.py
old mode 100755
new mode 100644
similarity index 67%
copy from airflow/www/compile_assets.sh
copy to tests/system/providers/__init__.py
index ba4576614d..13a83393a9
--- a/airflow/www/compile_assets.sh
+++ b/tests/system/providers/__init__.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env bash
 # 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
@@ -15,20 +14,3 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-
-set -e
-
-cd "$( dirname "${BASH_SOURCE[0]}" )"
-
-MD5SUM_FILE="static/dist/sum.md5"
-readonly MD5SUM_FILE
-
-# first bump up package.json manually, commit and tag
-if [[ -d ./static/dist ]]; then
-  rm -f ./static/dist/*
-fi
-
-yarn install --frozen-lockfile
-yarn run build
-
-find package.json yarn.lock static/css static/js -type f | sort | xargs md5sum > "${MD5SUM_FILE}"
diff --git a/airflow/www/compile_assets.sh b/tests/system/providers/apache/__init__.py
old mode 100755
new mode 100644
similarity index 67%
copy from airflow/www/compile_assets.sh
copy to tests/system/providers/apache/__init__.py
index ba4576614d..13a83393a9
--- a/airflow/www/compile_assets.sh
+++ b/tests/system/providers/apache/__init__.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env bash
 # 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
@@ -15,20 +14,3 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-
-set -e
-
-cd "$( dirname "${BASH_SOURCE[0]}" )"
-
-MD5SUM_FILE="static/dist/sum.md5"
-readonly MD5SUM_FILE
-
-# first bump up package.json manually, commit and tag
-if [[ -d ./static/dist ]]; then
-  rm -f ./static/dist/*
-fi
-
-yarn install --frozen-lockfile
-yarn run build
-
-find package.json yarn.lock static/css static/js -type f | sort | xargs md5sum > "${MD5SUM_FILE}"
diff --git a/airflow/www/compile_assets.sh b/tests/system/providers/google/__init__.py
old mode 100755
new mode 100644
similarity index 67%
rename from airflow/www/compile_assets.sh
rename to tests/system/providers/google/__init__.py
index ba4576614d..13a83393a9
--- a/airflow/www/compile_assets.sh
+++ b/tests/system/providers/google/__init__.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env bash
 # 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
@@ -15,20 +14,3 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-
-set -e
-
-cd "$( dirname "${BASH_SOURCE[0]}" )"
-
-MD5SUM_FILE="static/dist/sum.md5"
-readonly MD5SUM_FILE
-
-# first bump up package.json manually, commit and tag
-if [[ -d ./static/dist ]]; then
-  rm -f ./static/dist/*
-fi
-
-yarn install --frozen-lockfile
-yarn run build
-
-find package.json yarn.lock static/css static/js -type f | sort | xargs md5sum > "${MD5SUM_FILE}"