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

potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 07e40bd601 Move pre-commit for local-file-mounts to breeze shell 
(#35878)
07e40bd601 is described below

commit 07e40bd601e9d2fd6f6326583596d16c4db94eb2
Author: Jarek Potiuk <[email protected]>
AuthorDate: Mon Nov 27 17:43:37 2023 +0100

    Move pre-commit for local-file-mounts to breeze shell (#35878)
    
    The pre-commit is moved to be run via breeze shell. The code to do
    so has been migrated to new breeze command.
---
 BREEZE.rst                                         | 14 ++-
 CI.rst                                             |  2 +-
 .../src/airflow_breeze/commands/setup_commands.py  | 49 +++++++++++
 .../commands/setup_commands_config.py              |  2 +
 dev/breeze/src/airflow_breeze/utils/path_utils.py  |  1 +
 images/breeze/output_setup.svg                     | 24 +++---
 images/breeze/output_setup.txt                     |  2 +-
 .../output_setup_check-all-params-in-groups.svg    |  6 +-
 .../output_setup_check-all-params-in-groups.txt    |  2 +-
 .../output_setup_regenerate-command-images.svg     | 32 ++++---
 .../output_setup_regenerate-command-images.txt     |  2 +-
 .../output_setup_synchronize-local-mounts.svg      | 99 ++++++++++++++++++++++
 .../output_setup_synchronize-local-mounts.txt      |  1 +
 .../ci/pre_commit/pre_commit_local_yml_mounts.py   | 46 +++-------
 14 files changed, 214 insertions(+), 68 deletions(-)

diff --git a/BREEZE.rst b/BREEZE.rst
index ee350cbc8e..a91f1a9119 100644
--- a/BREEZE.rst
+++ b/BREEZE.rst
@@ -93,6 +93,7 @@ Here is an example configuration with more than 200GB disk 
space for Docker:
 - 5. In some cases you might make sure that "Allow the default Docker socket to
   be used" in "Advanced" tab of "Docker Desktop" settings is checked
 
+
 .. raw:: html
 
    <div align="center">
@@ -1807,7 +1808,7 @@ check if there are any images that need regeneration.
   :alt: Breeze setup regenerate-command-images
 
 Breeze check-all-params-in-groups
-...................
+.................................
 
 When you add a breeze command or modify a parameter, you are also supposed to 
make sure that "rich groups"
 for the command is present and that all parameters are assigned to the right 
group so they can be
@@ -1818,6 +1819,17 @@ nicely presented in ``--help`` output. You can check 
that via ``check-all-params
   :width: 100%
   :alt: Breeze setup check-all-params-in-group
 
+Breeze synchronize-local-mounts
+...............................
+
+When you add volumes mounted to docker, they need to be added in 
``docker_command_utils.py`` - so that they
+are added by plain ``docker`` command, but they also need to be synchronized 
with ``local.yml``. This can be
+done via ``synchronize-local-mounts`` command.
+
+.. image:: ./images/breeze/output_setup_synchronize-local-mounts.svg
+  :target: 
https://raw.githubusercontent.com/apache/airflow/main/images/breeze/output_setup_synchronize-local-mounts.svg
+  :width: 100%
+  :alt: Breeze setup synchronize-local-mounts
 
 CI tasks
 --------
diff --git a/CI.rst b/CI.rst
index 313802f58f..e8d7200027 100644
--- a/CI.rst
+++ b/CI.rst
@@ -535,7 +535,7 @@ Depending whether the scripts are run locally via `Breeze 
<BREEZE.rst>`_ or whet
 are run in ``Build Images`` or ``Tests`` workflows they can take different 
values.
 
 You can use those variables when you try to reproduce the build locally 
(alternatively you can pass
-those via command line flags passed to ``breeze`` command.
+those via corresponding command line flags passed to ``breeze shell`` command.
 
 
+-----------------------------------------+-------------+--------------+------------+-------------------------------------------------+
 | Variable                                | Local       | Build Images | CI    
     | Comment                                         |
diff --git a/dev/breeze/src/airflow_breeze/commands/setup_commands.py 
b/dev/breeze/src/airflow_breeze/commands/setup_commands.py
index f8ed16c314..d7d1e2db9d 100644
--- a/dev/breeze/src/airflow_breeze/commands/setup_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/setup_commands.py
@@ -47,8 +47,10 @@ from airflow_breeze.utils.common_options import (
 from airflow_breeze.utils.confirm import STANDARD_TIMEOUT, Answer, user_confirm
 from airflow_breeze.utils.console import get_console, get_stderr_console
 from airflow_breeze.utils.custom_param_types import BetterChoice
+from airflow_breeze.utils.docker_command_utils import 
VOLUMES_FOR_SELECTED_MOUNTS
 from airflow_breeze.utils.path_utils import (
     AIRFLOW_SOURCES_ROOT,
+    SCRIPTS_CI_DOCKER_COMPOSE_LOCAL_YAML_FILE,
     get_installation_airflow_sources,
     get_installation_sources_config_metadata_hash,
     get_package_setup_metadata_hash,
@@ -657,3 +659,50 @@ def regenerate_command_images(command: tuple[str, ...], 
force: bool, check_only:
 def check_all_params_in_groups(command: tuple[str, ...]):
     return_code = check_that_all_params_are_in_groups(commands=command)
     sys.exit(return_code)
+
+
+def _insert_documentation(file_path: Path, content: list[str], header: str, 
footer: str):
+    text = file_path.read_text().splitlines(keepends=True)
+    replacing = False
+    result: list[str] = []
+    for line in text:
+        if line.strip().startswith(header.strip()):
+            replacing = True
+            result.append(line)
+            result.extend(content)
+        if line.strip().startswith(footer.strip()):
+            replacing = False
+        if not replacing:
+            result.append(line)
+    src = "".join(result)
+    file_path.write_text(src)
+
+
[email protected](
+    name="synchronize-local-mounts",
+    help="Synchronize local mounts between python files and docker compose 
yamls.",
+)
+@option_verbose
+@option_dry_run
+def synchronize_local_mounts():
+    get_console().print("[info]Synchronizing local mounts between python files 
and docker compose yamls.[/]")
+    mounts_header = (
+        "        # START automatically generated volumes from "
+        "VOLUMES_FOR_SELECTED_MOUNTS in docker_command_utils.py"
+    )
+    mounts_footer = (
+        "        # END automatically generated volumes from "
+        "VOLUMES_FOR_SELECTED_MOUNTS in docker_command_utils.py"
+    )
+    prefix = "      "
+    volumes = []
+    for src, dest in VOLUMES_FOR_SELECTED_MOUNTS:
+        volumes.extend(
+            [
+                prefix + "- type: bind\n",
+                prefix + f"  source: ../../../{src}\n",
+                prefix + f"  target: {dest}\n",
+            ]
+        )
+    _insert_documentation(SCRIPTS_CI_DOCKER_COMPOSE_LOCAL_YAML_FILE, volumes, 
mounts_header, mounts_footer)
+    get_console().print("[success]Synchronized local mounts.[/]")
diff --git a/dev/breeze/src/airflow_breeze/commands/setup_commands_config.py 
b/dev/breeze/src/airflow_breeze/commands/setup_commands_config.py
index 1da86bb56a..30a67a213c 100644
--- a/dev/breeze/src/airflow_breeze/commands/setup_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/setup_commands_config.py
@@ -25,6 +25,7 @@ SETUP_COMMANDS: dict[str, str | list[str]] = {
         "config",
         "check-all-params-in-groups",
         "regenerate-command-images",
+        "synchronize-local-mounts",
         "command-hash-export",
         "version",
     ],
@@ -79,5 +80,6 @@ SETUP_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] 
= {
             ],
         },
     ],
+    "breeze setup synchronize-local-mounts": [],
     "breeze setup version": [],
 }
diff --git a/dev/breeze/src/airflow_breeze/utils/path_utils.py 
b/dev/breeze/src/airflow_breeze/utils/path_utils.py
index cfda50b802..426c95e98b 100644
--- a/dev/breeze/src/airflow_breeze/utils/path_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/path_utils.py
@@ -291,6 +291,7 @@ DIST_DIR = AIRFLOW_SOURCES_ROOT / "dist"
 DOCS_DIR = AIRFLOW_SOURCES_ROOT / "docs"
 SCRIPTS_CI_DIR = AIRFLOW_SOURCES_ROOT / "scripts" / "ci"
 SCRIPTS_CI_DOCKER_COMPOSE_DIR = SCRIPTS_CI_DIR / "docker-compose"
+SCRIPTS_CI_DOCKER_COMPOSE_LOCAL_YAML_FILE = SCRIPTS_CI_DOCKER_COMPOSE_DIR / 
"local.yml"
 GENERATED_DOCKER_COMPOSE_ENV_FILE = SCRIPTS_CI_DOCKER_COMPOSE_DIR / 
"_generated_docker_compose.env"
 GENERATED_DOCKER_ENV_FILE = SCRIPTS_CI_DOCKER_COMPOSE_DIR / 
"_generated_docker.env"
 GENERATED_DOCKER_LOCK_FILE = SCRIPTS_CI_DOCKER_COMPOSE_DIR / "_generated.lock"
diff --git a/images/breeze/output_setup.svg b/images/breeze/output_setup.svg
index 9b165e4524..c747a1eea7 100644
--- a/images/breeze/output_setup.svg
+++ b/images/breeze/output_setup.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 440.4" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 464.79999999999995" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -42,7 +42,7 @@
 
     <defs>
     <clipPath id="breeze-setup-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="389.4" />
+      <rect x="0" y="0" width="1463.0" height="413.79999999999995" />
     </clipPath>
     <clipPath id="breeze-setup-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -89,9 +89,12 @@
 <clipPath id="breeze-setup-line-14">
     <rect x="0" y="343.1" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-setup-line-15">
+    <rect x="0" y="367.5" 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="438.4" rx="8"/><text 
class="breeze-setup-title" fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;setup</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="462.8" rx="8"/><text 
class="breeze-setup-title" fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;setup</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -110,13 +113,14 @@
 </text><text class="breeze-setup-r5" x="0" y="166.4" textLength="12.2" 
clip-path="url(#breeze-setup-line-6)">│</text><text class="breeze-setup-r4" 
x="24.4" y="166.4" textLength="12.2" 
clip-path="url(#breeze-setup-line-6)">-</text><text class="breeze-setup-r4" 
x="36.6" y="166.4" textLength="61" 
clip-path="url(#breeze-setup-line-6)">-help</text><text class="breeze-setup-r6" 
x="122" y="166.4" textLength="24.4" 
clip-path="url(#breeze-setup-line-6)">-h</text><text class="breeze-setup-r1" 
x="1 [...]
 </text><text class="breeze-setup-r5" x="0" y="190.8" textLength="1464" 
clip-path="url(#breeze-setup-line-7)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-setup-r1" x="1464" y="190.8" textLength="12.2" 
clip-path="url(#breeze-setup-line-7)">
 </text><text class="breeze-setup-r5" x="0" y="215.2" textLength="24.4" 
clip-path="url(#breeze-setup-line-8)">╭─</text><text class="breeze-setup-r5" 
x="24.4" y="215.2" textLength="85.4" 
clip-path="url(#breeze-setup-line-8)">&#160;Setup&#160;</text><text 
class="breeze-setup-r5" x="109.8" y="215.2" textLength="1329.8" 
clip-path="url(#breeze-setup-line-8)">─────────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="breeze-s [...]
-</text><text class="breeze-setup-r5" x="0" y="239.6" textLength="12.2" 
clip-path="url(#breeze-setup-line-9)">│</text><text class="breeze-setup-r4" 
x="24.4" y="239.6" textLength="402.6" 
clip-path="url(#breeze-setup-line-9)">autocomplete&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-setup-r1" x="451.4" y="239.6" textLength="988.2" 
clip-path="url(#breeze-setup-line-9)">Enables&#160;auto [...]
-</text><text class="breeze-setup-r5" x="0" y="264" textLength="12.2" 
clip-path="url(#breeze-setup-line-10)">│</text><text class="breeze-setup-r4" 
x="24.4" y="264" textLength="402.6" 
clip-path="url(#breeze-setup-line-10)">self-upgrade&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-setup-r1" x="451.4" y="264" textLength="988.2" 
clip-path="url(#breeze-setup-line-10)">Self&#160;upgrade&#1 [...]
-</text><text class="breeze-setup-r5" x="0" y="288.4" textLength="12.2" 
clip-path="url(#breeze-setup-line-11)">│</text><text class="breeze-setup-r4" 
x="24.4" y="288.4" textLength="402.6" 
clip-path="url(#breeze-setup-line-11)">config&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-setup-r1" x="451.4" y="288.4" textLength="988.2" 
clip-path="url(#breeze- [...]
-</text><text class="breeze-setup-r5" x="0" y="312.8" textLength="12.2" 
clip-path="url(#breeze-setup-line-12)">│</text><text class="breeze-setup-r4" 
x="24.4" y="312.8" textLength="402.6" 
clip-path="url(#breeze-setup-line-12)">check-all-params-in-groups&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-setup-r1" x="451.4" y="312.8" textLength="988.2" 
clip-path="url(#breeze-setup-line-12)">Check&#160;that&#160;all&#160;parameters&#160;are&#160;put&#160;in&#160;groups.&#160
 [...]
-</text><text class="breeze-setup-r5" x="0" y="337.2" textLength="12.2" 
clip-path="url(#breeze-setup-line-13)">│</text><text class="breeze-setup-r4" 
x="24.4" y="337.2" textLength="402.6" 
clip-path="url(#breeze-setup-line-13)">regenerate-command-images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-setup-r1" x="451.4" y="337.2" textLength="988.2" 
clip-path="url(#breeze-setup-line-13)">Regenerate&#160;breeze&#160;command&#160;images.&#160;&#160;&#160;&#160;&#160;&
 [...]
-</text><text class="breeze-setup-r5" x="0" y="361.6" textLength="12.2" 
clip-path="url(#breeze-setup-line-14)">│</text><text class="breeze-setup-r4" 
x="24.4" y="361.6" textLength="402.6" 
clip-path="url(#breeze-setup-line-14)">version&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-setup-r1" x="451.4" y="361.6" textLength="988.2" 
clip-path="url(#breeze-setup [...]
-</text><text class="breeze-setup-r5" x="0" y="386" textLength="1464" 
clip-path="url(#breeze-setup-line-15)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-setup-r1" x="1464" y="386" textLength="12.2" 
clip-path="url(#breeze-setup-line-15)">
+</text><text class="breeze-setup-r5" x="0" y="239.6" textLength="12.2" 
clip-path="url(#breeze-setup-line-9)">│</text><text class="breeze-setup-r4" 
x="24.4" y="239.6" textLength="378.2" 
clip-path="url(#breeze-setup-line-9)">autocomplete&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-setup-r1" x="427" y="239.6" textLength="1012.6" 
clip-path="url(#breeze-setup-line-9)">Enables&#160;autocompletion&#1 [...]
+</text><text class="breeze-setup-r5" x="0" y="264" textLength="12.2" 
clip-path="url(#breeze-setup-line-10)">│</text><text class="breeze-setup-r4" 
x="24.4" y="264" textLength="378.2" 
clip-path="url(#breeze-setup-line-10)">self-upgrade&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-setup-r1" x="427" y="264" textLength="1012.6" 
clip-path="url(#breeze-setup-line-10)">Self&#160;upgrade&#160;Breeze.&#1 [...]
+</text><text class="breeze-setup-r5" x="0" y="288.4" textLength="12.2" 
clip-path="url(#breeze-setup-line-11)">│</text><text class="breeze-setup-r4" 
x="24.4" y="288.4" textLength="378.2" 
clip-path="url(#breeze-setup-line-11)">config&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-setup-r1" x="427" y="288.4" textLength="1012.6" 
clip-path="url(#breeze-setup-line-11 [...]
+</text><text class="breeze-setup-r5" x="0" y="312.8" textLength="12.2" 
clip-path="url(#breeze-setup-line-12)">│</text><text class="breeze-setup-r4" 
x="24.4" y="312.8" textLength="378.2" 
clip-path="url(#breeze-setup-line-12)">check-all-params-in-groups&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-setup-r1" x="427" y="312.8" textLength="1012.6" 
clip-path="url(#breeze-setup-line-12)">Check&#160;that&#160;all&#160;parameters&#160;are&#160;put&#160;in&#160;groups.&#160;&#160;&#160;
 [...]
+</text><text class="breeze-setup-r5" x="0" y="337.2" textLength="12.2" 
clip-path="url(#breeze-setup-line-13)">│</text><text class="breeze-setup-r4" 
x="24.4" y="337.2" textLength="378.2" 
clip-path="url(#breeze-setup-line-13)">regenerate-command-images&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-setup-r1" x="427" y="337.2" textLength="1012.6" 
clip-path="url(#breeze-setup-line-13)">Regenerate&#160;breeze&#160;command&#160;images.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
+</text><text class="breeze-setup-r5" x="0" y="361.6" textLength="12.2" 
clip-path="url(#breeze-setup-line-14)">│</text><text class="breeze-setup-r4" 
x="24.4" y="361.6" textLength="378.2" 
clip-path="url(#breeze-setup-line-14)">synchronize-local-mounts&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-setup-r1" x="427" y="361.6" textLength="1012.6" 
clip-path="url(#breeze-setup-line-14)">Synchronize&#160;local&#160;mounts&#160;between&#160;python&#160;files&#160;and&#160;do
 [...]
+</text><text class="breeze-setup-r5" x="0" y="386" textLength="12.2" 
clip-path="url(#breeze-setup-line-15)">│</text><text class="breeze-setup-r4" 
x="24.4" y="386" textLength="378.2" 
clip-path="url(#breeze-setup-line-15)">version&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-setup-r1" x="427" y="386" textLength="1012.6" 
clip-path="url(#breeze-setup-line-15)">Print&#1 [...]
+</text><text class="breeze-setup-r5" x="0" y="410.4" textLength="1464" 
clip-path="url(#breeze-setup-line-16)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-setup-r1" x="1464" y="410.4" textLength="12.2" 
clip-path="url(#breeze-setup-line-16)">
 </text>
     </g>
     </g>
diff --git a/images/breeze/output_setup.txt b/images/breeze/output_setup.txt
index 47cbfbccca..b8f9048b91 100644
--- a/images/breeze/output_setup.txt
+++ b/images/breeze/output_setup.txt
@@ -1 +1 @@
-f7bc45512df20d7ddcbcc09070d0eae4
+d4a4f1b405f912fa234ff4116068290a
diff --git a/images/breeze/output_setup_check-all-params-in-groups.svg 
b/images/breeze/output_setup_check-all-params-in-groups.svg
index 7cbbe80389..cd1e29e11b 100644
--- a/images/breeze/output_setup_check-all-params-in-groups.svg
+++ b/images/breeze/output_setup_check-all-params-in-groups.svg
@@ -173,9 +173,9 @@
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="508" 
textLength="12.2" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-20)">│</text><text 
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="508" 
textLength="1256.6" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-20)">release-management:update-constraints&#160;|&#160;release-management:verify-provider-packages&#160;|&#160;sbom&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" 
y="532.4" textLength="12.2" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-21)">│</text><text 
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="532.4" 
textLength="1256.6" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-21)">sbom:build-all-airflow-images&#160;|&#160;sbom:generate-providers-requirements&#160;|&#160;sbom:update-sbom-information&#160;|&#160;&#160;</text><text
 class="b [...]
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" 
y="556.8" textLength="12.2" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-22)">│</text><text 
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="556.8" 
textLength="1256.6" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-22)">setup&#160;|&#160;setup:autocomplete&#160;|&#160;setup:check-all-params-in-groups&#160;|&#160;setup:config&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" 
y="581.2" textLength="12.2" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-23)">│</text><text 
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="581.2" 
textLength="1256.6" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-23)">setup:regenerate-command-images&#160;|&#160;setup:self-upgrade&#160;|&#160;setup:version&#160;|&#160;shell&#160;|&#160;start-airflow&#160;|&#160;&#160;&#160;&#
 [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" 
y="605.6" textLength="12.2" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-24)">│</text><text 
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="605.6" 
textLength="1256.6" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-24)">static-checks&#160;|&#160;testing&#160;|&#160;testing:db-tests&#160;|&#160;testing:docker-compose-tests&#160;|&#160;testing:helm-tests&#160;|&#160;&#160;&#160;
 [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="630" 
textLength="12.2" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-25)">│</text><text 
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="630" 
textLength="1256.6" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-25)">testing:integration-tests&#160;|&#160;testing:non-db-tests&#160;|&#160;testing:tests)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" 
y="581.2" textLength="12.2" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-23)">│</text><text 
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="581.2" 
textLength="1256.6" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-23)">setup:regenerate-command-images&#160;|&#160;setup:self-upgrade&#160;|&#160;setup:synchronize-local-mounts&#160;|&#160;setup:version&#160;|</text><text
 class="b [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" 
y="605.6" textLength="12.2" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-24)">│</text><text 
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="605.6" 
textLength="1256.6" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-24)">shell&#160;|&#160;start-airflow&#160;|&#160;static-checks&#160;|&#160;testing&#160;|&#160;testing:db-tests&#160;|&#160;testing:docker-compose-tests&#160;|&#160
 [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="630" 
textLength="12.2" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-25)">│</text><text 
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="630" 
textLength="1256.6" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-25)">testing:helm-tests&#160;|&#160;testing:integration-tests&#160;|&#160;testing:non-db-tests&#160;|&#160;testing:tests)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" 
y="654.4" textLength="1464" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-26)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="654.4" 
textLength="12.2" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-26)">
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" 
y="678.8" textLength="24.4" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-27)">╭─</text><text
 class="breeze-setup-check-all-params-in-groups-r5" x="24.4" y="678.8" 
textLength="195.2" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-27)">&#160;Common&#160;options&#160;</text><text
 class="breeze-setup-check-all-params-in-groups-r5" x="219.6" y="678.8" 
textLength="1220" clip-path="url(#breeze-se [...]
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" 
y="703.2" textLength="12.2" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-28)">│</text><text 
class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="703.2" 
textLength="12.2" 
clip-path="url(#breeze-setup-check-all-params-in-groups-line-28)">-</text><text 
class="breeze-setup-check-all-params-in-groups-r4" x="36.6" y="703.2" 
textLength="97.6" clip-path="url(#breeze-setup-check-all-params-in-groups-li 
[...]
diff --git a/images/breeze/output_setup_check-all-params-in-groups.txt 
b/images/breeze/output_setup_check-all-params-in-groups.txt
index bd16df6cd4..5d60a82702 100644
--- a/images/breeze/output_setup_check-all-params-in-groups.txt
+++ b/images/breeze/output_setup_check-all-params-in-groups.txt
@@ -1 +1 @@
-987e89df80114d4b5bc7fa4a3ba6d569
+dc5302a16d491b4567469e6e1b562186
diff --git a/images/breeze/output_setup_regenerate-command-images.svg 
b/images/breeze/output_setup_regenerate-command-images.svg
index d3fd828808..d6195eb298 100644
--- a/images/breeze/output_setup_regenerate-command-images.svg
+++ b/images/breeze/output_setup_regenerate-command-images.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 904.0" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 928.4" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-setup-regenerate-command-images-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="853.0" />
+      <rect x="0" y="0" width="1463.0" height="877.4" />
     </clipPath>
     <clipPath id="breeze-setup-regenerate-command-images-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -147,9 +147,12 @@
 <clipPath id="breeze-setup-regenerate-command-images-line-33">
     <rect x="0" y="806.7" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-setup-regenerate-command-images-line-34">
+    <rect x="0" y="831.1" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="902" rx="8"/><text 
class="breeze-setup-regenerate-command-images-title" fill="#c5c8c6" 
text-anchor="middle" x="740" 
y="27">Command:&#160;setup&#160;regenerate-command-images</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="926.4" rx="8"/><text 
class="breeze-setup-regenerate-command-images-title" fill="#c5c8c6" 
text-anchor="middle" x="740" 
y="27">Command:&#160;setup&#160;regenerate-command-images</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -183,17 +186,18 @@
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="532.4" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-21)">│</text><text 
class="breeze-setup-regenerate-command-images-r6" x="219.6" y="532.4" 
textLength="1220" 
clip-path="url(#breeze-setup-regenerate-command-images-line-21)">release-management:update-constraints&#160;|&#160;release-management:verify-provider-packages&#160;|&#160;sbom&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="556.8" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-22)">│</text><text 
class="breeze-setup-regenerate-command-images-r6" x="219.6" y="556.8" 
textLength="1220" 
clip-path="url(#breeze-setup-regenerate-command-images-line-22)">sbom:build-all-airflow-images&#160;|&#160;sbom:generate-providers-requirements&#160;|&#160;sbom:update-sbom-information&#160;</text><text
 class="breeze-setup-regen [...]
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="581.2" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-23)">│</text><text 
class="breeze-setup-regenerate-command-images-r6" x="219.6" y="581.2" 
textLength="1220" 
clip-path="url(#breeze-setup-regenerate-command-images-line-23)">|&#160;setup&#160;|&#160;setup:autocomplete&#160;|&#160;setup:check-all-params-in-groups&#160;|&#160;setup:config&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="605.6" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-24)">│</text><text 
class="breeze-setup-regenerate-command-images-r6" x="219.6" y="605.6" 
textLength="1220" 
clip-path="url(#breeze-setup-regenerate-command-images-line-24)">setup:regenerate-command-images&#160;|&#160;setup:self-upgrade&#160;|&#160;setup:version&#160;|&#160;shell&#160;|&#160;start-airflow&#160;|&#160;&#160;&#160;&#160;
 [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="630" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-25)">│</text><text 
class="breeze-setup-regenerate-command-images-r6" x="219.6" y="630" 
textLength="1220" 
clip-path="url(#breeze-setup-regenerate-command-images-line-25)">static-checks&#160;|&#160;testing&#160;|&#160;testing:db-tests&#160;|&#160;testing:docker-compose-tests&#160;|&#160;testing:helm-tests&#160;|&#160;&#160;&#160;&#160;</
 [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="654.4" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-26)">│</text><text 
class="breeze-setup-regenerate-command-images-r6" x="219.6" y="654.4" 
textLength="1220" 
clip-path="url(#breeze-setup-regenerate-command-images-line-26)">testing:integration-tests&#160;|&#160;testing:non-db-tests&#160;|&#160;testing:tests)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="678.8" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-27)">│</text><text 
class="breeze-setup-regenerate-command-images-r4" x="24.4" y="678.8" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-27)">-</text><text 
class="breeze-setup-regenerate-command-images-r4" x="36.6" y="678.8" 
textLength="73.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-27) [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="703.2" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-28)">│</text><text 
class="breeze-setup-regenerate-command-images-r1" x="219.6" y="703.2" 
textLength="170.8" 
clip-path="url(#breeze-setup-regenerate-command-images-line-28)">together&#160;with&#160;</text><text
 class="breeze-setup-regenerate-command-images-r4" x="390.4" y="703.2" 
textLength="12.2" clip-path="url(#breeze-setup-regenera [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="727.6" 
textLength="1464" 
clip-path="url(#breeze-setup-regenerate-command-images-line-29)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-setup-regenerate-command-images-r1" x="1464" y="727.6" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-29)">
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="752" 
textLength="24.4" 
clip-path="url(#breeze-setup-regenerate-command-images-line-30)">╭─</text><text 
class="breeze-setup-regenerate-command-images-r5" x="24.4" y="752" 
textLength="195.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-30)">&#160;Common&#160;options&#160;</text><text
 class="breeze-setup-regenerate-command-images-r5" x="219.6" y="752" 
textLength="1220" clip-path="url(#breeze-setup-regener [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="776.4" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-31)">│</text><text 
class="breeze-setup-regenerate-command-images-r4" x="24.4" y="776.4" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-31)">-</text><text 
class="breeze-setup-regenerate-command-images-r4" x="36.6" y="776.4" 
textLength="97.6" 
clip-path="url(#breeze-setup-regenerate-command-images-line-31) [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="800.8" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-32)">│</text><text 
class="breeze-setup-regenerate-command-images-r4" x="24.4" y="800.8" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-32)">-</text><text 
class="breeze-setup-regenerate-command-images-r4" x="36.6" y="800.8" 
textLength="48.8" 
clip-path="url(#breeze-setup-regenerate-command-images-line-32) [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="825.2" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-33)">│</text><text 
class="breeze-setup-regenerate-command-images-r4" x="24.4" y="825.2" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-33)">-</text><text 
class="breeze-setup-regenerate-command-images-r4" x="36.6" y="825.2" 
textLength="61" 
clip-path="url(#breeze-setup-regenerate-command-images-line-33)"> [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="849.6" 
textLength="1464" 
clip-path="url(#breeze-setup-regenerate-command-images-line-34)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-setup-regenerate-command-images-r1" x="1464" y="849.6" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-34)">
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="605.6" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-24)">│</text><text 
class="breeze-setup-regenerate-command-images-r6" x="219.6" y="605.6" 
textLength="1220" 
clip-path="url(#breeze-setup-regenerate-command-images-line-24)">setup:regenerate-command-images&#160;|&#160;setup:self-upgrade&#160;|&#160;setup:synchronize-local-mounts&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="630" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-25)">│</text><text 
class="breeze-setup-regenerate-command-images-r6" x="219.6" y="630" 
textLength="1220" 
clip-path="url(#breeze-setup-regenerate-command-images-line-25)">setup:version&#160;|&#160;shell&#160;|&#160;start-airflow&#160;|&#160;static-checks&#160;|&#160;testing&#160;|&#160;testing:db-tests&#160;|&#160;&#160;&#160;&#160;&#16
 [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="654.4" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-26)">│</text><text 
class="breeze-setup-regenerate-command-images-r6" x="219.6" y="654.4" 
textLength="1220" 
clip-path="url(#breeze-setup-regenerate-command-images-line-26)">testing:docker-compose-tests&#160;|&#160;testing:helm-tests&#160;|&#160;testing:integration-tests&#160;|&#160;testing:non-db-tests</text><text
 class="breeze-setup- [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="678.8" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-27)">│</text><text 
class="breeze-setup-regenerate-command-images-r6" x="219.6" y="678.8" 
textLength="1220" 
clip-path="url(#breeze-setup-regenerate-command-images-line-27)">|&#160;testing:tests)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="703.2" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-28)">│</text><text 
class="breeze-setup-regenerate-command-images-r4" x="24.4" y="703.2" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-28)">-</text><text 
class="breeze-setup-regenerate-command-images-r4" x="36.6" y="703.2" 
textLength="73.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-28) [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="727.6" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-29)">│</text><text 
class="breeze-setup-regenerate-command-images-r1" x="219.6" y="727.6" 
textLength="170.8" 
clip-path="url(#breeze-setup-regenerate-command-images-line-29)">together&#160;with&#160;</text><text
 class="breeze-setup-regenerate-command-images-r4" x="390.4" y="727.6" 
textLength="12.2" clip-path="url(#breeze-setup-regenera [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="752" 
textLength="1464" 
clip-path="url(#breeze-setup-regenerate-command-images-line-30)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-setup-regenerate-command-images-r1" x="1464" y="752" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-30)">
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="776.4" 
textLength="24.4" 
clip-path="url(#breeze-setup-regenerate-command-images-line-31)">╭─</text><text 
class="breeze-setup-regenerate-command-images-r5" x="24.4" y="776.4" 
textLength="195.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-31)">&#160;Common&#160;options&#160;</text><text
 class="breeze-setup-regenerate-command-images-r5" x="219.6" y="776.4" 
textLength="1220" clip-path="url(#breeze-setup-r [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="800.8" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-32)">│</text><text 
class="breeze-setup-regenerate-command-images-r4" x="24.4" y="800.8" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-32)">-</text><text 
class="breeze-setup-regenerate-command-images-r4" x="36.6" y="800.8" 
textLength="97.6" 
clip-path="url(#breeze-setup-regenerate-command-images-line-32) [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="825.2" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-33)">│</text><text 
class="breeze-setup-regenerate-command-images-r4" x="24.4" y="825.2" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-33)">-</text><text 
class="breeze-setup-regenerate-command-images-r4" x="36.6" y="825.2" 
textLength="48.8" 
clip-path="url(#breeze-setup-regenerate-command-images-line-33) [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="849.6" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-34)">│</text><text 
class="breeze-setup-regenerate-command-images-r4" x="24.4" y="849.6" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-34)">-</text><text 
class="breeze-setup-regenerate-command-images-r4" x="36.6" y="849.6" 
textLength="61" 
clip-path="url(#breeze-setup-regenerate-command-images-line-34)"> [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="874" 
textLength="1464" 
clip-path="url(#breeze-setup-regenerate-command-images-line-35)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-setup-regenerate-command-images-r1" x="1464" y="874" 
textLength="12.2" 
clip-path="url(#breeze-setup-regenerate-command-images-line-35)">
 </text>
     </g>
     </g>
diff --git a/images/breeze/output_setup_regenerate-command-images.txt 
b/images/breeze/output_setup_regenerate-command-images.txt
index 839aad6c8c..68d92674a7 100644
--- a/images/breeze/output_setup_regenerate-command-images.txt
+++ b/images/breeze/output_setup_regenerate-command-images.txt
@@ -1 +1 @@
-7b3dba4e15361b982859694ae2822891
+97c8fd408d3b874a2939958c0dbd2029
diff --git a/images/breeze/output_setup_synchronize-local-mounts.svg 
b/images/breeze/output_setup_synchronize-local-mounts.svg
new file mode 100644
index 0000000000..39d59dd8cd
--- /dev/null
+++ b/images/breeze/output_setup_synchronize-local-mounts.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;
+    }
+
+    .breeze-setup-synchronize-local-mounts-matrix {
+        font-family: Fira Code, monospace;
+        font-size: 20px;
+        line-height: 24.4px;
+        font-variant-east-asian: full-width;
+    }
+
+    .breeze-setup-synchronize-local-mounts-title {
+        font-size: 18px;
+        font-weight: bold;
+        font-family: arial;
+    }
+
+    .breeze-setup-synchronize-local-mounts-r1 { fill: #c5c8c6 }
+.breeze-setup-synchronize-local-mounts-r2 { fill: #d0b344 }
+.breeze-setup-synchronize-local-mounts-r3 { fill: #c5c8c6;font-weight: bold }
+.breeze-setup-synchronize-local-mounts-r4 { fill: #68a0b3;font-weight: bold }
+.breeze-setup-synchronize-local-mounts-r5 { fill: #868887 }
+.breeze-setup-synchronize-local-mounts-r6 { fill: #98a84b;font-weight: bold }
+    </style>
+
+    <defs>
+    <clipPath id="breeze-setup-synchronize-local-mounts-clip-terminal">
+      <rect x="0" y="0" width="1463.0" height="243.0" />
+    </clipPath>
+    <clipPath id="breeze-setup-synchronize-local-mounts-line-0">
+    <rect x="0" y="1.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-setup-synchronize-local-mounts-line-1">
+    <rect x="0" y="25.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-setup-synchronize-local-mounts-line-2">
+    <rect x="0" y="50.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-setup-synchronize-local-mounts-line-3">
+    <rect x="0" y="74.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-setup-synchronize-local-mounts-line-4">
+    <rect x="0" y="99.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-setup-synchronize-local-mounts-line-5">
+    <rect x="0" y="123.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-setup-synchronize-local-mounts-line-6">
+    <rect x="0" y="147.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-setup-synchronize-local-mounts-line-7">
+    <rect x="0" y="172.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-setup-synchronize-local-mounts-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="breeze-setup-synchronize-local-mounts-title" fill="#c5c8c6" 
text-anchor="middle" x="740" 
y="27">Command:&#160;setup&#160;synchronize-local-mounts</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(#breeze-setup-synchronize-local-mounts-clip-terminal)">
+    
+    <g class="breeze-setup-synchronize-local-mounts-matrix">
+    <text class="breeze-setup-synchronize-local-mounts-r1" x="1464" y="20" 
textLength="12.2" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-0)">
+</text><text class="breeze-setup-synchronize-local-mounts-r2" x="12.2" 
y="44.4" textLength="73.2" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-1)">Usage:</text><text
 class="breeze-setup-synchronize-local-mounts-r3" x="97.6" y="44.4" 
textLength="451.4" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-1)">breeze&#160;setup&#160;synchronize-local-mounts</text><text
 class="breeze-setup-synchronize-local-mounts-r1" x="561.2" y="44.4" 
textLength="12.2" clip-path="url(#b [...]
+</text><text class="breeze-setup-synchronize-local-mounts-r1" x="1464" 
y="68.8" textLength="12.2" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-2)">
+</text><text class="breeze-setup-synchronize-local-mounts-r1" x="12.2" 
y="93.2" textLength="866.2" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-3)">Synchronize&#160;local&#160;mounts&#160;between&#160;python&#160;files&#160;and&#160;docker&#160;compose&#160;yamls.</text><text
 class="breeze-setup-synchronize-local-mounts-r1" x="1464" y="93.2" 
textLength="12.2" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-3)">
+</text><text class="breeze-setup-synchronize-local-mounts-r1" x="1464" 
y="117.6" textLength="12.2" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-4)">
+</text><text class="breeze-setup-synchronize-local-mounts-r5" x="0" y="142" 
textLength="24.4" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-5)">╭─</text><text 
class="breeze-setup-synchronize-local-mounts-r5" x="24.4" y="142" 
textLength="195.2" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-5)">&#160;Common&#160;options&#160;</text><text
 class="breeze-setup-synchronize-local-mounts-r5" x="219.6" y="142" 
textLength="1220" clip-path="url(#breeze-setup-synchronize-lo [...]
+</text><text class="breeze-setup-synchronize-local-mounts-r5" x="0" y="166.4" 
textLength="12.2" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-6)">│</text><text 
class="breeze-setup-synchronize-local-mounts-r4" x="24.4" y="166.4" 
textLength="12.2" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-6)">-</text><text 
class="breeze-setup-synchronize-local-mounts-r4" x="36.6" y="166.4" 
textLength="97.6" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-6)">-verbos [...]
+</text><text class="breeze-setup-synchronize-local-mounts-r5" x="0" y="190.8" 
textLength="12.2" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-7)">│</text><text 
class="breeze-setup-synchronize-local-mounts-r4" x="24.4" y="190.8" 
textLength="12.2" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-7)">-</text><text 
class="breeze-setup-synchronize-local-mounts-r4" x="36.6" y="190.8" 
textLength="48.8" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-7)">-dry</t [...]
+</text><text class="breeze-setup-synchronize-local-mounts-r5" x="0" y="215.2" 
textLength="12.2" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-8)">│</text><text 
class="breeze-setup-synchronize-local-mounts-r4" x="24.4" y="215.2" 
textLength="12.2" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-8)">-</text><text 
class="breeze-setup-synchronize-local-mounts-r4" x="36.6" y="215.2" 
textLength="61" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-8)">-help</te [...]
+</text><text class="breeze-setup-synchronize-local-mounts-r5" x="0" y="239.6" 
textLength="1464" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-9)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-setup-synchronize-local-mounts-r1" x="1464" y="239.6" 
textLength="12.2" 
clip-path="url(#breeze-setup-synchronize-local-mounts-line-9)">
+</text>
+    </g>
+    </g>
+</svg>
diff --git a/images/breeze/output_setup_synchronize-local-mounts.txt 
b/images/breeze/output_setup_synchronize-local-mounts.txt
new file mode 100644
index 0000000000..9a3305886c
--- /dev/null
+++ b/images/breeze/output_setup_synchronize-local-mounts.txt
@@ -0,0 +1 @@
+252c8ee48ca57e6539064544cbd63e58
diff --git a/scripts/ci/pre_commit/pre_commit_local_yml_mounts.py 
b/scripts/ci/pre_commit/pre_commit_local_yml_mounts.py
index d136b83a31..0c4ed9821a 100755
--- a/scripts/ci/pre_commit/pre_commit_local_yml_mounts.py
+++ b/scripts/ci/pre_commit/pre_commit_local_yml_mounts.py
@@ -17,44 +17,18 @@
 # under the License.
 from __future__ import annotations
 
-import os
+import subprocess
 import sys
 from pathlib import Path
 
-if __name__ == "__main__":
-    os.environ["SKIP_BREEZE_SELF_UPGRADE_CHECK"] = "true"
-    sys.path.insert(0, str(Path(__file__).parent.resolve()))  # make sure 
common_precommit_utils is imported
+sys.path.insert(0, str(Path(__file__).parent.resolve()))
+from common_precommit_utils import console, initialize_breeze_precommit
 
-    from common_precommit_utils import AIRFLOW_SOURCES_ROOT_PATH  # isort: skip
+initialize_breeze_precommit(__name__, __file__)
 
-    sys.path.insert(0, str(AIRFLOW_SOURCES_ROOT_PATH))  # make sure setup is 
imported from Airflow
-    sys.path.insert(
-        0, str(AIRFLOW_SOURCES_ROOT_PATH / "dev" / "breeze" / "src")
-    )  # make sure setup is imported from Airflow
-
-    from airflow_breeze.utils.docker_command_utils import 
VOLUMES_FOR_SELECTED_MOUNTS
-    from common_precommit_utils import insert_documentation
-
-    sys.path.append(str(AIRFLOW_SOURCES_ROOT_PATH))
-
-    MOUNTS_HEADER = (
-        "        # START automatically generated volumes from "
-        "VOLUMES_FOR_SELECTED_MOUNTS in docker_command_utils.py"
-    )
-    MOUNTS_FOOTER = (
-        "        # END automatically generated volumes from "
-        "VOLUMES_FOR_SELECTED_MOUNTS in docker_command_utils.py"
-    )
-
-    local_mount_file_path = AIRFLOW_SOURCES_ROOT_PATH / "scripts" / "ci" / 
"docker-compose" / "local.yml"
-    PREFIX = "      "
-    volumes = []
-    for src, dest in VOLUMES_FOR_SELECTED_MOUNTS:
-        volumes.extend(
-            [
-                PREFIX + "- type: bind\n",
-                PREFIX + f"  source: ../../../{src}\n",
-                PREFIX + f"  target: {dest}\n",
-            ]
-        )
-    insert_documentation(local_mount_file_path, volumes, MOUNTS_HEADER, 
MOUNTS_FOOTER)
+res = subprocess.run(
+    ["breeze", "setup", "synchronize-local-mounts"],
+    check=False,
+)
+if res.returncode != 0:
+    console.print("\n[red]Error when running local mounts synchronization.\n")

Reply via email to