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 5b4e95065e Improve docker-compose tests stability (#34254)
5b4e95065e is described below

commit 5b4e95065ec860b6ea7f398fabf36ef7492b0970
Author: Jarek Potiuk <[email protected]>
AuthorDate: Sun Sep 10 23:10:19 2023 +0200

    Improve docker-compose tests stability (#34254)
    
    The docker-compose tests are failing occassionally and part of it
    is that we were manually waiting and querying for the compose
    to be ready. Since we moved to docker compose v2 only we can now
    remove the conditional docker-compose v1 code and use `--wait`
    and `--wait-timetout` built-in functionality and increase the
    timeout a bit. This should be helpful to avoid a race condition
    where the docker components are started but not healthy yet, the
    flag `--wait` waits not only for the processes to start but also
    for the health checks.
    
    Also increased the timeout of waiting for dags to be in
    terminal state.
    
    This should help with stability of the test.
---
 .../airflow_breeze/commands/testing_commands.py    |  10 --
 .../commands/testing_commands_config.py            |   1 -
 dev/breeze/src/airflow_breeze/utils/run_tests.py   |   2 -
 docker_tests/test_docker_compose_quick_start.py    |  69 +++++--------
 images/breeze/output-commands-hash.txt             |   4 +-
 images/breeze/output-commands.svg                  | 108 ++++++++++-----------
 .../breeze/output_testing_docker-compose-tests.svg |  30 +++---
 7 files changed, 90 insertions(+), 134 deletions(-)

diff --git a/dev/breeze/src/airflow_breeze/commands/testing_commands.py 
b/dev/breeze/src/airflow_breeze/commands/testing_commands.py
index c7c018a0da..ee3b445cb3 100644
--- a/dev/breeze/src/airflow_breeze/commands/testing_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/testing_commands.py
@@ -97,14 +97,6 @@ def group_for_testing():
     envvar="SKIP_DOCKER_COMPOSE_DELETION",
     is_flag=True,
 )
[email protected](
-    "--wait-for-containers-timeout",
-    help="Time to wait (in seconds) for all containers to start",
-    envvar="WAIT_FOR_CONTAINERS_TIMEOUT",
-    show_default=True,
-    type=IntRange(0, 600),
-    default=300,
-)
 @option_github_repository
 @option_verbose
 @option_dry_run
@@ -114,7 +106,6 @@ def docker_compose_tests(
     image_name: str,
     image_tag: str | None,
     skip_docker_compose_deletion: bool,
-    wait_for_containers_timeout: int,
     github_repository: str,
     extra_pytest_args: tuple,
 ):
@@ -130,7 +121,6 @@ def docker_compose_tests(
         image_name=image_name,
         extra_pytest_args=extra_pytest_args,
         skip_docker_compose_deletion=skip_docker_compose_deletion,
-        wait_for_containers_timeout=wait_for_containers_timeout,
     )
     sys.exit(return_code)
 
diff --git a/dev/breeze/src/airflow_breeze/commands/testing_commands_config.py 
b/dev/breeze/src/airflow_breeze/commands/testing_commands_config.py
index 908843c224..0c91145b5e 100644
--- a/dev/breeze/src/airflow_breeze/commands/testing_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/testing_commands_config.py
@@ -104,7 +104,6 @@ TESTING_PARAMETERS: dict[str, list[dict[str, str | 
list[str]]]] = {
                 "--image-tag",
                 "--python",
                 "--skip-docker-compose-deletion",
-                "--wait-for-containers-timeout",
                 "--github-repository",
             ],
         }
diff --git a/dev/breeze/src/airflow_breeze/utils/run_tests.py 
b/dev/breeze/src/airflow_breeze/utils/run_tests.py
index c431155842..fb06dae54b 100644
--- a/dev/breeze/src/airflow_breeze/utils/run_tests.py
+++ b/dev/breeze/src/airflow_breeze/utils/run_tests.py
@@ -65,7 +65,6 @@ def run_docker_compose_tests(
     image_name: str,
     extra_pytest_args: tuple,
     skip_docker_compose_deletion: bool,
-    wait_for_containers_timeout: int,
 ) -> tuple[int, str]:
     command_result = run_command(["docker", "inspect", image_name], 
check=False, stdout=DEVNULL)
     if command_result.returncode != 0:
@@ -77,7 +76,6 @@ def run_docker_compose_tests(
     env["DOCKER_IMAGE"] = image_name
     if skip_docker_compose_deletion:
         env["SKIP_DOCKER_COMPOSE_DELETION"] = "true"
-    env["WAIT_FOR_CONTAINERS_TIMEOUT"] = str(wait_for_containers_timeout)
     command_result = run_command(
         [sys.executable, "-m", "pytest", str(test_path), *pytest_args, 
*extra_pytest_args],
         env=env,
diff --git a/docker_tests/test_docker_compose_quick_start.py 
b/docker_tests/test_docker_compose_quick_start.py
index 5add1176d1..7c70c39f05 100644
--- a/docker_tests/test_docker_compose_quick_start.py
+++ b/docker_tests/test_docker_compose_quick_start.py
@@ -102,7 +102,7 @@ def wait_for_terminal_dag_state(dag_id, dag_run_id):
     pprint(api_request("GET", f"dags/{DAG_ID}/details"))
 
     # Wait 80 seconds
-    for _ in range(80):
+    for _ in range(400):
         dag_state = api_request("GET", 
f"dags/{dag_id}/dagRuns/{dag_run_id}").get("state")
         print(f"Waiting for DAG Run: dag_state={dag_state}")
         sleep(1)
@@ -134,61 +134,38 @@ def 
test_trigger_dag_and_wait_for_result(tmp_path_factory, monkeypatch):
     compose_command = ["docker", "compose"]
     success = run_command([*compose_command, "version"], check=False)
     if not success:
-        compose_command = ["docker-compose"]
-        success = run_command([*compose_command, "--version"], check=False)
-        if not success:
-            print("ERROR: Neither `docker compose` nor `docker-compose` is 
available")
-            sys.exit(1)
+        print("ERROR: `docker compose` not available. Make sure compose plugin 
is installed")
+        sys.exit(1)
     compose_command.extend(["--project-name", "quick-start"])
     run_command([*compose_command, "config"])
     run_command([*compose_command, "down", "--volumes", "--remove-orphans"])
+    run_command([*compose_command, "up", "-d", "--wait"])
+    api_request("PATCH", path=f"dags/{DAG_ID}", json={"is_paused": False})
+    api_request("POST", path=f"dags/{DAG_ID}/dagRuns", json={"dag_run_id": 
DAG_RUN_ID})
     try:
-        run_command([*compose_command, "up", "-d"])
-        # The --wait condition was released in docker-compose v2.1.1, but we 
want to support
-        # docker-compose v1 yet.
-        # See:
-        # https://github.com/docker/compose/releases/tag/v2.1.1
-        # https://github.com/docker/compose/pull/8777
-        wait_for_containers_timeout = 
int(os.getenv("WAIT_FOR_CONTAINERS_TIMEOUT", "300"))
-        # the time to wait is total, not per container
-        start_time = monotonic()
-        for container_id in (
-            subprocess.check_output([*compose_command, "ps", 
"-q"]).decode().strip().splitlines()
-        ):
-            current_time = monotonic()
-            wait_for_container(container_id, wait_for_containers_timeout - 
int(current_time - start_time))
-        api_request("PATCH", path=f"dags/{DAG_ID}", json={"is_paused": False})
-        api_request("POST", path=f"dags/{DAG_ID}/dagRuns", json={"dag_run_id": 
DAG_RUN_ID})
-        try:
-            wait_for_terminal_dag_state(dag_id=DAG_ID, dag_run_id=DAG_RUN_ID)
-            dag_state = api_request("GET", 
f"dags/{DAG_ID}/dagRuns/{DAG_RUN_ID}").get("state")
-            assert dag_state == "success"
-        except Exception:
-            print("HTTP: GET health")
-            pprint(api_request("GET", "health"))
-            print(f"HTTP: GET dags/{DAG_ID}/dagRuns")
-            pprint(api_request("GET", f"dags/{DAG_ID}/dagRuns"))
-            print(f"HTTP: GET 
dags/{DAG_ID}/dagRuns/{DAG_RUN_ID}/taskInstances")
-            pprint(api_request("GET", 
f"dags/{DAG_ID}/dagRuns/{DAG_RUN_ID}/taskInstances"))
-            raise
+        wait_for_terminal_dag_state(dag_id=DAG_ID, dag_run_id=DAG_RUN_ID)
+        dag_state = api_request("GET", 
f"dags/{DAG_ID}/dagRuns/{DAG_RUN_ID}").get("state")
+        assert dag_state == "success"
     except Exception:
+        print("HTTP: GET health")
+        pprint(api_request("GET", "health"))
+        print(f"HTTP: GET dags/{DAG_ID}/dagRuns")
+        pprint(api_request("GET", f"dags/{DAG_ID}/dagRuns"))
+        print(f"HTTP: GET dags/{DAG_ID}/dagRuns/{DAG_RUN_ID}/taskInstances")
+        pprint(api_request("GET", 
f"dags/{DAG_ID}/dagRuns/{DAG_RUN_ID}/taskInstances"))
         print(f"Current working directory: {os.getcwd()}")
         run_command(["docker", "version"])
         run_command([*compose_command, "version"])
         run_command(["docker", "ps"])
         run_command([*compose_command, "logs"])
-
-        if compose_command == ["docker", "compose"]:
-            # JSON output is only available for docker compose v2
-            ps_output = run_command([*compose_command, "ps", "--format", 
"json"], return_output=True)
-            container_names = [container["Name"] for container in 
json.loads(ps_output)]
-            for container in container_names:
-                print(f"Health check for {container}")
-                result = run_command(
-                    ["docker", "inspect", "--format", "{{json .State}}", 
container], return_output=True
-                )
-                pprint(json.loads(result))
-
+        ps_output = run_command([*compose_command, "ps", "--format", "json"], 
return_output=True)
+        container_names = [container["Name"] for container in 
json.loads(ps_output)]
+        for container in container_names:
+            print(f"Health check for {container}")
+            result = run_command(
+                ["docker", "inspect", "--format", "{{json .State}}", 
container], return_output=True
+            )
+            pprint(json.loads(result))
         raise
     finally:
         if not os.environ.get("SKIP_DOCKER_COMPOSE_DELETION"):
diff --git a/images/breeze/output-commands-hash.txt 
b/images/breeze/output-commands-hash.txt
index 021b5060cf..3d22259a4b 100644
--- a/images/breeze/output-commands-hash.txt
+++ b/images/breeze/output-commands-hash.txt
@@ -65,8 +65,8 @@ setup:fd391bab5277ad3aca65987a84144d51
 shell:1462cde6f7e11a73cb42d4eec93c598e
 start-airflow:d4815dea2cfc0af7038697c1d9a13996
 static-checks:19926b8fcea5784b28d4a0d99865363c
-testing:docker-compose-tests:a4dfe7dadbe3e95fdf2b8d2107f7e208
+testing:docker-compose-tests:fd154a058082fcfda12eb877a9a89338
 testing:helm-tests:0669be17b744ba057adbf38681bd8e68
 testing:integration-tests:e745af9dd595adaa6f17ef02fbaae3b5
 testing:tests:29da9579379b1d013c02dd6c4471b958
-testing:3c04cf53fedc5ed321ff10c6ecc76204
+testing:355a33f1e38298dba301d638d956fb55
diff --git a/images/breeze/output-commands.svg 
b/images/breeze/output-commands.svg
index 51829ca34b..8b9d38fa91 100644
--- a/images/breeze/output-commands.svg
+++ b/images/breeze/output-commands.svg
@@ -35,8 +35,8 @@
     .breeze-help-r1 { fill: #c5c8c6;font-weight: bold }
 .breeze-help-r2 { fill: #c5c8c6 }
 .breeze-help-r3 { fill: #d0b344;font-weight: bold }
-.breeze-help-r4 { fill: #68a0b3;font-weight: bold }
-.breeze-help-r5 { fill: #868887 }
+.breeze-help-r4 { fill: #868887 }
+.breeze-help-r5 { fill: #68a0b3;font-weight: bold }
 .breeze-help-r6 { fill: #98a84b;font-weight: bold }
 .breeze-help-r7 { fill: #8d7b39 }
     </style>
@@ -217,59 +217,59 @@
     
     <g class="breeze-help-matrix">
     <text class="breeze-help-r2" x="1464" y="20" textLength="12.2" 
clip-path="url(#breeze-help-line-0)">
-</text><text class="breeze-help-r3" x="12.2" y="44.4" textLength="85.4" 
clip-path="url(#breeze-help-line-1)">Usage:&#160;</text><text 
class="breeze-help-r1" x="97.6" y="44.4" textLength="97.6" 
clip-path="url(#breeze-help-line-1)">breeze&#160;[</text><text 
class="breeze-help-r4" x="195.2" y="44.4" textLength="85.4" 
clip-path="url(#breeze-help-line-1)">OPTIONS</text><text class="breeze-help-r1" 
x="280.6" y="44.4" textLength="24.4" 
clip-path="url(#breeze-help-line-1)">]&#160;</text><text cl [...]
+</text><text class="breeze-help-r3" x="12.2" y="44.4" textLength="85.4" 
clip-path="url(#breeze-help-line-1)">Usage:&#160;</text><text 
class="breeze-help-r1" x="97.6" y="44.4" textLength="414.8" 
clip-path="url(#breeze-help-line-1)">breeze&#160;[OPTIONS]&#160;COMMAND&#160;[ARGS]...</text><text
 class="breeze-help-r2" x="1464" y="44.4" textLength="12.2" 
clip-path="url(#breeze-help-line-1)">
 </text><text class="breeze-help-r2" x="1464" y="68.8" textLength="12.2" 
clip-path="url(#breeze-help-line-2)">
-</text><text class="breeze-help-r5" x="0" y="93.2" textLength="24.4" 
clip-path="url(#breeze-help-line-3)">╭─</text><text class="breeze-help-r5" 
x="24.4" y="93.2" textLength="158.6" 
clip-path="url(#breeze-help-line-3)">&#160;Basic&#160;flags&#160;</text><text 
class="breeze-help-r5" x="183" y="93.2" textLength="1256.6" 
clip-path="url(#breeze-help-line-3)">───────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="breeze-help-r [...]
-</text><text class="breeze-help-r5" x="0" y="117.6" textLength="12.2" 
clip-path="url(#breeze-help-line-4)">│</text><text class="breeze-help-r4" 
x="24.4" y="117.6" textLength="12.2" 
clip-path="url(#breeze-help-line-4)">-</text><text class="breeze-help-r4" 
x="36.6" y="117.6" textLength="85.4" 
clip-path="url(#breeze-help-line-4)">-python</text><text class="breeze-help-r6" 
x="305" y="117.6" textLength="24.4" 
clip-path="url(#breeze-help-line-4)">-p</text><text class="breeze-help-r2" 
x="353.8" [...]
-</text><text class="breeze-help-r5" x="0" y="142" textLength="12.2" 
clip-path="url(#breeze-help-line-5)">│</text><text class="breeze-help-r5" 
x="353.8" y="142" textLength="732" 
clip-path="url(#breeze-help-line-5)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-help-r5" x="0" y="166.4" textLength="12.2" 
clip-path="url(#breeze-help-line-6)">│</text><text class="breeze-help-r4" 
x="24.4" y="166.4" textLength="12.2" 
clip-path="url(#breeze-help-line-6)">-</text><text class="breeze-help-r4" 
x="36.6" y="166.4" textLength="97.6" 
clip-path="url(#breeze-help-line-6)">-backend</text><text 
class="breeze-help-r6" x="305" y="166.4" textLength="24.4" 
clip-path="url(#breeze-help-line-6)">-b</text><text class="breeze-help-r2" 
x="353.8 [...]
-</text><text class="breeze-help-r5" x="0" y="190.8" textLength="12.2" 
clip-path="url(#breeze-help-line-7)">│</text><text class="breeze-help-r4" 
x="24.4" y="190.8" textLength="12.2" 
clip-path="url(#breeze-help-line-7)">-</text><text class="breeze-help-r4" 
x="36.6" y="190.8" textLength="109.8" 
clip-path="url(#breeze-help-line-7)">-postgres</text><text 
class="breeze-help-r4" x="146.4" y="190.8" textLength="97.6" 
clip-path="url(#breeze-help-line-7)">-version</text><text class="breeze-help-r6 
[...]
-</text><text class="breeze-help-r5" x="0" y="215.2" textLength="12.2" 
clip-path="url(#breeze-help-line-8)">│</text><text class="breeze-help-r4" 
x="24.4" y="215.2" textLength="12.2" 
clip-path="url(#breeze-help-line-8)">-</text><text class="breeze-help-r4" 
x="36.6" y="215.2" textLength="73.2" 
clip-path="url(#breeze-help-line-8)">-mysql</text><text class="breeze-help-r4" 
x="109.8" y="215.2" textLength="97.6" 
clip-path="url(#breeze-help-line-8)">-version</text><text 
class="breeze-help-r6" x= [...]
-</text><text class="breeze-help-r5" x="0" y="239.6" textLength="12.2" 
clip-path="url(#breeze-help-line-9)">│</text><text class="breeze-help-r4" 
x="24.4" y="239.6" textLength="12.2" 
clip-path="url(#breeze-help-line-9)">-</text><text class="breeze-help-r4" 
x="36.6" y="239.6" textLength="73.2" 
clip-path="url(#breeze-help-line-9)">-mssql</text><text class="breeze-help-r4" 
x="109.8" y="239.6" textLength="97.6" 
clip-path="url(#breeze-help-line-9)">-version</text><text 
class="breeze-help-r6" x= [...]
-</text><text class="breeze-help-r5" x="0" y="264" textLength="12.2" 
clip-path="url(#breeze-help-line-10)">│</text><text class="breeze-help-r4" 
x="24.4" y="264" textLength="12.2" 
clip-path="url(#breeze-help-line-10)">-</text><text class="breeze-help-r4" 
x="36.6" y="264" textLength="146.4" 
clip-path="url(#breeze-help-line-10)">-integration</text><text 
class="breeze-help-r2" x="353.8" y="264" textLength="1085.8" 
clip-path="url(#breeze-help-line-10)">Integration(s)&#160;to&#160;enable&#160;w 
[...]
-</text><text class="breeze-help-r5" x="0" y="288.4" textLength="12.2" 
clip-path="url(#breeze-help-line-11)">│</text><text class="breeze-help-r7" 
x="353.8" y="288.4" textLength="1085.8" 
clip-path="url(#breeze-help-line-11)">(all&#160;|&#160;all-testable&#160;|&#160;cassandra&#160;|&#160;celery&#160;|&#160;kafka&#160;|&#160;kerberos&#160;|&#160;mongo&#160;|&#160;otel&#160;|&#160;pinot&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r5" x="1451.8" y="288.4" textLength="1 [...]
-</text><text class="breeze-help-r5" x="0" y="312.8" textLength="12.2" 
clip-path="url(#breeze-help-line-12)">│</text><text class="breeze-help-r7" 
x="353.8" y="312.8" textLength="1085.8" 
clip-path="url(#breeze-help-line-12)">statsd&#160;|&#160;statsd&#160;|&#160;trino)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="breeze-help-r5" x="0" y="337.2" textLength="12.2" 
clip-path="url(#breeze-help-line-13)">│</text><text class="breeze-help-r4" 
x="24.4" y="337.2" textLength="12.2" 
clip-path="url(#breeze-help-line-13)">-</text><text class="breeze-help-r4" 
x="36.6" y="337.2" textLength="97.6" 
clip-path="url(#breeze-help-line-13)">-forward</text><text 
class="breeze-help-r4" x="134.2" y="337.2" textLength="146.4" 
clip-path="url(#breeze-help-line-13)">-credentials</text><text class="breeze- 
[...]
-</text><text class="breeze-help-r5" x="0" y="361.6" textLength="12.2" 
clip-path="url(#breeze-help-line-14)">│</text><text class="breeze-help-r4" 
x="24.4" y="361.6" textLength="12.2" 
clip-path="url(#breeze-help-line-14)">-</text><text class="breeze-help-r4" 
x="36.6" y="361.6" textLength="36.6" 
clip-path="url(#breeze-help-line-14)">-db</text><text class="breeze-help-r4" 
x="73.2" y="361.6" textLength="73.2" 
clip-path="url(#breeze-help-line-14)">-reset</text><text class="breeze-help-r6" 
x="3 [...]
-</text><text class="breeze-help-r5" x="0" y="386" textLength="12.2" 
clip-path="url(#breeze-help-line-15)">│</text><text class="breeze-help-r4" 
x="24.4" y="386" textLength="12.2" 
clip-path="url(#breeze-help-line-15)">-</text><text class="breeze-help-r4" 
x="36.6" y="386" textLength="48.8" 
clip-path="url(#breeze-help-line-15)">-max</text><text class="breeze-help-r4" 
x="85.4" y="386" textLength="61" 
clip-path="url(#breeze-help-line-15)">-time</text><text class="breeze-help-r2" 
x="353.8" y="3 [...]
-</text><text class="breeze-help-r5" x="0" y="410.4" textLength="12.2" 
clip-path="url(#breeze-help-line-16)">│</text><text class="breeze-help-r7" 
x="353.8" y="410.4" textLength="1049.2" 
clip-path="url(#breeze-help-line-16)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="breeze-help-r5" x="0" y="434.8" textLength="12.2" 
clip-path="url(#breeze-help-line-17)">│</text><text class="breeze-help-r4" 
x="24.4" y="434.8" textLength="12.2" 
clip-path="url(#breeze-help-line-17)">-</text><text class="breeze-help-r4" 
x="36.6" y="434.8" textLength="85.4" 
clip-path="url(#breeze-help-line-17)">-github</text><text 
class="breeze-help-r4" x="122" y="434.8" textLength="134.2" 
clip-path="url(#breeze-help-line-17)">-repository</text><text 
class="breeze-help [...]
-</text><text class="breeze-help-r5" x="0" y="459.2" textLength="12.2" 
clip-path="url(#breeze-help-line-18)">│</text><text class="breeze-help-r4" 
x="24.4" y="459.2" textLength="12.2" 
clip-path="url(#breeze-help-line-18)">-</text><text class="breeze-help-r4" 
x="36.6" y="459.2" textLength="97.6" 
clip-path="url(#breeze-help-line-18)">-builder</text><text 
class="breeze-help-r2" x="353.8" y="459.2" textLength="756.4" 
clip-path="url(#breeze-help-line-18)">Buildx&#160;builder&#160;used&#160;to&# 
[...]
-</text><text class="breeze-help-r5" x="0" y="483.6" textLength="12.2" 
clip-path="url(#breeze-help-line-19)">│</text><text class="breeze-help-r5" 
x="353.8" y="483.6" textLength="756.4" 
clip-path="url(#breeze-help-line-19)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="breeze-help-r5" x="0" y="508" textLength="1464" 
clip-path="url(#breeze-help-line-20)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-help-r2" x="1464" y="508" textLength="12.2" 
clip-path="url(#breeze-help-line-20)">
-</text><text class="breeze-help-r5" x="0" y="532.4" textLength="24.4" 
clip-path="url(#breeze-help-line-21)">╭─</text><text class="breeze-help-r5" 
x="24.4" y="532.4" textLength="195.2" 
clip-path="url(#breeze-help-line-21)">&#160;Common&#160;options&#160;</text><text
 class="breeze-help-r5" x="219.6" y="532.4" textLength="1220" 
clip-path="url(#breeze-help-line-21)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="breeze- [...]
-</text><text class="breeze-help-r5" x="0" y="556.8" textLength="12.2" 
clip-path="url(#breeze-help-line-22)">│</text><text class="breeze-help-r4" 
x="24.4" y="556.8" textLength="12.2" 
clip-path="url(#breeze-help-line-22)">-</text><text class="breeze-help-r4" 
x="36.6" y="556.8" textLength="97.6" 
clip-path="url(#breeze-help-line-22)">-verbose</text><text 
class="breeze-help-r6" x="158.6" y="556.8" textLength="24.4" 
clip-path="url(#breeze-help-line-22)">-v</text><text class="breeze-help-r2" x= 
[...]
-</text><text class="breeze-help-r5" x="0" y="581.2" textLength="12.2" 
clip-path="url(#breeze-help-line-23)">│</text><text class="breeze-help-r4" 
x="24.4" y="581.2" textLength="12.2" 
clip-path="url(#breeze-help-line-23)">-</text><text class="breeze-help-r4" 
x="36.6" y="581.2" textLength="48.8" 
clip-path="url(#breeze-help-line-23)">-dry</text><text class="breeze-help-r4" 
x="85.4" y="581.2" textLength="48.8" 
clip-path="url(#breeze-help-line-23)">-run</text><text class="breeze-help-r6" 
x="15 [...]
-</text><text class="breeze-help-r5" x="0" y="605.6" textLength="12.2" 
clip-path="url(#breeze-help-line-24)">│</text><text class="breeze-help-r4" 
x="24.4" y="605.6" textLength="12.2" 
clip-path="url(#breeze-help-line-24)">-</text><text class="breeze-help-r4" 
x="36.6" y="605.6" textLength="85.4" 
clip-path="url(#breeze-help-line-24)">-answer</text><text 
class="breeze-help-r6" x="158.6" y="605.6" textLength="24.4" 
clip-path="url(#breeze-help-line-24)">-a</text><text class="breeze-help-r2" x=" 
[...]
-</text><text class="breeze-help-r5" x="0" y="630" textLength="12.2" 
clip-path="url(#breeze-help-line-25)">│</text><text class="breeze-help-r4" 
x="24.4" y="630" textLength="12.2" 
clip-path="url(#breeze-help-line-25)">-</text><text class="breeze-help-r4" 
x="36.6" y="630" textLength="61" 
clip-path="url(#breeze-help-line-25)">-help</text><text class="breeze-help-r6" 
x="158.6" y="630" textLength="24.4" 
clip-path="url(#breeze-help-line-25)">-h</text><text class="breeze-help-r2" 
x="207.4" y="63 [...]
-</text><text class="breeze-help-r5" x="0" y="654.4" textLength="1464" 
clip-path="url(#breeze-help-line-26)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-help-r2" x="1464" y="654.4" textLength="12.2" 
clip-path="url(#breeze-help-line-26)">
-</text><text class="breeze-help-r5" x="0" y="678.8" textLength="24.4" 
clip-path="url(#breeze-help-line-27)">╭─</text><text class="breeze-help-r5" 
x="24.4" y="678.8" textLength="244" 
clip-path="url(#breeze-help-line-27)">&#160;Developer&#160;commands&#160;</text><text
 class="breeze-help-r5" x="268.4" y="678.8" textLength="1171.2" 
clip-path="url(#breeze-help-line-27)">────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="breeze- [...]
-</text><text class="breeze-help-r5" x="0" y="703.2" textLength="12.2" 
clip-path="url(#breeze-help-line-28)">│</text><text class="breeze-help-r4" 
x="24.4" y="703.2" textLength="219.6" 
clip-path="url(#breeze-help-line-28)">start-airflow&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="268.4" y="703.2" textLength="1171.2" 
clip-path="url(#breeze-help-line-28)">Enter&#160;breeze&#160;environment&#160;and&#160;starts&#160;all&#160;Airflow&#160;components&#160;in&#160;the&#16
 [...]
-</text><text class="breeze-help-r5" x="0" y="727.6" textLength="12.2" 
clip-path="url(#breeze-help-line-29)">│</text><text class="breeze-help-r2" 
x="268.4" y="727.6" textLength="1171.2" 
clip-path="url(#breeze-help-line-29)">if&#160;contents&#160;of&#160;www&#160;directory&#160;changed.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
-</text><text class="breeze-help-r5" x="0" y="752" textLength="12.2" 
clip-path="url(#breeze-help-line-30)">│</text><text class="breeze-help-r4" 
x="24.4" y="752" textLength="219.6" 
clip-path="url(#breeze-help-line-30)">static-checks&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="268.4" y="752" textLength="1171.2" 
clip-path="url(#breeze-help-line-30)">Run&#160;static&#160;checks.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
-</text><text class="breeze-help-r5" x="0" y="776.4" textLength="12.2" 
clip-path="url(#breeze-help-line-31)">│</text><text class="breeze-help-r4" 
x="24.4" y="776.4" textLength="219.6" 
clip-path="url(#breeze-help-line-31)">build-docs&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="268.4" y="776.4" textLength="1171.2" 
clip-path="url(#breeze-help-line-31)">Build&#160;documents.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
-</text><text class="breeze-help-r5" x="0" y="800.8" textLength="12.2" 
clip-path="url(#breeze-help-line-32)">│</text><text class="breeze-help-r4" 
x="24.4" y="800.8" textLength="219.6" 
clip-path="url(#breeze-help-line-32)">down&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="268.4" y="800.8" textLength="1171.2" 
clip-path="url(#breeze-help-line-32)">Stop&#160;running&#160;breeze&#160;environment.&#160;&#160;&#160;&#16
 [...]
-</text><text class="breeze-help-r5" x="0" y="825.2" textLength="12.2" 
clip-path="url(#breeze-help-line-33)">│</text><text class="breeze-help-r4" 
x="24.4" y="825.2" textLength="219.6" 
clip-path="url(#breeze-help-line-33)">shell&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="268.4" y="825.2" textLength="1171.2" 
clip-path="url(#breeze-help-line-33)">Enter&#160;breeze&#160;environment.&#160;this&#160;is&#160;the&#160;defaul
 [...]
-</text><text class="breeze-help-r5" x="0" y="849.6" textLength="12.2" 
clip-path="url(#breeze-help-line-34)">│</text><text class="breeze-help-r4" 
x="24.4" y="849.6" textLength="219.6" 
clip-path="url(#breeze-help-line-34)">exec&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="268.4" y="849.6" textLength="1171.2" 
clip-path="url(#breeze-help-line-34)">Joins&#160;the&#160;interactive&#160;shell&#160;of&#160;running&#160;
 [...]
-</text><text class="breeze-help-r5" x="0" y="874" textLength="12.2" 
clip-path="url(#breeze-help-line-35)">│</text><text class="breeze-help-r4" 
x="24.4" y="874" textLength="219.6" 
clip-path="url(#breeze-help-line-35)">compile-www-assets</text><text 
class="breeze-help-r2" x="268.4" y="874" textLength="1171.2" 
clip-path="url(#breeze-help-line-35)">Compiles&#160;www&#160;assets.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
-</text><text class="breeze-help-r5" x="0" y="898.4" textLength="12.2" 
clip-path="url(#breeze-help-line-36)">│</text><text class="breeze-help-r4" 
x="24.4" y="898.4" textLength="219.6" 
clip-path="url(#breeze-help-line-36)">cleanup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="268.4" y="898.4" textLength="805.2" 
clip-path="url(#breeze-help-line-36)">Cleans&#160;the&#160;cache&#160;of&#160;parameters,&#160;docker&#160;cache&#160;and&#
 [...]
-</text><text class="breeze-help-r5" x="0" y="922.8" textLength="1464" 
clip-path="url(#breeze-help-line-37)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-help-r2" x="1464" y="922.8" textLength="12.2" 
clip-path="url(#breeze-help-line-37)">
-</text><text class="breeze-help-r5" x="0" y="947.2" textLength="24.4" 
clip-path="url(#breeze-help-line-38)">╭─</text><text class="breeze-help-r5" 
x="24.4" y="947.2" textLength="219.6" 
clip-path="url(#breeze-help-line-38)">&#160;Testing&#160;commands&#160;</text><text
 class="breeze-help-r5" x="244" y="947.2" textLength="1195.6" 
clip-path="url(#breeze-help-line-38)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="breeze- [...]
-</text><text class="breeze-help-r5" x="0" y="971.6" textLength="12.2" 
clip-path="url(#breeze-help-line-39)">│</text><text class="breeze-help-r4" 
x="24.4" y="971.6" textLength="183" 
clip-path="url(#breeze-help-line-39)">testing&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="231.8" y="971.6" textLength="1207.8" 
clip-path="url(#breeze-help-line-39)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;run&#160;tests&#160;&#160;&#160;&#160;&#1
 [...]
-</text><text class="breeze-help-r5" x="0" y="996" textLength="12.2" 
clip-path="url(#breeze-help-line-40)">│</text><text class="breeze-help-r4" 
x="24.4" y="996" textLength="183" 
clip-path="url(#breeze-help-line-40)">k8s&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="231.8" y="996" textLength="1207.8" 
clip-path="url(#breeze-help-line-40)">Tools&#160;that&#160;developers&#160;use&#160;to&#160;run&#160;Kubernetes&#160;tests&#160;
 [...]
-</text><text class="breeze-help-r5" x="0" y="1020.4" textLength="1464" 
clip-path="url(#breeze-help-line-41)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-help-r2" x="1464" y="1020.4" textLength="12.2" 
clip-path="url(#breeze-help-line-41)">
-</text><text class="breeze-help-r5" x="0" y="1044.8" textLength="24.4" 
clip-path="url(#breeze-help-line-42)">╭─</text><text class="breeze-help-r5" 
x="24.4" y="1044.8" textLength="195.2" 
clip-path="url(#breeze-help-line-42)">&#160;Image&#160;commands&#160;</text><text
 class="breeze-help-r5" x="219.6" y="1044.8" textLength="1220" 
clip-path="url(#breeze-help-line-42)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="bree [...]
-</text><text class="breeze-help-r5" x="0" y="1069.2" textLength="12.2" 
clip-path="url(#breeze-help-line-43)">│</text><text class="breeze-help-r4" 
x="24.4" y="1069.2" textLength="207.4" 
clip-path="url(#breeze-help-line-43)">ci-image&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="256.2" y="1069.2" textLength="597.8" 
clip-path="url(#breeze-help-line-43)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;manually&#160;manage&#160;</te
 [...]
-</text><text class="breeze-help-r5" x="0" y="1093.6" textLength="12.2" 
clip-path="url(#breeze-help-line-44)">│</text><text class="breeze-help-r4" 
x="24.4" y="1093.6" textLength="207.4" 
clip-path="url(#breeze-help-line-44)">prod-image&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="256.2" y="1093.6" textLength="597.8" 
clip-path="url(#breeze-help-line-44)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;manually&#160;manage&#160;</text><text
 c [...]
-</text><text class="breeze-help-r5" x="0" y="1118" textLength="1464" 
clip-path="url(#breeze-help-line-45)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-help-r2" x="1464" y="1118" textLength="12.2" 
clip-path="url(#breeze-help-line-45)">
-</text><text class="breeze-help-r5" x="0" y="1142.4" textLength="24.4" 
clip-path="url(#breeze-help-line-46)">╭─</text><text class="breeze-help-r5" 
x="24.4" y="1142.4" textLength="353.8" 
clip-path="url(#breeze-help-line-46)">&#160;Release&#160;management&#160;commands&#160;</text><text
 class="breeze-help-r5" x="378.2" y="1142.4" textLength="1061.4" 
clip-path="url(#breeze-help-line-46)">───────────────────────────────────────────────────────────────────────────────────────</text><text
 clas [...]
-</text><text class="breeze-help-r5" x="0" y="1166.8" textLength="12.2" 
clip-path="url(#breeze-help-line-47)">│</text><text class="breeze-help-r4" 
x="24.4" y="1166.8" textLength="280.6" 
clip-path="url(#breeze-help-line-47)">release-management&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="329.4" y="1166.8" textLength="1110.2" 
clip-path="url(#breeze-help-line-47)">Tools&#160;that&#160;release&#160;managers&#160;can&#160;use&#160;to&#160;prepare&#160;and&#160;manage&#16
 [...]
-</text><text class="breeze-help-r5" x="0" y="1191.2" textLength="12.2" 
clip-path="url(#breeze-help-line-48)">│</text><text class="breeze-help-r4" 
x="24.4" y="1191.2" textLength="280.6" 
clip-path="url(#breeze-help-line-48)">sbom&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="329.4" y="1191.2" textLength="1110.2" 
clip-path="url(#breeze-help-line-48)">Tools&#160;that&#160;release&#160;ma [...]
-</text><text class="breeze-help-r5" x="0" y="1215.6" textLength="1464" 
clip-path="url(#breeze-help-line-49)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-help-r2" x="1464" y="1215.6" textLength="12.2" 
clip-path="url(#breeze-help-line-49)">
-</text><text class="breeze-help-r5" x="0" y="1240" textLength="24.4" 
clip-path="url(#breeze-help-line-50)">╭─</text><text class="breeze-help-r5" 
x="24.4" y="1240" textLength="195.2" 
clip-path="url(#breeze-help-line-50)">&#160;Other&#160;commands&#160;</text><text
 class="breeze-help-r5" x="219.6" y="1240" textLength="1220" 
clip-path="url(#breeze-help-line-50)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="breeze-hel [...]
-</text><text class="breeze-help-r5" x="0" y="1264.4" textLength="12.2" 
clip-path="url(#breeze-help-line-51)">│</text><text class="breeze-help-r4" 
x="24.4" y="1264.4" textLength="122" 
clip-path="url(#breeze-help-line-51)">setup&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="170.8" y="1264.4" textLength="1268.8" 
clip-path="url(#breeze-help-line-51)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;configure&#160;Breeze&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
-</text><text class="breeze-help-r5" x="0" y="1288.8" textLength="12.2" 
clip-path="url(#breeze-help-line-52)">│</text><text class="breeze-help-r4" 
x="24.4" y="1288.8" textLength="122" 
clip-path="url(#breeze-help-line-52)">ci&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="170.8" y="1288.8" textLength="134.2" 
clip-path="url(#breeze-help-line-52)">Tools&#160;that&#160;</text><text 
class="breeze-help-r4" x="305" y="1288.8" textLength="24.4" clip-path="ur [...]
-</text><text class="breeze-help-r5" x="0" y="1313.2" textLength="1464" 
clip-path="url(#breeze-help-line-53)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-help-r2" x="1464" y="1313.2" textLength="12.2" 
clip-path="url(#breeze-help-line-53)">
+</text><text class="breeze-help-r4" x="0" y="93.2" textLength="24.4" 
clip-path="url(#breeze-help-line-3)">╭─</text><text class="breeze-help-r4" 
x="24.4" y="93.2" textLength="158.6" 
clip-path="url(#breeze-help-line-3)">&#160;Basic&#160;flags&#160;</text><text 
class="breeze-help-r4" x="183" y="93.2" textLength="1256.6" 
clip-path="url(#breeze-help-line-3)">───────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="breeze-help-r [...]
+</text><text class="breeze-help-r4" x="0" y="117.6" textLength="12.2" 
clip-path="url(#breeze-help-line-4)">│</text><text class="breeze-help-r5" 
x="24.4" y="117.6" textLength="12.2" 
clip-path="url(#breeze-help-line-4)">-</text><text class="breeze-help-r5" 
x="36.6" y="117.6" textLength="85.4" 
clip-path="url(#breeze-help-line-4)">-python</text><text class="breeze-help-r6" 
x="305" y="117.6" textLength="24.4" 
clip-path="url(#breeze-help-line-4)">-p</text><text class="breeze-help-r2" 
x="353.8" [...]
+</text><text class="breeze-help-r4" x="0" y="142" textLength="12.2" 
clip-path="url(#breeze-help-line-5)">│</text><text class="breeze-help-r4" 
x="353.8" y="142" textLength="732" 
clip-path="url(#breeze-help-line-5)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-help-r4" x="0" y="166.4" textLength="12.2" 
clip-path="url(#breeze-help-line-6)">│</text><text class="breeze-help-r5" 
x="24.4" y="166.4" textLength="12.2" 
clip-path="url(#breeze-help-line-6)">-</text><text class="breeze-help-r5" 
x="36.6" y="166.4" textLength="97.6" 
clip-path="url(#breeze-help-line-6)">-backend</text><text 
class="breeze-help-r6" x="305" y="166.4" textLength="24.4" 
clip-path="url(#breeze-help-line-6)">-b</text><text class="breeze-help-r2" 
x="353.8 [...]
+</text><text class="breeze-help-r4" x="0" y="190.8" textLength="12.2" 
clip-path="url(#breeze-help-line-7)">│</text><text class="breeze-help-r5" 
x="24.4" y="190.8" textLength="12.2" 
clip-path="url(#breeze-help-line-7)">-</text><text class="breeze-help-r5" 
x="36.6" y="190.8" textLength="109.8" 
clip-path="url(#breeze-help-line-7)">-postgres</text><text 
class="breeze-help-r5" x="146.4" y="190.8" textLength="97.6" 
clip-path="url(#breeze-help-line-7)">-version</text><text class="breeze-help-r6 
[...]
+</text><text class="breeze-help-r4" x="0" y="215.2" textLength="12.2" 
clip-path="url(#breeze-help-line-8)">│</text><text class="breeze-help-r5" 
x="24.4" y="215.2" textLength="12.2" 
clip-path="url(#breeze-help-line-8)">-</text><text class="breeze-help-r5" 
x="36.6" y="215.2" textLength="73.2" 
clip-path="url(#breeze-help-line-8)">-mysql</text><text class="breeze-help-r5" 
x="109.8" y="215.2" textLength="97.6" 
clip-path="url(#breeze-help-line-8)">-version</text><text 
class="breeze-help-r6" x= [...]
+</text><text class="breeze-help-r4" x="0" y="239.6" textLength="12.2" 
clip-path="url(#breeze-help-line-9)">│</text><text class="breeze-help-r5" 
x="24.4" y="239.6" textLength="12.2" 
clip-path="url(#breeze-help-line-9)">-</text><text class="breeze-help-r5" 
x="36.6" y="239.6" textLength="73.2" 
clip-path="url(#breeze-help-line-9)">-mssql</text><text class="breeze-help-r5" 
x="109.8" y="239.6" textLength="97.6" 
clip-path="url(#breeze-help-line-9)">-version</text><text 
class="breeze-help-r6" x= [...]
+</text><text class="breeze-help-r4" x="0" y="264" textLength="12.2" 
clip-path="url(#breeze-help-line-10)">│</text><text class="breeze-help-r5" 
x="24.4" y="264" textLength="12.2" 
clip-path="url(#breeze-help-line-10)">-</text><text class="breeze-help-r5" 
x="36.6" y="264" textLength="146.4" 
clip-path="url(#breeze-help-line-10)">-integration</text><text 
class="breeze-help-r2" x="353.8" y="264" textLength="1085.8" 
clip-path="url(#breeze-help-line-10)">Integration(s)&#160;to&#160;enable&#160;w 
[...]
+</text><text class="breeze-help-r4" x="0" y="288.4" textLength="12.2" 
clip-path="url(#breeze-help-line-11)">│</text><text class="breeze-help-r7" 
x="353.8" y="288.4" textLength="1085.8" 
clip-path="url(#breeze-help-line-11)">(all&#160;|&#160;all-testable&#160;|&#160;cassandra&#160;|&#160;celery&#160;|&#160;kafka&#160;|&#160;kerberos&#160;|&#160;mongo&#160;|&#160;otel&#160;|&#160;pinot&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r4" x="1451.8" y="288.4" textLength="1 [...]
+</text><text class="breeze-help-r4" x="0" y="312.8" textLength="12.2" 
clip-path="url(#breeze-help-line-12)">│</text><text class="breeze-help-r7" 
x="353.8" y="312.8" textLength="1085.8" 
clip-path="url(#breeze-help-line-12)">statsd&#160;|&#160;statsd&#160;|&#160;trino)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="breeze-help-r4" x="0" y="337.2" textLength="12.2" 
clip-path="url(#breeze-help-line-13)">│</text><text class="breeze-help-r5" 
x="24.4" y="337.2" textLength="12.2" 
clip-path="url(#breeze-help-line-13)">-</text><text class="breeze-help-r5" 
x="36.6" y="337.2" textLength="97.6" 
clip-path="url(#breeze-help-line-13)">-forward</text><text 
class="breeze-help-r5" x="134.2" y="337.2" textLength="146.4" 
clip-path="url(#breeze-help-line-13)">-credentials</text><text class="breeze- 
[...]
+</text><text class="breeze-help-r4" x="0" y="361.6" textLength="12.2" 
clip-path="url(#breeze-help-line-14)">│</text><text class="breeze-help-r5" 
x="24.4" y="361.6" textLength="12.2" 
clip-path="url(#breeze-help-line-14)">-</text><text class="breeze-help-r5" 
x="36.6" y="361.6" textLength="36.6" 
clip-path="url(#breeze-help-line-14)">-db</text><text class="breeze-help-r5" 
x="73.2" y="361.6" textLength="73.2" 
clip-path="url(#breeze-help-line-14)">-reset</text><text class="breeze-help-r6" 
x="3 [...]
+</text><text class="breeze-help-r4" x="0" y="386" textLength="12.2" 
clip-path="url(#breeze-help-line-15)">│</text><text class="breeze-help-r5" 
x="24.4" y="386" textLength="12.2" 
clip-path="url(#breeze-help-line-15)">-</text><text class="breeze-help-r5" 
x="36.6" y="386" textLength="48.8" 
clip-path="url(#breeze-help-line-15)">-max</text><text class="breeze-help-r5" 
x="85.4" y="386" textLength="61" 
clip-path="url(#breeze-help-line-15)">-time</text><text class="breeze-help-r2" 
x="353.8" y="3 [...]
+</text><text class="breeze-help-r4" x="0" y="410.4" textLength="12.2" 
clip-path="url(#breeze-help-line-16)">│</text><text class="breeze-help-r7" 
x="353.8" y="410.4" textLength="1049.2" 
clip-path="url(#breeze-help-line-16)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="breeze-help-r4" x="0" y="434.8" textLength="12.2" 
clip-path="url(#breeze-help-line-17)">│</text><text class="breeze-help-r5" 
x="24.4" y="434.8" textLength="12.2" 
clip-path="url(#breeze-help-line-17)">-</text><text class="breeze-help-r5" 
x="36.6" y="434.8" textLength="85.4" 
clip-path="url(#breeze-help-line-17)">-github</text><text 
class="breeze-help-r5" x="122" y="434.8" textLength="134.2" 
clip-path="url(#breeze-help-line-17)">-repository</text><text 
class="breeze-help [...]
+</text><text class="breeze-help-r4" x="0" y="459.2" textLength="12.2" 
clip-path="url(#breeze-help-line-18)">│</text><text class="breeze-help-r5" 
x="24.4" y="459.2" textLength="12.2" 
clip-path="url(#breeze-help-line-18)">-</text><text class="breeze-help-r5" 
x="36.6" y="459.2" textLength="97.6" 
clip-path="url(#breeze-help-line-18)">-builder</text><text 
class="breeze-help-r2" x="353.8" y="459.2" textLength="756.4" 
clip-path="url(#breeze-help-line-18)">Buildx&#160;builder&#160;used&#160;to&# 
[...]
+</text><text class="breeze-help-r4" x="0" y="483.6" textLength="12.2" 
clip-path="url(#breeze-help-line-19)">│</text><text class="breeze-help-r4" 
x="353.8" y="483.6" textLength="756.4" 
clip-path="url(#breeze-help-line-19)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="breeze-help-r4" x="0" y="508" textLength="1464" 
clip-path="url(#breeze-help-line-20)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-help-r2" x="1464" y="508" textLength="12.2" 
clip-path="url(#breeze-help-line-20)">
+</text><text class="breeze-help-r4" x="0" y="532.4" textLength="24.4" 
clip-path="url(#breeze-help-line-21)">╭─</text><text class="breeze-help-r4" 
x="24.4" y="532.4" textLength="195.2" 
clip-path="url(#breeze-help-line-21)">&#160;Common&#160;options&#160;</text><text
 class="breeze-help-r4" x="219.6" y="532.4" textLength="1220" 
clip-path="url(#breeze-help-line-21)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="breeze- [...]
+</text><text class="breeze-help-r4" x="0" y="556.8" textLength="12.2" 
clip-path="url(#breeze-help-line-22)">│</text><text class="breeze-help-r5" 
x="24.4" y="556.8" textLength="12.2" 
clip-path="url(#breeze-help-line-22)">-</text><text class="breeze-help-r5" 
x="36.6" y="556.8" textLength="97.6" 
clip-path="url(#breeze-help-line-22)">-verbose</text><text 
class="breeze-help-r6" x="158.6" y="556.8" textLength="24.4" 
clip-path="url(#breeze-help-line-22)">-v</text><text class="breeze-help-r2" x= 
[...]
+</text><text class="breeze-help-r4" x="0" y="581.2" textLength="12.2" 
clip-path="url(#breeze-help-line-23)">│</text><text class="breeze-help-r5" 
x="24.4" y="581.2" textLength="12.2" 
clip-path="url(#breeze-help-line-23)">-</text><text class="breeze-help-r5" 
x="36.6" y="581.2" textLength="48.8" 
clip-path="url(#breeze-help-line-23)">-dry</text><text class="breeze-help-r5" 
x="85.4" y="581.2" textLength="48.8" 
clip-path="url(#breeze-help-line-23)">-run</text><text class="breeze-help-r6" 
x="15 [...]
+</text><text class="breeze-help-r4" x="0" y="605.6" textLength="12.2" 
clip-path="url(#breeze-help-line-24)">│</text><text class="breeze-help-r5" 
x="24.4" y="605.6" textLength="12.2" 
clip-path="url(#breeze-help-line-24)">-</text><text class="breeze-help-r5" 
x="36.6" y="605.6" textLength="85.4" 
clip-path="url(#breeze-help-line-24)">-answer</text><text 
class="breeze-help-r6" x="158.6" y="605.6" textLength="24.4" 
clip-path="url(#breeze-help-line-24)">-a</text><text class="breeze-help-r2" x=" 
[...]
+</text><text class="breeze-help-r4" x="0" y="630" textLength="12.2" 
clip-path="url(#breeze-help-line-25)">│</text><text class="breeze-help-r5" 
x="24.4" y="630" textLength="12.2" 
clip-path="url(#breeze-help-line-25)">-</text><text class="breeze-help-r5" 
x="36.6" y="630" textLength="61" 
clip-path="url(#breeze-help-line-25)">-help</text><text class="breeze-help-r6" 
x="158.6" y="630" textLength="24.4" 
clip-path="url(#breeze-help-line-25)">-h</text><text class="breeze-help-r2" 
x="207.4" y="63 [...]
+</text><text class="breeze-help-r4" x="0" y="654.4" textLength="1464" 
clip-path="url(#breeze-help-line-26)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-help-r2" x="1464" y="654.4" textLength="12.2" 
clip-path="url(#breeze-help-line-26)">
+</text><text class="breeze-help-r4" x="0" y="678.8" textLength="24.4" 
clip-path="url(#breeze-help-line-27)">╭─</text><text class="breeze-help-r4" 
x="24.4" y="678.8" textLength="244" 
clip-path="url(#breeze-help-line-27)">&#160;Developer&#160;commands&#160;</text><text
 class="breeze-help-r4" x="268.4" y="678.8" textLength="1171.2" 
clip-path="url(#breeze-help-line-27)">────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="breeze- [...]
+</text><text class="breeze-help-r4" x="0" y="703.2" textLength="12.2" 
clip-path="url(#breeze-help-line-28)">│</text><text class="breeze-help-r5" 
x="24.4" y="703.2" textLength="219.6" 
clip-path="url(#breeze-help-line-28)">start-airflow&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="268.4" y="703.2" textLength="1171.2" 
clip-path="url(#breeze-help-line-28)">Enter&#160;breeze&#160;environment&#160;and&#160;starts&#160;all&#160;Airflow&#160;components&#160;in&#160;the&#16
 [...]
+</text><text class="breeze-help-r4" x="0" y="727.6" textLength="12.2" 
clip-path="url(#breeze-help-line-29)">│</text><text class="breeze-help-r2" 
x="268.4" y="727.6" textLength="1171.2" 
clip-path="url(#breeze-help-line-29)">if&#160;contents&#160;of&#160;www&#160;directory&#160;changed.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
+</text><text class="breeze-help-r4" x="0" y="752" textLength="12.2" 
clip-path="url(#breeze-help-line-30)">│</text><text class="breeze-help-r5" 
x="24.4" y="752" textLength="219.6" 
clip-path="url(#breeze-help-line-30)">static-checks&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="268.4" y="752" textLength="1171.2" 
clip-path="url(#breeze-help-line-30)">Run&#160;static&#160;checks.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
+</text><text class="breeze-help-r4" x="0" y="776.4" textLength="12.2" 
clip-path="url(#breeze-help-line-31)">│</text><text class="breeze-help-r5" 
x="24.4" y="776.4" textLength="219.6" 
clip-path="url(#breeze-help-line-31)">build-docs&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="268.4" y="776.4" textLength="1171.2" 
clip-path="url(#breeze-help-line-31)">Build&#160;documents.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
+</text><text class="breeze-help-r4" x="0" y="800.8" textLength="12.2" 
clip-path="url(#breeze-help-line-32)">│</text><text class="breeze-help-r5" 
x="24.4" y="800.8" textLength="219.6" 
clip-path="url(#breeze-help-line-32)">down&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="268.4" y="800.8" textLength="1171.2" 
clip-path="url(#breeze-help-line-32)">Stop&#160;running&#160;breeze&#160;environment.&#160;&#160;&#160;&#16
 [...]
+</text><text class="breeze-help-r4" x="0" y="825.2" textLength="12.2" 
clip-path="url(#breeze-help-line-33)">│</text><text class="breeze-help-r5" 
x="24.4" y="825.2" textLength="219.6" 
clip-path="url(#breeze-help-line-33)">shell&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="268.4" y="825.2" textLength="1171.2" 
clip-path="url(#breeze-help-line-33)">Enter&#160;breeze&#160;environment.&#160;this&#160;is&#160;the&#160;defaul
 [...]
+</text><text class="breeze-help-r4" x="0" y="849.6" textLength="12.2" 
clip-path="url(#breeze-help-line-34)">│</text><text class="breeze-help-r5" 
x="24.4" y="849.6" textLength="219.6" 
clip-path="url(#breeze-help-line-34)">exec&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="268.4" y="849.6" textLength="1171.2" 
clip-path="url(#breeze-help-line-34)">Joins&#160;the&#160;interactive&#160;shell&#160;of&#160;running&#160;
 [...]
+</text><text class="breeze-help-r4" x="0" y="874" textLength="12.2" 
clip-path="url(#breeze-help-line-35)">│</text><text class="breeze-help-r5" 
x="24.4" y="874" textLength="219.6" 
clip-path="url(#breeze-help-line-35)">compile-www-assets</text><text 
class="breeze-help-r2" x="268.4" y="874" textLength="1171.2" 
clip-path="url(#breeze-help-line-35)">Compiles&#160;www&#160;assets.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
+</text><text class="breeze-help-r4" x="0" y="898.4" textLength="12.2" 
clip-path="url(#breeze-help-line-36)">│</text><text class="breeze-help-r5" 
x="24.4" y="898.4" textLength="219.6" 
clip-path="url(#breeze-help-line-36)">cleanup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="268.4" y="898.4" textLength="1171.2" 
clip-path="url(#breeze-help-line-36)">Cleans&#160;the&#160;cache&#160;of&#160;parameters,&#160;docker&#160;cache&#160;and&
 [...]
+</text><text class="breeze-help-r4" x="0" y="922.8" textLength="1464" 
clip-path="url(#breeze-help-line-37)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-help-r2" x="1464" y="922.8" textLength="12.2" 
clip-path="url(#breeze-help-line-37)">
+</text><text class="breeze-help-r4" x="0" y="947.2" textLength="24.4" 
clip-path="url(#breeze-help-line-38)">╭─</text><text class="breeze-help-r4" 
x="24.4" y="947.2" textLength="219.6" 
clip-path="url(#breeze-help-line-38)">&#160;Testing&#160;commands&#160;</text><text
 class="breeze-help-r4" x="244" y="947.2" textLength="1195.6" 
clip-path="url(#breeze-help-line-38)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="breeze- [...]
+</text><text class="breeze-help-r4" x="0" y="971.6" textLength="12.2" 
clip-path="url(#breeze-help-line-39)">│</text><text class="breeze-help-r5" 
x="24.4" y="971.6" textLength="183" 
clip-path="url(#breeze-help-line-39)">testing&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="231.8" y="971.6" textLength="1207.8" 
clip-path="url(#breeze-help-line-39)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;run&#160;tests&#160;&#160;&#160;&#160;&#1
 [...]
+</text><text class="breeze-help-r4" x="0" y="996" textLength="12.2" 
clip-path="url(#breeze-help-line-40)">│</text><text class="breeze-help-r5" 
x="24.4" y="996" textLength="183" 
clip-path="url(#breeze-help-line-40)">k8s&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="231.8" y="996" textLength="1207.8" 
clip-path="url(#breeze-help-line-40)">Tools&#160;that&#160;developers&#160;use&#160;to&#160;run&#160;Kubernetes&#160;tests&#160;
 [...]
+</text><text class="breeze-help-r4" x="0" y="1020.4" textLength="1464" 
clip-path="url(#breeze-help-line-41)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-help-r2" x="1464" y="1020.4" textLength="12.2" 
clip-path="url(#breeze-help-line-41)">
+</text><text class="breeze-help-r4" x="0" y="1044.8" textLength="24.4" 
clip-path="url(#breeze-help-line-42)">╭─</text><text class="breeze-help-r4" 
x="24.4" y="1044.8" textLength="195.2" 
clip-path="url(#breeze-help-line-42)">&#160;Image&#160;commands&#160;</text><text
 class="breeze-help-r4" x="219.6" y="1044.8" textLength="1220" 
clip-path="url(#breeze-help-line-42)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="bree [...]
+</text><text class="breeze-help-r4" x="0" y="1069.2" textLength="12.2" 
clip-path="url(#breeze-help-line-43)">│</text><text class="breeze-help-r5" 
x="24.4" y="1069.2" textLength="207.4" 
clip-path="url(#breeze-help-line-43)">ci-image&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="256.2" y="1069.2" textLength="1183.4" 
clip-path="url(#breeze-help-line-43)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;manually&#160;manage&#160;CI&
 [...]
+</text><text class="breeze-help-r4" x="0" y="1093.6" textLength="12.2" 
clip-path="url(#breeze-help-line-44)">│</text><text class="breeze-help-r5" 
x="24.4" y="1093.6" textLength="207.4" 
clip-path="url(#breeze-help-line-44)">prod-image&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="256.2" y="1093.6" textLength="1183.4" 
clip-path="url(#breeze-help-line-44)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;manually&#160;manage&#160;PROD&#160;ima
 [...]
+</text><text class="breeze-help-r4" x="0" y="1118" textLength="1464" 
clip-path="url(#breeze-help-line-45)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-help-r2" x="1464" y="1118" textLength="12.2" 
clip-path="url(#breeze-help-line-45)">
+</text><text class="breeze-help-r4" x="0" y="1142.4" textLength="24.4" 
clip-path="url(#breeze-help-line-46)">╭─</text><text class="breeze-help-r4" 
x="24.4" y="1142.4" textLength="353.8" 
clip-path="url(#breeze-help-line-46)">&#160;Release&#160;management&#160;commands&#160;</text><text
 class="breeze-help-r4" x="378.2" y="1142.4" textLength="1061.4" 
clip-path="url(#breeze-help-line-46)">───────────────────────────────────────────────────────────────────────────────────────</text><text
 clas [...]
+</text><text class="breeze-help-r4" x="0" y="1166.8" textLength="12.2" 
clip-path="url(#breeze-help-line-47)">│</text><text class="breeze-help-r5" 
x="24.4" y="1166.8" textLength="280.6" 
clip-path="url(#breeze-help-line-47)">release-management&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="329.4" y="1166.8" textLength="1110.2" 
clip-path="url(#breeze-help-line-47)">Tools&#160;that&#160;release&#160;managers&#160;can&#160;use&#160;to&#160;prepare&#160;and&#160;manage&#16
 [...]
+</text><text class="breeze-help-r4" x="0" y="1191.2" textLength="12.2" 
clip-path="url(#breeze-help-line-48)">│</text><text class="breeze-help-r5" 
x="24.4" y="1191.2" textLength="280.6" 
clip-path="url(#breeze-help-line-48)">sbom&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="329.4" y="1191.2" textLength="1110.2" 
clip-path="url(#breeze-help-line-48)">Tools&#160;that&#160;release&#160;ma [...]
+</text><text class="breeze-help-r4" x="0" y="1215.6" textLength="1464" 
clip-path="url(#breeze-help-line-49)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-help-r2" x="1464" y="1215.6" textLength="12.2" 
clip-path="url(#breeze-help-line-49)">
+</text><text class="breeze-help-r4" x="0" y="1240" textLength="24.4" 
clip-path="url(#breeze-help-line-50)">╭─</text><text class="breeze-help-r4" 
x="24.4" y="1240" textLength="195.2" 
clip-path="url(#breeze-help-line-50)">&#160;Other&#160;commands&#160;</text><text
 class="breeze-help-r4" x="219.6" y="1240" textLength="1220" 
clip-path="url(#breeze-help-line-50)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="breeze-hel [...]
+</text><text class="breeze-help-r4" x="0" y="1264.4" textLength="12.2" 
clip-path="url(#breeze-help-line-51)">│</text><text class="breeze-help-r5" 
x="24.4" y="1264.4" textLength="122" 
clip-path="url(#breeze-help-line-51)">setup&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="170.8" y="1264.4" textLength="1268.8" 
clip-path="url(#breeze-help-line-51)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;configure&#160;Breeze&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
+</text><text class="breeze-help-r4" x="0" y="1288.8" textLength="12.2" 
clip-path="url(#breeze-help-line-52)">│</text><text class="breeze-help-r5" 
x="24.4" y="1288.8" textLength="122" 
clip-path="url(#breeze-help-line-52)">ci&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-help-r2" x="170.8" y="1288.8" textLength="1268.8" 
clip-path="url(#breeze-help-line-52)">Tools&#160;that&#160;CI&#160;workflows&#160;use&#160;to&#160;cleanup/manage&#160;CI&#160;environment&#160;
 [...]
+</text><text class="breeze-help-r4" x="0" y="1313.2" textLength="1464" 
clip-path="url(#breeze-help-line-53)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-help-r2" x="1464" y="1313.2" textLength="12.2" 
clip-path="url(#breeze-help-line-53)">
 </text>
     </g>
     </g>
diff --git a/images/breeze/output_testing_docker-compose-tests.svg 
b/images/breeze/output_testing_docker-compose-tests.svg
index 05dbac74ef..d927ea3dfc 100644
--- a/images/breeze/output_testing_docker-compose-tests.svg
+++ b/images/breeze/output_testing_docker-compose-tests.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 635.5999999999999" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 586.8" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-testing-docker-compose-tests-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="584.5999999999999" />
+      <rect x="0" y="0" width="1463.0" height="535.8" />
     </clipPath>
     <clipPath id="breeze-testing-docker-compose-tests-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -108,15 +108,9 @@
 <clipPath id="breeze-testing-docker-compose-tests-line-20">
     <rect x="0" y="489.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="breeze-testing-docker-compose-tests-line-21">
-    <rect x="0" y="513.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-testing-docker-compose-tests-line-22">
-    <rect x="0" y="538.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="633.6" rx="8"/><text 
class="breeze-testing-docker-compose-tests-title" fill="#c5c8c6" 
text-anchor="middle" x="740" 
y="27">Command:&#160;testing&#160;docker-compose-tests</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="584.8" rx="8"/><text 
class="breeze-testing-docker-compose-tests-title" fill="#c5c8c6" 
text-anchor="middle" x="740" 
y="27">Command:&#160;testing&#160;docker-compose-tests</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -140,16 +134,14 @@
 </text><text class="breeze-testing-docker-compose-tests-r4" x="0" y="288.4" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-11)">│</text><text 
class="breeze-testing-docker-compose-tests-r7" x="463.6" y="288.4" 
textLength="732" 
clip-path="url(#breeze-testing-docker-compose-tests-line-11)">(&gt;3.8&lt;&#160;|&#160;3.9&#160;|&#160;3.10&#160;|&#160;3.11)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
 </text><text class="breeze-testing-docker-compose-tests-r4" x="0" y="312.8" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-12)">│</text><text 
class="breeze-testing-docker-compose-tests-r4" x="463.6" y="312.8" 
textLength="732" 
clip-path="url(#breeze-testing-docker-compose-tests-line-12)">[default:&#160;3.8]&#160;&#160;&#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-testing-docker-compose-tests-r4" x="0" y="337.2" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-13)">│</text><text 
class="breeze-testing-docker-compose-tests-r5" x="24.4" y="337.2" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-13)">-</text><text 
class="breeze-testing-docker-compose-tests-r5" x="36.6" y="337.2" 
textLength="61" 
clip-path="url(#breeze-testing-docker-compose-tests-line-13)">-skip</text><text 
 [...]
-</text><text class="breeze-testing-docker-compose-tests-r4" x="0" y="361.6" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-14)">│</text><text 
class="breeze-testing-docker-compose-tests-r5" x="24.4" y="361.6" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-14)">-</text><text 
class="breeze-testing-docker-compose-tests-r5" x="36.6" y="361.6" 
textLength="61" 
clip-path="url(#breeze-testing-docker-compose-tests-line-14)">-wait</text><text 
 [...]
-</text><text class="breeze-testing-docker-compose-tests-r4" x="0" y="386" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-15)">│</text><text 
class="breeze-testing-docker-compose-tests-r4" x="463.6" y="386" 
textLength="646.6" 
clip-path="url(#breeze-testing-docker-compose-tests-line-15)">[default:&#160;300;&#160;0&lt;=x&lt;=600]&#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-testing-docker-compose-tests-r4" x="0" y="410.4" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-16)">│</text><text 
class="breeze-testing-docker-compose-tests-r5" x="24.4" y="410.4" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-16)">-</text><text 
class="breeze-testing-docker-compose-tests-r5" x="36.6" y="410.4" 
textLength="85.4" 
clip-path="url(#breeze-testing-docker-compose-tests-line-16)">-github</text><t 
[...]
-</text><text class="breeze-testing-docker-compose-tests-r4" x="0" y="434.8" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-17)">│</text><text 
class="breeze-testing-docker-compose-tests-r4" x="463.6" y="434.8" 
textLength="585.6" 
clip-path="url(#breeze-testing-docker-compose-tests-line-17)">[default:&#160;apache/airflow]&#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><text class="breeze-testing-docker-compose-tests-r4" x="0" y="459.2" 
textLength="1464" 
clip-path="url(#breeze-testing-docker-compose-tests-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-testing-docker-compose-tests-r2" x="1464" y="459.2" 
textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-18)">
-</text><text class="breeze-testing-docker-compose-tests-r4" x="0" y="483.6" 
textLength="24.4" 
clip-path="url(#breeze-testing-docker-compose-tests-line-19)">╭─</text><text 
class="breeze-testing-docker-compose-tests-r4" x="24.4" y="483.6" 
textLength="195.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-19)">&#160;Common&#160;options&#160;</text><text
 class="breeze-testing-docker-compose-tests-r4" x="219.6" y="483.6" 
textLength="1220" clip-path="url(#breeze-testing-docker-compose [...]
-</text><text class="breeze-testing-docker-compose-tests-r4" x="0" y="508" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-20)">│</text><text 
class="breeze-testing-docker-compose-tests-r5" x="24.4" y="508" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-20)">-</text><text 
class="breeze-testing-docker-compose-tests-r5" x="36.6" y="508" 
textLength="97.6" 
clip-path="url(#breeze-testing-docker-compose-tests-line-20)">-verbose</text><text
 c [...]
-</text><text class="breeze-testing-docker-compose-tests-r4" x="0" y="532.4" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-21)">│</text><text 
class="breeze-testing-docker-compose-tests-r5" x="24.4" y="532.4" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-21)">-</text><text 
class="breeze-testing-docker-compose-tests-r5" x="36.6" y="532.4" 
textLength="48.8" 
clip-path="url(#breeze-testing-docker-compose-tests-line-21)">-dry</text><text 
[...]
-</text><text class="breeze-testing-docker-compose-tests-r4" x="0" y="556.8" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-22)">│</text><text 
class="breeze-testing-docker-compose-tests-r5" x="24.4" y="556.8" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-22)">-</text><text 
class="breeze-testing-docker-compose-tests-r5" x="36.6" y="556.8" 
textLength="61" 
clip-path="url(#breeze-testing-docker-compose-tests-line-22)">-help</text><text 
 [...]
-</text><text class="breeze-testing-docker-compose-tests-r4" x="0" y="581.2" 
textLength="1464" 
clip-path="url(#breeze-testing-docker-compose-tests-line-23)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-testing-docker-compose-tests-r2" x="1464" y="581.2" 
textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-23)">
+</text><text class="breeze-testing-docker-compose-tests-r4" x="0" y="361.6" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-14)">│</text><text 
class="breeze-testing-docker-compose-tests-r5" x="24.4" y="361.6" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-14)">-</text><text 
class="breeze-testing-docker-compose-tests-r5" x="36.6" y="361.6" 
textLength="85.4" 
clip-path="url(#breeze-testing-docker-compose-tests-line-14)">-github</text><t 
[...]
+</text><text class="breeze-testing-docker-compose-tests-r4" x="0" y="386" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-15)">│</text><text 
class="breeze-testing-docker-compose-tests-r4" x="463.6" y="386" 
textLength="585.6" 
clip-path="url(#breeze-testing-docker-compose-tests-line-15)">[default:&#160;apache/airflow]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><te
 [...]
+</text><text class="breeze-testing-docker-compose-tests-r4" x="0" y="410.4" 
textLength="1464" 
clip-path="url(#breeze-testing-docker-compose-tests-line-16)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-testing-docker-compose-tests-r2" x="1464" y="410.4" 
textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-16)">
+</text><text class="breeze-testing-docker-compose-tests-r4" x="0" y="434.8" 
textLength="24.4" 
clip-path="url(#breeze-testing-docker-compose-tests-line-17)">╭─</text><text 
class="breeze-testing-docker-compose-tests-r4" x="24.4" y="434.8" 
textLength="195.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-17)">&#160;Common&#160;options&#160;</text><text
 class="breeze-testing-docker-compose-tests-r4" x="219.6" y="434.8" 
textLength="1220" clip-path="url(#breeze-testing-docker-compose [...]
+</text><text class="breeze-testing-docker-compose-tests-r4" x="0" y="459.2" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-18)">│</text><text 
class="breeze-testing-docker-compose-tests-r5" x="24.4" y="459.2" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-18)">-</text><text 
class="breeze-testing-docker-compose-tests-r5" x="36.6" y="459.2" 
textLength="97.6" 
clip-path="url(#breeze-testing-docker-compose-tests-line-18)">-verbose</text>< 
[...]
+</text><text class="breeze-testing-docker-compose-tests-r4" x="0" y="483.6" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-19)">│</text><text 
class="breeze-testing-docker-compose-tests-r5" x="24.4" y="483.6" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-19)">-</text><text 
class="breeze-testing-docker-compose-tests-r5" x="36.6" y="483.6" 
textLength="48.8" 
clip-path="url(#breeze-testing-docker-compose-tests-line-19)">-dry</text><text 
[...]
+</text><text class="breeze-testing-docker-compose-tests-r4" x="0" y="508" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-20)">│</text><text 
class="breeze-testing-docker-compose-tests-r5" x="24.4" y="508" 
textLength="12.2" 
clip-path="url(#breeze-testing-docker-compose-tests-line-20)">-</text><text 
class="breeze-testing-docker-compose-tests-r5" x="36.6" y="508" textLength="61" 
clip-path="url(#breeze-testing-docker-compose-tests-line-20)">-help</text><text 
class= [...]
+</text><text class="breeze-testing-docker-compose-tests-r4" x="0" y="532.4" 
textLength="1464" 
clip-path="url(#breeze-testing-docker-compose-tests-line-21)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-testing-docker-compose-tests-r2" x="1464" y="532.4" 
textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-21)">
 </text>
     </g>
     </g>

Reply via email to