You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by po...@apache.org on 2023/08/20 17:28:41 UTC

[airflow] branch main updated: Separate Innovation, LTS and old releases of MySQL backend (#33522)

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 7d352e20f5 Separate Innovation, LTS and old releases of MySQL backend (#33522)
7d352e20f5 is described below

commit 7d352e20f5d21e6fef607832f3501d8199932f9f
Author: Andrey Anshin <An...@taragol.is>
AuthorDate: Sun Aug 20 21:28:33 2023 +0400

    Separate Innovation, LTS and old releases of MySQL backend (#33522)
    
    * Separate Innovation, LTS and old releases of MySQL backend
    
    * Run tests against 'innovation' mysql releases
---
 .../airflow_breeze/commands/developer_commands.py  |  4 ++--
 dev/breeze/src/airflow_breeze/global_constants.py  | 20 ++++++++++++++++++--
 .../src/airflow_breeze/utils/common_options.py     |  3 ++-
 .../src/airflow_breeze/utils/custom_param_types.py | 22 ++++++++++++++++++++++
 images/breeze/output-commands-hash.txt             | 16 ++++++++--------
 images/breeze/output-commands.svg                  |  2 +-
 images/breeze/output_setup_config.svg              |  2 +-
 images/breeze/output_shell.svg                     |  2 +-
 images/breeze/output_start-airflow.svg             |  2 +-
 images/breeze/output_testing_integration-tests.svg |  2 +-
 images/breeze/output_testing_tests.svg             |  2 +-
 11 files changed, 58 insertions(+), 19 deletions(-)

diff --git a/dev/breeze/src/airflow_breeze/commands/developer_commands.py b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
index 71c6fc85e0..59671a273f 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
@@ -730,11 +730,11 @@ def enter_shell(**kwargs) -> RunCommandResult:
         cmd.extend(["-c", cmd_added])
     if "arm64" in DOCKER_DEFAULT_PLATFORM:
         if shell_params.backend == "mysql":
-            if shell_params.mysql_version == "8":
+            if not shell_params.mysql_version.startswith("5"):
                 get_console().print("\n[warn]MySQL use MariaDB client binaries on ARM architecture.[/]\n")
             else:
                 get_console().print(
-                    f"\n[error]Only MySQL 8.0 is supported on ARM architecture, "
+                    f"\n[error]Only MySQL 8.x is supported on ARM architecture, "
                     f"but got {shell_params.mysql_version}[/]\n"
                 )
                 sys.exit(1)
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py b/dev/breeze/src/airflow_breeze/global_constants.py
index 766dc094ec..ceafd6c43f 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -84,7 +84,19 @@ MOUNT_REMOVE = "remove"
 
 ALLOWED_MOUNT_OPTIONS = [MOUNT_SELECTED, MOUNT_ALL, MOUNT_SKIP, MOUNT_REMOVE]
 ALLOWED_POSTGRES_VERSIONS = ["11", "12", "13", "14", "15"]
-ALLOWED_MYSQL_VERSIONS = ["5.7", "8"]
+# Oracle introduced new release model for MySQL
+# - LTS: Long Time Support releases, new release approx every 2 year,
+#  with 5 year premier and 3 year extended support, no new features/removals during current LTS release.
+#  the first LTS release should be in summer/fall 2024.
+# - Innovations: Shot living releases with short support cycle - only until next Innovation/LTS release.
+# See: https://dev.mysql.com/blog-archive/introducing-mysql-innovation-and-long-term-support-lts-versions/
+MYSQL_LTS_RELEASES: list[str] = []
+MYSQL_OLD_RELEASES = ["5.7", "8.0"]
+MYSQL_INNOVATION_RELEASE = "8.1"
+ALLOWED_MYSQL_VERSIONS = [*MYSQL_OLD_RELEASES, *MYSQL_LTS_RELEASES]
+if MYSQL_INNOVATION_RELEASE:
+    ALLOWED_MYSQL_VERSIONS.append(MYSQL_INNOVATION_RELEASE)
+
 ALLOWED_MSSQL_VERSIONS = ["2017-latest", "2019-latest"]
 
 PIP_VERSION = "23.2.1"
@@ -190,7 +202,11 @@ ALL_PYTHON_MAJOR_MINOR_VERSIONS = ["3.8", "3.9", "3.10", "3.11"]
 CURRENT_PYTHON_MAJOR_MINOR_VERSIONS = ALL_PYTHON_MAJOR_MINOR_VERSIONS
 CURRENT_POSTGRES_VERSIONS = ["11", "12", "13", "14", "15"]
 DEFAULT_POSTGRES_VERSION = CURRENT_POSTGRES_VERSIONS[0]
-CURRENT_MYSQL_VERSIONS = ["5.7", "8"]
+USE_MYSQL_INNOVATION_RELEASE = True
+if USE_MYSQL_INNOVATION_RELEASE:
+    CURRENT_MYSQL_VERSIONS = ALLOWED_MYSQL_VERSIONS.copy()
+else:
+    CURRENT_MYSQL_VERSIONS = [*MYSQL_OLD_RELEASES, *MYSQL_LTS_RELEASES]
 DEFAULT_MYSQL_VERSION = CURRENT_MYSQL_VERSIONS[0]
 CURRENT_MSSQL_VERSIONS = ["2017-latest", "2019-latest"]
 DEFAULT_MSSQL_VERSION = CURRENT_MSSQL_VERSIONS[0]
diff --git a/dev/breeze/src/airflow_breeze/utils/common_options.py b/dev/breeze/src/airflow_breeze/utils/common_options.py
index 19dc387c32..c5bfe688f2 100644
--- a/dev/breeze/src/airflow_breeze/utils/common_options.py
+++ b/dev/breeze/src/airflow_breeze/utils/common_options.py
@@ -51,6 +51,7 @@ from airflow_breeze.utils.custom_param_types import (
     CacheableChoice,
     CacheableDefault,
     DryRunOption,
+    MySQLBackendVersionType,
     UseAirflowVersionType,
     VerboseOption,
 )
@@ -151,7 +152,7 @@ option_mysql_version = click.option(
     "-M",
     "--mysql-version",
     help="Version of MySQL used.",
-    type=CacheableChoice(ALLOWED_MYSQL_VERSIONS),
+    type=MySQLBackendVersionType(ALLOWED_MYSQL_VERSIONS),
     default=CacheableDefault(ALLOWED_MYSQL_VERSIONS[0]),
     show_default=True,
 )
diff --git a/dev/breeze/src/airflow_breeze/utils/custom_param_types.py b/dev/breeze/src/airflow_breeze/utils/custom_param_types.py
index 5fca204a4d..d2be85aa3b 100644
--- a/dev/breeze/src/airflow_breeze/utils/custom_param_types.py
+++ b/dev/breeze/src/airflow_breeze/utils/custom_param_types.py
@@ -191,6 +191,28 @@ class CacheableChoice(click.Choice):
         super().__init__(choices=choices, case_sensitive=case_sensitive)
 
 
+class MySQLBackendVersionType(CacheableChoice):
+    def convert(self, value, param, ctx):
+        if isinstance(value, CacheableDefault):
+            param_name = param.envvar if param.envvar else param.name.upper()
+            mysql_version = read_from_cache_file(param_name)
+            if mysql_version == "8":
+                value = "8.0"
+                get_console().print(
+                    f"\n[warning]Found outdated cached value {mysql_version} for parameter {param.name}. "
+                    f"Replaced by {value}"
+                )
+                write_to_cache_file(param_name, "8.0", check_allowed_values=False)
+        else:
+            if value == "8":
+                value = "8.0"
+                get_console().print(
+                    f"\n[warning]Provided outdated value {8} for parameter {param.name}. "
+                    f"Will use {value} instead"
+                )
+        return super().convert(value, param, ctx)
+
+
 class UseAirflowVersionType(BetterChoice):
     """Extends choice with dynamic version number."""
 
diff --git a/images/breeze/output-commands-hash.txt b/images/breeze/output-commands-hash.txt
index 0ecce01fda..5c81b1f825 100644
--- a/images/breeze/output-commands-hash.txt
+++ b/images/breeze/output-commands-hash.txt
@@ -1,7 +1,7 @@
 # This file is automatically generated by pre-commit. If you have a conflict with this file
 # Please do not solve it but run `breeze setup regenerate-command-images`.
 # This command should fix the conflict and regenerate help images that you have conflict with.
-main:344261ca3aa7ff31e098b1d88280566a
+main:42493af4045e28dcf52040810fbb7036
 build-docs:bfc91db55c595516fe84d56c96a5a8e0
 ci:find-backtracking-candidates:17fe56b867a745e5032a08dfcd3f73ee
 ci:fix-ownership:3e5a73533cc96045e72cb258783cfc96
@@ -57,16 +57,16 @@ sbom:update-sbom-information:0ce56884e5f842e3e80d6619df1ccc64
 sbom:935d041028e847d3faf763a95b51063e
 setup:autocomplete:fffcd49e102e09ccd69b3841a9e3ea8e
 setup:check-all-params-in-groups:639dfb061b8da02dcaa4a57b567ff42a
-setup:config:38ebaaf93ed42bc7b2a3000eeea2631d
+setup:config:fd32471ee31894decf91984615771add
 setup:regenerate-command-images:d5e29ec6acb1a6af7d83772c2962f89d
 setup:self-upgrade:4af905a147fcd6670a0e33d3d369a94b
 setup:version:be116d90a21c2afe01087f7609774e1e
-setup:8de3ed2645928e8f9f89c58f0ccd2a60
-shell:87e7bdcebe1180395adfec86b2a065f5
-start-airflow:f7216a8126ecf14b033e2ea677e1a105
+setup:fd391bab5277ad3aca65987a84144d51
+shell:c7adf57a354ecb496ae12fc0b9eaea80
+start-airflow:23df4528b3972977e58f7d29336500f7
 static-checks:5ded21248cd4f5617779f58ecf6c554c
 testing:docker-compose-tests:0c810047fc66a0cfe91119e2d08b3507
 testing:helm-tests:8e491da2e01ebd815322c37562059d77
-testing:integration-tests:486e4d91449ecdb7630ef2a470d705a3
-testing:tests:3c202e65824e405269e78f58936980e0
-testing:68a089bc30e0e60f834f205df1e9f086
+testing:integration-tests:f2a400ac9f722b9c279abbd4e3313e71
+testing:tests:abc232b1a9b416928ccc0a7dd904ed18
+testing:e6d79999174876ea42e73454f0ba9342
diff --git a/images/breeze/output-commands.svg b/images/breeze/output-commands.svg
index 65ed6cdbb0..51829ca34b 100644
--- a/images/breeze/output-commands.svg
+++ b/images/breeze/output-commands.svg
@@ -224,7 +224,7 @@
 </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="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 [...]
diff --git a/images/breeze/output_setup_config.svg b/images/breeze/output_setup_config.svg
index 43fcb8bc98..65f4338133 100644
--- a/images/breeze/output_setup_config.svg
+++ b/images/breeze/output_setup_config.svg
@@ -129,7 +129,7 @@
 </text><text class="breeze-setup-config-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-9)">│</text><text class="breeze-setup-config-r4" x="24.4" y="239.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-9)">-</text><text class="breeze-setup-config-r4" x="36.6" y="239.6" textLength="97.6" clip-path="url(#breeze-setup-config-line-9)">-backend</text><text class="breeze-setup-config-r6" x="390.4" y="239.6" textLength="24.4" clip-path="url(#breeze-se [...]
 </text><text class="breeze-setup-config-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-setup-config-line-10)">│</text><text class="breeze-setup-config-r5" x="475.8" y="264" textLength="292.8" clip-path="url(#breeze-setup-config-line-10)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-setup-config-line-10)">│</text><text class="breeze-setup-config-r2" x="146 [...]
 </text><text class="breeze-setup-config-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-11)">│</text><text class="breeze-setup-config-r4" x="24.4" y="288.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-11)">-</text><text class="breeze-setup-config-r4" x="36.6" y="288.4" textLength="109.8" clip-path="url(#breeze-setup-config-line-11)">-postgres</text><text class="breeze-setup-config-r4" x="146.4" y="288.4" textLength="97.6" clip-path="url(#bree [...]
-</text><text class="breeze-setup-config-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-12)">│</text><text class="breeze-setup-config-r4" x="24.4" y="312.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-12)">-</text><text class="breeze-setup-config-r4" x="36.6" y="312.8" textLength="73.2" clip-path="url(#breeze-setup-config-line-12)">-mysql</text><text class="breeze-setup-config-r4" x="109.8" y="312.8" textLength="97.6" clip-path="url(#breeze-s [...]
+</text><text class="breeze-setup-config-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-12)">│</text><text class="breeze-setup-config-r4" x="24.4" y="312.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-12)">-</text><text class="breeze-setup-config-r4" x="36.6" y="312.8" textLength="73.2" clip-path="url(#breeze-setup-config-line-12)">-mysql</text><text class="breeze-setup-config-r4" x="109.8" y="312.8" textLength="97.6" clip-path="url(#breeze-s [...]
 </text><text class="breeze-setup-config-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-13)">│</text><text class="breeze-setup-config-r4" x="24.4" y="337.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-13)">-</text><text class="breeze-setup-config-r4" x="36.6" y="337.2" textLength="73.2" clip-path="url(#breeze-setup-config-line-13)">-mssql</text><text class="breeze-setup-config-r4" x="109.8" y="337.2" textLength="97.6" clip-path="url(#breeze-s [...]
 </text><text class="breeze-setup-config-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-14)">│</text><text class="breeze-setup-config-r4" x="24.4" y="361.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-14)">-</text><text class="breeze-setup-config-r4" x="36.6" y="361.6" textLength="134.2" clip-path="url(#breeze-setup-config-line-14)">-cheatsheet</text><text class="breeze-setup-config-r2" x="170.8" y="361.6" textLength="12.2" clip-path="url(#br [...]
 </text><text class="breeze-setup-config-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-setup-config-line-15)">│</text><text class="breeze-setup-config-r4" x="24.4" y="386" textLength="12.2" clip-path="url(#breeze-setup-config-line-15)">-</text><text class="breeze-setup-config-r4" x="36.6" y="386" textLength="109.8" clip-path="url(#breeze-setup-config-line-15)">-asciiart</text><text class="breeze-setup-config-r2" x="146.4" y="386" textLength="12.2" clip-path="url(#breeze-setup [...]
diff --git a/images/breeze/output_shell.svg b/images/breeze/output_shell.svg
index a8dd2ecd2e..eae573b528 100644
--- a/images/breeze/output_shell.svg
+++ b/images/breeze/output_shell.svg
@@ -256,7 +256,7 @@
 </text><text class="breeze-shell-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-shell-line-7)">│</text><text class="breeze-shell-r5" x="353.8" y="190.8" textLength="732" clip-path="url(#breeze-shell-line-7)">[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 [...]
 </text><text class="breeze-shell-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-shell-line-8)">│</text><text class="breeze-shell-r4" x="24.4" y="215.2" textLength="12.2" clip-path="url(#breeze-shell-line-8)">-</text><text class="breeze-shell-r4" x="36.6" y="215.2" textLength="97.6" clip-path="url(#breeze-shell-line-8)">-backend</text><text class="breeze-shell-r6" x="305" y="215.2" textLength="24.4" clip-path="url(#breeze-shell-line-8)">-b</text><text class="breeze-shell-r2" [...]
 </text><text class="breeze-shell-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-shell-line-9)">│</text><text class="breeze-shell-r4" x="24.4" y="239.6" textLength="12.2" clip-path="url(#breeze-shell-line-9)">-</text><text class="breeze-shell-r4" x="36.6" y="239.6" textLength="109.8" clip-path="url(#breeze-shell-line-9)">-postgres</text><text class="breeze-shell-r4" x="146.4" y="239.6" textLength="97.6" clip-path="url(#breeze-shell-line-9)">-version</text><text class="breeze [...]
-</text><text class="breeze-shell-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-shell-line-10)">│</text><text class="breeze-shell-r4" x="24.4" y="264" textLength="12.2" clip-path="url(#breeze-shell-line-10)">-</text><text class="breeze-shell-r4" x="36.6" y="264" textLength="73.2" clip-path="url(#breeze-shell-line-10)">-mysql</text><text class="breeze-shell-r4" x="109.8" y="264" textLength="97.6" clip-path="url(#breeze-shell-line-10)">-version</text><text class="breeze-shell-r [...]
+</text><text class="breeze-shell-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-shell-line-10)">│</text><text class="breeze-shell-r4" x="24.4" y="264" textLength="12.2" clip-path="url(#breeze-shell-line-10)">-</text><text class="breeze-shell-r4" x="36.6" y="264" textLength="73.2" clip-path="url(#breeze-shell-line-10)">-mysql</text><text class="breeze-shell-r4" x="109.8" y="264" textLength="97.6" clip-path="url(#breeze-shell-line-10)">-version</text><text class="breeze-shell-r [...]
 </text><text class="breeze-shell-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-shell-line-11)">│</text><text class="breeze-shell-r4" x="24.4" y="288.4" textLength="12.2" clip-path="url(#breeze-shell-line-11)">-</text><text class="breeze-shell-r4" x="36.6" y="288.4" textLength="73.2" clip-path="url(#breeze-shell-line-11)">-mssql</text><text class="breeze-shell-r4" x="109.8" y="288.4" textLength="97.6" clip-path="url(#breeze-shell-line-11)">-version</text><text class="breeze [...]
 </text><text class="breeze-shell-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-shell-line-12)">│</text><text class="breeze-shell-r4" x="24.4" y="312.8" textLength="12.2" clip-path="url(#breeze-shell-line-12)">-</text><text class="breeze-shell-r4" x="36.6" y="312.8" textLength="146.4" clip-path="url(#breeze-shell-line-12)">-integration</text><text class="breeze-shell-r2" x="353.8" y="312.8" textLength="1085.8" clip-path="url(#breeze-shell-line-12)">Integration(s)&#160;to&#1 [...]
 </text><text class="breeze-shell-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-shell-line-13)">│</text><text class="breeze-shell-r7" x="353.8" y="337.2" textLength="1085.8" clip-path="url(#breeze-shell-line-13)">(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-shell-r5" x="1451.8" y="337.2" textLeng [...]
diff --git a/images/breeze/output_start-airflow.svg b/images/breeze/output_start-airflow.svg
index 0773980eef..e7b45c11c1 100644
--- a/images/breeze/output_start-airflow.svg
+++ b/images/breeze/output_start-airflow.svg
@@ -270,7 +270,7 @@
 </text><text class="breeze-start-airflow-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-12)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="312.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-12)">-</text><text class="breeze-start-airflow-r4" x="36.6" y="312.8" textLength="97.6" clip-path="url(#breeze-start-airflow-line-12)">-backend</text><text class="breeze-start-airflow-r6" x="366" y="312.8" textLength="24.4" clip-path="url(#b [...]
 </text><text class="breeze-start-airflow-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-13)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="337.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-13)">-</text><text class="breeze-start-airflow-r4" x="36.6" y="337.2" textLength="109.8" clip-path="url(#breeze-start-airflow-line-13)">-platform</text><text class="breeze-start-airflow-r2" x="414.8" y="337.2" textLength="329.4" clip-path="u [...]
 </text><text class="breeze-start-airflow-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-14)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="361.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-14)">-</text><text class="breeze-start-airflow-r4" x="36.6" y="361.6" textLength="109.8" clip-path="url(#breeze-start-airflow-line-14)">-postgres</text><text class="breeze-start-airflow-r4" x="146.4" y="361.6" textLength="97.6" clip-path="ur [...]
-</text><text class="breeze-start-airflow-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-start-airflow-line-15)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="386" textLength="12.2" clip-path="url(#breeze-start-airflow-line-15)">-</text><text class="breeze-start-airflow-r4" x="36.6" y="386" textLength="73.2" clip-path="url(#breeze-start-airflow-line-15)">-mysql</text><text class="breeze-start-airflow-r4" x="109.8" y="386" textLength="97.6" clip-path="url(#breeze-st [...]
+</text><text class="breeze-start-airflow-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-start-airflow-line-15)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="386" textLength="12.2" clip-path="url(#breeze-start-airflow-line-15)">-</text><text class="breeze-start-airflow-r4" x="36.6" y="386" textLength="73.2" clip-path="url(#breeze-start-airflow-line-15)">-mysql</text><text class="breeze-start-airflow-r4" x="109.8" y="386" textLength="97.6" clip-path="url(#breeze-st [...]
 </text><text class="breeze-start-airflow-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-16)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="410.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-16)">-</text><text class="breeze-start-airflow-r4" x="36.6" y="410.4" textLength="73.2" clip-path="url(#breeze-start-airflow-line-16)">-mssql</text><text class="breeze-start-airflow-r4" x="109.8" y="410.4" textLength="97.6" clip-path="url(#b [...]
 </text><text class="breeze-start-airflow-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-17)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="434.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-17)">-</text><text class="breeze-start-airflow-r4" x="36.6" y="434.8" textLength="146.4" clip-path="url(#breeze-start-airflow-line-17)">-integration</text><text class="breeze-start-airflow-r2" x="414.8" y="434.8" textLength="1024.8" clip-pat [...]
 </text><text class="breeze-start-airflow-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-18)">│</text><text class="breeze-start-airflow-r7" x="414.8" y="459.2" textLength="1024.8" clip-path="url(#breeze-start-airflow-line-18)">(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;|</text><text class="breeze-start-airflow-r5" x="1451.8" y="459.2 [...]
diff --git a/images/breeze/output_testing_integration-tests.svg b/images/breeze/output_testing_integration-tests.svg
index be4d37e6e6..970eca9210 100644
--- a/images/breeze/output_testing_integration-tests.svg
+++ b/images/breeze/output_testing_integration-tests.svg
@@ -176,7 +176,7 @@
 </text><text class="breeze-testing-integration-tests-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-14)">│</text><text class="breeze-testing-integration-tests-r4" x="24.4" y="361.6" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-14)">-</text><text class="breeze-testing-integration-tests-r4" x="36.6" y="361.6" textLength="85.4" clip-path="url(#breeze-testing-integration-tests-line-14)">-python</text><text class="breeze- [...]
 </text><text class="breeze-testing-integration-tests-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-15)">│</text><text class="breeze-testing-integration-tests-r5" x="329.4" y="386" textLength="732" clip-path="url(#breeze-testing-integration-tests-line-15)">[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 [...]
 </text><text class="breeze-testing-integration-tests-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-16)">│</text><text class="breeze-testing-integration-tests-r4" x="24.4" y="410.4" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-16)">-</text><text class="breeze-testing-integration-tests-r4" x="36.6" y="410.4" textLength="109.8" clip-path="url(#breeze-testing-integration-tests-line-16)">-postgres</text><text class="bree [...]
-</text><text class="breeze-testing-integration-tests-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-17)">│</text><text class="breeze-testing-integration-tests-r4" x="24.4" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-17)">-</text><text class="breeze-testing-integration-tests-r4" x="36.6" y="434.8" textLength="73.2" clip-path="url(#breeze-testing-integration-tests-line-17)">-mysql</text><text class="breeze-t [...]
+</text><text class="breeze-testing-integration-tests-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-17)">│</text><text class="breeze-testing-integration-tests-r4" x="24.4" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-17)">-</text><text class="breeze-testing-integration-tests-r4" x="36.6" y="434.8" textLength="73.2" clip-path="url(#breeze-testing-integration-tests-line-17)">-mysql</text><text class="breeze-t [...]
 </text><text class="breeze-testing-integration-tests-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-18)">│</text><text class="breeze-testing-integration-tests-r4" x="24.4" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-18)">-</text><text class="breeze-testing-integration-tests-r4" x="36.6" y="459.2" textLength="73.2" clip-path="url(#breeze-testing-integration-tests-line-18)">-mssql</text><text class="breeze-t [...]
 </text><text class="breeze-testing-integration-tests-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-19)">│</text><text class="breeze-testing-integration-tests-r4" x="24.4" y="483.6" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-19)">-</text><text class="breeze-testing-integration-tests-r4" x="36.6" y="483.6" textLength="85.4" clip-path="url(#breeze-testing-integration-tests-line-19)">-github</text><text class="breeze- [...]
 </text><text class="breeze-testing-integration-tests-r5" x="0" y="508" textLength="1464" clip-path="url(#breeze-testing-integration-tests-line-20)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-integration-tests-r2" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-20)">
diff --git a/images/breeze/output_testing_tests.svg b/images/breeze/output_testing_tests.svg
index ec3da499fa..c76674d090 100644
--- a/images/breeze/output_testing_tests.svg
+++ b/images/breeze/output_testing_tests.svg
@@ -251,7 +251,7 @@
 </text><text class="breeze-testing-tests-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-tests-line-17)">│</text><text class="breeze-testing-tests-r4" x="24.4" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-tests-line-17)">-</text><text class="breeze-testing-tests-r4" x="36.6" y="434.8" textLength="85.4" clip-path="url(#breeze-testing-tests-line-17)">-python</text><text class="breeze-testing-tests-r6" x="280.6" y="434.8" textLength="24.4" clip-path="url(# [...]
 </text><text class="breeze-testing-tests-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-tests-line-18)">│</text><text class="breeze-testing-tests-r5" x="329.4" y="459.2" textLength="732" clip-path="url(#breeze-testing-tests-line-18)">[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;& [...]
 </text><text class="breeze-testing-tests-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-testing-tests-line-19)">│</text><text class="breeze-testing-tests-r4" x="24.4" y="483.6" textLength="12.2" clip-path="url(#breeze-testing-tests-line-19)">-</text><text class="breeze-testing-tests-r4" x="36.6" y="483.6" textLength="109.8" clip-path="url(#breeze-testing-tests-line-19)">-postgres</text><text class="breeze-testing-tests-r4" x="146.4" y="483.6" textLength="97.6" clip-path="ur [...]
-</text><text class="breeze-testing-tests-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-testing-tests-line-20)">│</text><text class="breeze-testing-tests-r4" x="24.4" y="508" textLength="12.2" clip-path="url(#breeze-testing-tests-line-20)">-</text><text class="breeze-testing-tests-r4" x="36.6" y="508" textLength="73.2" clip-path="url(#breeze-testing-tests-line-20)">-mysql</text><text class="breeze-testing-tests-r4" x="109.8" y="508" textLength="97.6" clip-path="url(#breeze-te [...]
+</text><text class="breeze-testing-tests-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-testing-tests-line-20)">│</text><text class="breeze-testing-tests-r4" x="24.4" y="508" textLength="12.2" clip-path="url(#breeze-testing-tests-line-20)">-</text><text class="breeze-testing-tests-r4" x="36.6" y="508" textLength="73.2" clip-path="url(#breeze-testing-tests-line-20)">-mysql</text><text class="breeze-testing-tests-r4" x="109.8" y="508" textLength="97.6" clip-path="url(#breeze-te [...]
 </text><text class="breeze-testing-tests-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-tests-line-21)">│</text><text class="breeze-testing-tests-r4" x="24.4" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-tests-line-21)">-</text><text class="breeze-testing-tests-r4" x="36.6" y="532.4" textLength="73.2" clip-path="url(#breeze-testing-tests-line-21)">-mssql</text><text class="breeze-testing-tests-r4" x="109.8" y="532.4" textLength="97.6" clip-path="url(#b [...]
 </text><text class="breeze-testing-tests-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-tests-line-22)">│</text><text class="breeze-testing-tests-r4" x="24.4" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-tests-line-22)">-</text><text class="breeze-testing-tests-r4" x="36.6" y="556.8" textLength="146.4" clip-path="url(#breeze-testing-tests-line-22)">-integration</text><text class="breeze-testing-tests-r2" x="329.4" y="556.8" textLength="1110.2" clip-pat [...]
 </text><text class="breeze-testing-tests-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-tests-line-23)">│</text><text class="breeze-testing-tests-r7" x="329.4" y="581.2" textLength="1110.2" clip-path="url(#breeze-testing-tests-line-23)">(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;statsd</text><text class="breeze-testing-tests-r5" x="1451 [...]