This is an automated email from the ASF dual-hosted git repository.
pierrejeambrun 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 3fa75e9674 Providers requirements for every python version (#35086)
3fa75e9674 is described below
commit 3fa75e9674574f8b0de8b98f293b21a6ea792eb0
Author: Pierre Jeambrun <[email protected]>
AuthorDate: Tue Oct 24 16:12:01 2023 +0800
Providers requirements for every python version (#35086)
* Restructure output directory to handle multiple python versions
* Generate for all historical versions
* Add output to parallel mode
* Split all airflow images building to a separate command
* Allow generating per provider requirements
* Update parameters help description
---
BREEZE.rst | 12 ++
.../src/airflow_breeze/commands/sbom_commands.py | 200 ++++++++++++++++-----
.../commands/sbom_commands_config.py | 21 ++-
dev/breeze/src/airflow_breeze/global_constants.py | 38 ++++
dev/breeze/src/airflow_breeze/utils/cdxgen.py | 96 ++++++----
images/breeze/output-commands-hash.txt | 11 +-
images/breeze/output_sbom.svg | 16 +-
.../output_sbom_build-all-airflow-images.svg | 156 ++++++++++++++++
...output_sbom_generate-providers-requirements.svg | 80 +++++----
.../output_setup_check-all-params-in-groups.svg | 10 +-
.../output_setup_regenerate-command-images.svg | 2 +-
11 files changed, 512 insertions(+), 130 deletions(-)
diff --git a/BREEZE.rst b/BREEZE.rst
index 4c3a84ddf4..1ca5386875 100644
--- a/BREEZE.rst
+++ b/BREEZE.rst
@@ -2284,6 +2284,18 @@ These are all of the available flags for the
``update-sbom-information`` command
:width: 100%
:alt: Breeze update sbom information
+Build all airflow images
+.............................
+
+In order to generate providers requirements, we need docker images with all
airflow versions pre-installed,
+such images are built with the ``build-all-airflow-images`` command.
+This command will build one docker image per python version, with all the
airflow versions >=2.0.0 compatible.
+
+.. image:: ./images/breeze/output_sbom_build-all-airflow-images.svg.svg
+ :target:
https://raw.githubusercontent.com/apache/airflow/main/images/breeze/output_sbom_build-all-airflow-images.svg
+ :width: 100%
+ :alt: Breeze build all airflow images
+
Generating Provider requirements
.................................
diff --git a/dev/breeze/src/airflow_breeze/commands/sbom_commands.py
b/dev/breeze/src/airflow_breeze/commands/sbom_commands.py
index c7425de8d0..8fc30faf72 100644
--- a/dev/breeze/src/airflow_breeze/commands/sbom_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/sbom_commands.py
@@ -18,13 +18,14 @@
from __future__ import annotations
import json
+import sys
from pathlib import Path
import click
from airflow_breeze.global_constants import (
+ AIRFLOW_PYTHON_COMPATIBILITY_MATRIX,
ALL_HISTORICAL_PYTHON_VERSIONS,
- DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
PROVIDER_DEPENDENCIES,
)
from airflow_breeze.utils.cdxgen import (
@@ -50,8 +51,12 @@ from airflow_breeze.utils.confirm import Answer, user_confirm
from airflow_breeze.utils.console import get_console
from airflow_breeze.utils.custom_param_types import BetterChoice
from airflow_breeze.utils.docker_command_utils import
perform_environment_checks
-from airflow_breeze.utils.github import get_active_airflow_versions
-from airflow_breeze.utils.parallel import ShowLastLineProgressMatcher,
check_async_run_results, run_with_pool
+from airflow_breeze.utils.parallel import (
+ DockerBuildxProgressMatcher,
+ ShowLastLineProgressMatcher,
+ check_async_run_results,
+ run_with_pool,
+)
from airflow_breeze.utils.path_utils import AIRFLOW_TMP_DIR_PATH,
PROVIDER_METADATA_JSON_FILE_PATH
from airflow_breeze.utils.shared_options import get_dry_run
@@ -236,23 +241,84 @@ def update_sbom_information(
)
[email protected](name="build-all-airflow-images", help="Generate images with
airflow versions pre-installed")
+@option_historical_python_version
+@option_verbose
+@option_dry_run
+@option_answer
+@option_run_in_parallel
+@option_parallelism
+@option_debug_resources
+@option_include_success_outputs
+@option_skip_cleanup
+def build_all_airflow_images(
+ python: str,
+ run_in_parallel: bool,
+ parallelism: int,
+ debug_resources: bool,
+ include_success_outputs: bool,
+ skip_cleanup: bool,
+):
+ if python is None:
+ python_versions = ALL_HISTORICAL_PYTHON_VERSIONS
+ else:
+ python_versions = [python]
+
+ if run_in_parallel:
+ parallelism = min(parallelism, len(python_versions))
+ get_console().print(f"[info]Running {len(python_versions)} jobs in
parallel")
+ with ci_group(f"Building all airflow base images for python:
{python_versions}"):
+ all_params = [
+ f"Building all airflow base image for python: {python_version}"
+ for python_version in python_versions
+ ]
+ with run_with_pool(
+ parallelism=parallelism,
+ all_params=all_params,
+ debug_resources=debug_resources,
+ progress_matcher=DockerBuildxProgressMatcher(),
+ ) as (pool, outputs):
+ results = [
+ pool.apply_async(
+ build_all_airflow_versions_base_image,
+ kwds={
+ "python_version": python_version,
+ "confirm": False,
+ "output": outputs[index],
+ },
+ )
+ for (index, python_version) in enumerate(python_versions)
+ ]
+ check_async_run_results(
+ results=results,
+ success="All airflow base images were built successfully",
+ outputs=outputs,
+ include_success_outputs=include_success_outputs,
+ skip_cleanup=skip_cleanup,
+ )
+ else:
+ for python_version in python_versions:
+ build_all_airflow_versions_base_image(
+ python_version=python_version,
+ confirm=False,
+ output=None,
+ )
+
+
@sbom.command(name="generate-providers-requirements", help="Generate
requirements for selected provider.")
+@option_historical_python_version
@click.option(
- "--airflow-version", type=str, required=False, help="Airflow version to
use to generate the requirements"
-)
[email protected](
- "--python",
- type=BetterChoice(ALL_HISTORICAL_PYTHON_VERSIONS),
- default=DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
+ "--provider-id",
+ type=BetterChoice(list(PROVIDER_DEPENDENCIES.keys())),
required=False,
- help="Python version to generate the requirements for",
+ help="Provider id to generate the requirements for",
)
@click.option(
- "--provider-id",
- type=BetterChoice(list(PROVIDER_DEPENDENCIES.keys())),
+ "--provider-version",
+ type=str,
required=False,
- help="Provider to generate the requirements for",
- multiple=True,
+ help="Provider version to generate the requirements for i.e `2.1.0`.
`latest` is also a supported value "
+ "to account for the most recent version of the provider",
)
@option_verbose
@option_dry_run
@@ -268,9 +334,9 @@ def update_sbom_information(
help="Force update providers requirements even if they already exist.",
)
def generate_providers_requirements(
- airflow_version: str | None,
python: str,
- provider_id: tuple[str, ...],
+ provider_id: str | None,
+ provider_version: str | None,
run_in_parallel: bool,
parallelism: int,
debug_resources: bool,
@@ -280,36 +346,75 @@ def generate_providers_requirements(
):
perform_environment_checks()
- provider_ids = provider_id
- if len(provider_ids) == 0:
+ if python is None:
+ python_versions = ALL_HISTORICAL_PYTHON_VERSIONS
+ else:
+ python_versions = [python]
+
+ with open(PROVIDER_METADATA_JSON_FILE_PATH) as f:
+ provider_metadata = json.load(f)
+
+ if provider_id is None:
+ if provider_version is not None and provider_version != "latest":
+ get_console().print(
+ "[error] You cannot pin the version of the providers if you
generate the requirements for "
+ "all historical or latest versions. --provider-version needs
to be unset when you pass None "
+ "or latest to --provider-id"
+ )
+ sys.exit(1)
+ provider_ids = provider_metadata.keys()
+ else:
+ provider_ids = [provider_id]
+
+ if provider_version is None:
user_confirm(
- "You are about to generate all providers requirements based on the
"
- "`provider_metadata.json` file (for all releases). Do you want to
proceed?",
+ f"You are about to generate providers requirements for all
historical versions for "
+ f"{len(provider_ids)} provider(s) based on
`provider_metadata.json` file. "
+ f"Do you want to proceed?",
quit_allowed=False,
default_answer=Answer.YES,
)
- with open(PROVIDER_METADATA_JSON_FILE_PATH) as f:
- provider_metadata = json.load(f)
- providers_info = [
- (p_id, p_version, info["associated_airflow_version"])
- for (p_id, p_versions) in provider_metadata.items()
- for (p_version, info) in p_versions.items()
- ]
- else:
- if airflow_version is None:
- airflow_version = get_active_airflow_versions(confirm=False)[-1]
- get_console().print(f"[info]Using {airflow_version} as airflow
version")
- providers_info = [(provider_id, None, airflow_version) for provider_id
in provider_ids]
- build_all_airflow_versions_base_image(python_version=python)
+ providers_info = []
+ for provider_id in provider_ids:
+ if provider_version is not None:
+ if provider_version == "latest":
+ # Only the latest version for each provider
+ p_version, info =
list(provider_metadata[provider_id].items())[-1]
+ else:
+ # Specified providers version
+ info = provider_metadata[provider_id][provider_version]
+ p_version = provider_version
+
+ airflow_version = info["associated_airflow_version"]
+
+ providers_info += [
+ (provider_id, p_version, python_version, airflow_version)
+ for python_version in
AIRFLOW_PYTHON_COMPATIBILITY_MATRIX[airflow_version]
+ if python_version in python_versions
+ ]
+ else:
+ # All historical providers' versions
+ providers_info += [
+ (
+ provider_id,
+ p_version,
+ python_version,
+ info["associated_airflow_version"],
+ )
+ for (p_version, info) in provider_metadata[provider_id].items()
+ for python_version in
AIRFLOW_PYTHON_COMPATIBILITY_MATRIX[info["associated_airflow_version"]]
+ if python_version in python_versions
+ ]
if run_in_parallel:
parallelism = min(parallelism, len(providers_info))
get_console().print(f"[info]Running {len(providers_info)} jobs in
parallel")
with ci_group(f"Generating provider requirements for
{providers_info}"):
all_params = [
- f"Generate provider requirements for {p_id} version
{p_version}"
- for (p_id, p_version, _) in providers_info
+ f"Generate provider requirements for {provider_id} version
{provider_version} python "
+ f"{python_version}"
+ for (provider_id, provider_version, python_version, _) in
providers_info
]
with run_with_pool(
parallelism=parallelism,
@@ -321,14 +426,18 @@ def generate_providers_requirements(
pool.apply_async(
get_requirements_for_provider,
kwds={
- "provider_id": p_id,
- "provider_version": p_version,
- "airflow_version": a_version,
- "python_version": python,
+ "provider_id": provider_id,
+ "airflow_version": airflow_version,
+ "provider_version": provider_version,
+ "python_version": python_version,
"force": force,
+ "output": outputs[index],
},
)
- for (p_id, p_version, a_version) in providers_info
+ for (
+ index,
+ (provider_id, provider_version, python_version,
airflow_version),
+ ) in enumerate(providers_info)
]
check_async_run_results(
results=results,
@@ -338,11 +447,12 @@ def generate_providers_requirements(
skip_cleanup=skip_cleanup,
)
else:
- for p_id, p_version, a_version in providers_info:
+ for provider_id, provider_version, python_version, airflow_version in
providers_info:
get_requirements_for_provider(
- provider_id=p_id,
- provider_version=p_version,
- airflow_version=a_version,
- python_version=python,
+ provider_id=provider_id,
+ provider_version=provider_version,
+ airflow_version=airflow_version,
+ python_version=python_version,
force=force,
+ output=None,
)
diff --git a/dev/breeze/src/airflow_breeze/commands/sbom_commands_config.py
b/dev/breeze/src/airflow_breeze/commands/sbom_commands_config.py
index 763b133cf3..ce17e4a258 100644
--- a/dev/breeze/src/airflow_breeze/commands/sbom_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/sbom_commands_config.py
@@ -20,6 +20,7 @@ SBOM_COMMANDS: dict[str, str | list[str]] = {
"name": "SBOM commands",
"commands": [
"update-sbom-information",
+ "build-all-airflow-images",
"generate-providers-requirements",
],
}
@@ -47,13 +48,31 @@ SBOM_PARAMETERS: dict[str, list[dict[str, str |
list[str]]]] = {
],
},
],
+ "breeze sbom build-all-airflow-images": [
+ {
+ "name": "Generate all airflow images flags",
+ "options": [
+ "--python",
+ ],
+ },
+ {
+ "name": "Parallel running",
+ "options": [
+ "--run-in-parallel",
+ "--parallelism",
+ "--skip-cleanup",
+ "--debug-resources",
+ "--include-success-outputs",
+ ],
+ },
+ ],
"breeze sbom generate-providers-requirements": [
{
"name": "Generate provider requirements flags",
"options": [
- "--airflow-version",
"--python",
"--provider-id",
+ "--provider-version",
"--force",
],
},
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py
b/dev/breeze/src/airflow_breeze/global_constants.py
index 094376b04b..dc7250f5b3 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -225,6 +225,44 @@ DEFAULT_MYSQL_VERSION = CURRENT_MYSQL_VERSIONS[0]
CURRENT_MSSQL_VERSIONS = ["2017-latest", "2019-latest"]
DEFAULT_MSSQL_VERSION = CURRENT_MSSQL_VERSIONS[0]
+
+AIRFLOW_PYTHON_COMPATIBILITY_MATRIX = {
+ "2.0.0": ["3.6", "3.7", "3.8"],
+ "2.0.1": ["3.6", "3.7", "3.8"],
+ "2.0.2": ["3.6", "3.7", "3.8"],
+ "2.1.0": ["3.6", "3.7", "3.8"],
+ "2.1.1": ["3.6", "3.7", "3.8"],
+ "2.1.2": ["3.6", "3.7", "3.8", "3.9"],
+ "2.1.3": ["3.6", "3.7", "3.8", "3.9"],
+ "2.1.4": ["3.6", "3.7", "3.8", "3.9"],
+ "2.2.0": ["3.6", "3.7", "3.8", "3.9"],
+ "2.2.1": ["3.6", "3.7", "3.8", "3.9"],
+ "2.2.2": ["3.6", "3.7", "3.8", "3.9"],
+ "2.2.3": ["3.6", "3.7", "3.8", "3.9"],
+ "2.2.4": ["3.6", "3.7", "3.8", "3.9"],
+ "2.2.5": ["3.6", "3.7", "3.8", "3.9"],
+ "2.3.0": ["3.7", "3.8", "3.9", "3.10"],
+ "2.3.1": ["3.7", "3.8", "3.9", "3.10"],
+ "2.3.2": ["3.7", "3.8", "3.9", "3.10"],
+ "2.3.3": ["3.7", "3.8", "3.9", "3.10"],
+ "2.3.4": ["3.7", "3.8", "3.9", "3.10"],
+ "2.4.0": ["3.7", "3.8", "3.9", "3.10"],
+ "2.4.1": ["3.7", "3.8", "3.9", "3.10"],
+ "2.4.2": ["3.7", "3.8", "3.9", "3.10"],
+ "2.4.3": ["3.7", "3.8", "3.9", "3.10"],
+ "2.5.0": ["3.7", "3.8", "3.9", "3.10"],
+ "2.5.1": ["3.7", "3.8", "3.9", "3.10"],
+ "2.5.2": ["3.7", "3.8", "3.9", "3.10"],
+ "2.5.3": ["3.7", "3.8", "3.9", "3.10"],
+ "2.6.0": ["3.7", "3.8", "3.9", "3.10"],
+ "2.6.1": ["3.7", "3.8", "3.9", "3.10"],
+ "2.6.2": ["3.7", "3.8", "3.9", "3.10", "3.11"],
+ "2.6.3": ["3.7", "3.8", "3.9", "3.10", "3.11"],
+ "2.7.0": ["3.8", "3.9", "3.10", "3.11"],
+ "2.7.1": ["3.8", "3.9", "3.10", "3.11"],
+ "2.7.2": ["3.8", "3.9", "3.10", "3.11"],
+}
+
DB_RESET = False
START_AIRFLOW = "false"
LOAD_EXAMPLES = False
diff --git a/dev/breeze/src/airflow_breeze/utils/cdxgen.py
b/dev/breeze/src/airflow_breeze/utils/cdxgen.py
index d329069872..977c20c0ac 100644
--- a/dev/breeze/src/airflow_breeze/utils/cdxgen.py
+++ b/dev/breeze/src/airflow_breeze/utils/cdxgen.py
@@ -29,12 +29,14 @@ from pathlib import Path
import yaml
-from airflow_breeze.global_constants import DEFAULT_PYTHON_MAJOR_MINOR_VERSION
+from airflow_breeze.global_constants import (
+ AIRFLOW_PYTHON_COMPATIBILITY_MATRIX,
+ DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
+)
from airflow_breeze.utils.console import Output, get_console
from airflow_breeze.utils.github import (
download_constraints_file,
download_file_from_github,
- get_active_airflow_versions,
)
from airflow_breeze.utils.path_utils import AIRFLOW_SOURCES_ROOT, FILES_DIR
from airflow_breeze.utils.run_utils import run_command
@@ -134,6 +136,7 @@ DOCKER_FILE_PREFIX = f"/files/{TARGET_DIR_NAME}/"
def get_requirements_for_provider(
provider_id: str,
airflow_version: str,
+ output: Output | None,
provider_version: str | None = None,
python_version: str = DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
force: bool = False,
@@ -144,34 +147,46 @@ def get_requirements_for_provider(
*provider_path_array
) / "provider.yaml"
provider_version =
yaml.safe_load(provider_file.read_text())["versions"][0]
- airflow_file_name = f"airflow-{airflow_version}-requirements.txt"
- provider_with_airflow_file_name = (
-
f"provider-{provider_id}-{provider_version}-with-airflow-requirements.txt"
- )
- provider_file_name =
f"provider-{provider_id}-{provider_version}-without-airflow-requirements.txt"
+
target_dir = FILES_DIR / TARGET_DIR_NAME
- airflow_file = target_dir / airflow_file_name
- provider_with_airflow_file = target_dir / provider_with_airflow_file_name
+ airflow_core_file_name =
f"airflow-{airflow_version}-python{python_version}-requirements.txt"
+ airflow_core_path = target_dir / airflow_core_file_name
+
+ provider_with_core_file_name =
f"python{python_version}-with-core-requirements.txt"
+ provider_without_core_file_name =
f"python{python_version}-without-core-requirements.txt"
- if os.path.exists(airflow_file) and
os.path.exists(provider_with_airflow_file) and force is False:
- get_console().print(
- f"[warning] Requirements for provider {provider_id} version
{provider_version} already exist, "
- f"skipping. Set force=True to force generation."
+ provider_folder_name = f"provider-{provider_id}-{provider_version}"
+ provider_folder_path = target_dir / provider_folder_name
+ provider_with_core_path = provider_folder_path /
provider_with_core_file_name
+ provider_without_core_file = provider_folder_path /
provider_without_core_file_name
+
+ docker_file_provider_folder_prefix =
f"{DOCKER_FILE_PREFIX}/{provider_folder_name}/"
+
+ if (
+ os.path.exists(provider_with_core_path)
+ and os.path.exists(provider_without_core_file)
+ and force is False
+ ):
+ get_console(output=output).print(
+ f"[warning] Requirements for provider {provider_id} version
{provider_version} python "
+ f"{python_version} already exist, skipping. Set force=True to
force generation."
)
return (
0,
f"Provider requirements already existed, skipped generation for
{provider_id} version "
- f"{provider_version}",
+ f"{provider_version} python {python_version}",
)
+ else:
+ provider_folder_path.mkdir(exist_ok=True)
command = f"""
mkdir -pv {DOCKER_FILE_PREFIX}
-/opt/airflow/airflow-{airflow_version}/bin/pip freeze | sort >
{DOCKER_FILE_PREFIX}{airflow_file_name}
+/opt/airflow/airflow-{airflow_version}/bin/pip freeze | sort >
{DOCKER_FILE_PREFIX}{airflow_core_file_name}
/opt/airflow/airflow-{airflow_version}/bin/pip install
apache-airflow=={airflow_version} \
apache-airflow-providers-{provider_id}=={provider_version}
/opt/airflow/airflow-{airflow_version}/bin/pip freeze | sort > \
- {DOCKER_FILE_PREFIX}{provider_with_airflow_file_name}
-chown --recursive {os.getuid()}:{os.getgid()} {DOCKER_FILE_PREFIX}
+ {docker_file_provider_folder_prefix}{provider_with_core_file_name}
+chown --recursive {os.getuid()}:{os.getgid()}
{DOCKER_FILE_PREFIX}{provider_with_core_file_name}
"""
provider_command_result = run_command(
[
@@ -187,28 +202,29 @@ chown --recursive {os.getuid()}:{os.getgid()}
{DOCKER_FILE_PREFIX}
get_all_airflow_versions_image_name(python_version=python_version),
"-c",
";".join(command.splitlines()[1:-1]),
- ]
+ ],
+ output=output,
)
- get_console().print(f"[info]Airflow requirements in {airflow_file}")
- get_console().print(f"[info]Provider requirements in
{provider_with_airflow_file}")
- base_packages = {package.split("==")[0] for package in
airflow_file.read_text().splitlines()}
+ get_console(output=output).print(f"[info]Airflow requirements in
{airflow_core_path}")
+ get_console(output=output).print(f"[info]Provider requirements in
{provider_with_core_path}")
+ base_packages = {package.split("==")[0] for package in
airflow_core_path.read_text().splitlines()}
base_packages.add("apache-airflow-providers-" + provider_id.replace(".",
"-"))
provider_packages = sorted(
[
line
- for line in provider_with_airflow_file.read_text().splitlines()
+ for line in provider_with_core_path.read_text().splitlines()
if line.split("==")[0] not in base_packages
]
)
- get_console().print(
+ get_console(output=output).print(
f"[info]Provider {provider_id} has {len(provider_packages)}
transitively "
f"dependent packages (excluding airflow and its dependencies)"
)
- get_console().print(provider_packages)
- provider_file = target_dir / provider_file_name
- provider_file.write_text("".join(f"{p}\n" for p in provider_packages))
- get_console().print(
- f"[success]Generated {provider_id}:{provider_version} requirements in
{provider_file}"
+ get_console(output=output).print(provider_packages)
+ provider_without_core_file.write_text("".join(f"{p}\n" for p in
provider_packages))
+ get_console(output=output).print(
+ f"[success]Generated {provider_id}:{provider_version}:{python_version}
requirements in "
+ f"{provider_without_core_file}"
)
return (
@@ -217,7 +233,11 @@ chown --recursive {os.getuid()}:{os.getgid()}
{DOCKER_FILE_PREFIX}
)
-def build_all_airflow_versions_base_image(python_version: str):
+def build_all_airflow_versions_base_image(
+ python_version: str,
+ output: Output | None,
+ confirm: bool = True,
+) -> tuple[int, str]:
"""
Build an image with all airflow versions pre-installed in separate
virtualenvs.
"""
@@ -225,20 +245,30 @@ def build_all_airflow_versions_base_image(python_version:
str):
image_name =
get_all_airflow_versions_image_name(python_version=python_version)
dockerfile = f"""
FROM ghcr.io/apache/airflow/main/ci/python{python_version}
-RUN pip install --upgrade pip
+RUN pip install --upgrade pip --no-cache-dir
# Prevent setting sources in PYTHONPATH to not interfere with virtualenvs
ENV USE_AIRFLOW_VERSION=none
+ENV START_AIRFLOW=none
"""
- for airflow_version in get_active_airflow_versions():
+ compatible_airflow_versions = [
+ airflow_version
+ for airflow_version, python_versions in
AIRFLOW_PYTHON_COMPATIBILITY_MATRIX.items()
+ if python_version in python_versions
+ ]
+
+ for airflow_version in compatible_airflow_versions:
dockerfile += f"""
# Create the virtualenv and install the proper airflow version in it
RUN python -m venv /opt/airflow/airflow-{airflow_version} && \
-/opt/airflow/airflow-{airflow_version}/bin/pip install --upgrade pip && \
+/opt/airflow/airflow-{airflow_version}/bin/pip install --no-cache-dir
--upgrade pip && \
/opt/airflow/airflow-{airflow_version}/bin/pip install
apache-airflow=={airflow_version} \
--constraint https://raw.githubusercontent.com/apache/airflow/\
constraints-{airflow_version}/constraints-{python_version}.txt
"""
- run_command(["docker", "build", "--tag", image_name, "-"],
input=dockerfile, text=True, check=True)
+ build_command = run_command(
+ ["docker", "build", "--tag", image_name, "-"], input=dockerfile,
text=True, check=True, output=output
+ )
+ return build_command.returncode, f"All airflow image built for python
{python_version}"
@dataclass
diff --git a/images/breeze/output-commands-hash.txt
b/images/breeze/output-commands-hash.txt
index 0dfeabe0e7..ff54cbc64d 100644
--- a/images/breeze/output-commands-hash.txt
+++ b/images/breeze/output-commands-hash.txt
@@ -52,16 +52,17 @@
release-management:start-release:419f48f6a4ff4457cb9de7ff496aebbe
release-management:update-constraints:02ec4b119150e3fdbac52026e94820ef
release-management:verify-provider-packages:96dce5644aad6b37080acf77b3d8de3a
release-management:a78938d2775ea0253af625ce67dabcbb
-sbom:generate-providers-requirements:51e0c660a5f7846ada099e871ebd4c67
+sbom:build-all-airflow-images:32f8acade299c2b112e986bae99846db
+sbom:generate-providers-requirements:8fe04d5797c8f71f96f569f687827950
sbom:update-sbom-information:653be48be70b4b7ff5172d491aadc694
-sbom:b98ded4bbb76f0cb205cea32f3102aee
+sbom:28d8581cba82cabc545dbb006d993072
setup:autocomplete:fffcd49e102e09ccd69b3841a9e3ea8e
-setup:check-all-params-in-groups:7aa55fa1b0f17a6f7b7ca225c6b82574
+setup:check-all-params-in-groups:f9ca6bef11ed65e40f06d7cf261a4859
setup:config:aaff9748d0970f7cb02e592ac4046d5d
-setup:regenerate-command-images:a228071206e00b6004ede2e69b8f4a6c
+setup:regenerate-command-images:ea2fba3440bd4e84311a53abe6e8dc56
setup:self-upgrade:4af905a147fcd6670a0e33d3d369a94b
setup:version:be116d90a21c2afe01087f7609774e1e
-setup:c569719a4fc7be726556a266e447c871
+setup:244883e40b4d2ff7c4c7cf4b10efb680
shell:6840d0c0e939dcd03d127d5a040bf2f5
start-airflow:7981958d896eebbab19ec32147657eb6
static-checks:19926b8fcea5784b28d4a0d99865363c
diff --git a/images/breeze/output_sbom.svg b/images/breeze/output_sbom.svg
index 36f6faccd0..9ee73ec331 100644
--- a/images/breeze/output_sbom.svg
+++ b/images/breeze/output_sbom.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 342.79999999999995"
xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 367.2"
xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@@ -42,7 +42,7 @@
<defs>
<clipPath id="breeze-sbom-clip-terminal">
- <rect x="0" y="0" width="1463.0" height="291.79999999999995" />
+ <rect x="0" y="0" width="1463.0" height="316.2" />
</clipPath>
<clipPath id="breeze-sbom-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -77,9 +77,12 @@
<clipPath id="breeze-sbom-line-10">
<rect x="0" y="245.5" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="breeze-sbom-line-11">
+ <rect x="0" y="269.9" 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="340.8" rx="8"/><text class="breeze-sbom-title"
fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: sbom</text>
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1"
x="1" y="1" width="1480" height="365.2" rx="8"/><text class="breeze-sbom-title"
fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: sbom</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -98,9 +101,10 @@
</text><text class="breeze-sbom-r5" x="0" y="166.4" textLength="12.2"
clip-path="url(#breeze-sbom-line-6)">│</text><text class="breeze-sbom-r4"
x="24.4" y="166.4" textLength="12.2"
clip-path="url(#breeze-sbom-line-6)">-</text><text class="breeze-sbom-r4"
x="36.6" y="166.4" textLength="61"
clip-path="url(#breeze-sbom-line-6)">-help</text><text class="breeze-sbom-r6"
x="122" y="166.4" textLength="24.4"
clip-path="url(#breeze-sbom-line-6)">-h</text><text class="breeze-sbom-r1"
x="170.8" y=" [...]
</text><text class="breeze-sbom-r5" x="0" y="190.8" textLength="1464"
clip-path="url(#breeze-sbom-line-7)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-sbom-r1" x="1464" y="190.8" textLength="12.2"
clip-path="url(#breeze-sbom-line-7)">
</text><text class="breeze-sbom-r5" x="0" y="215.2" textLength="24.4"
clip-path="url(#breeze-sbom-line-8)">╭─</text><text class="breeze-sbom-r5"
x="24.4" y="215.2" textLength="183"
clip-path="url(#breeze-sbom-line-8)"> SBOM commands </text><text
class="breeze-sbom-r5" x="207.4" y="215.2" textLength="1232.2"
clip-path="url(#breeze-sbom-line-8)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
class="breeze-sbo [...]
-</text><text class="breeze-sbom-r5" x="0" y="239.6" textLength="12.2"
clip-path="url(#breeze-sbom-line-9)">│</text><text class="breeze-sbom-r4"
x="24.4" y="239.6" textLength="549"
clip-path="url(#breeze-sbom-line-9)">update-sbom-information                      </text><text
class="breeze-sbom-r1" x="597.8" y="239.6" textLength="841.8"
clip-path="url(#breeze-sbom-line-9)">Update&# [...]
-</text><text class="breeze-sbom-r5" x="0" y="264" textLength="12.2"
clip-path="url(#breeze-sbom-line-10)">│</text><text class="breeze-sbom-r4"
x="24.4" y="264" textLength="549"
clip-path="url(#breeze-sbom-line-10)">generate-providers-requirements              </text><text
class="breeze-sbom-r1" x="597.8" y="264" textLength="841.8"
clip-path="url(#breeze-sbom-line-10)">Generate requirements for selected&#
[...]
-</text><text class="breeze-sbom-r5" x="0" y="288.4" textLength="1464"
clip-path="url(#breeze-sbom-line-11)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-sbom-r1" x="1464" y="288.4" textLength="12.2"
clip-path="url(#breeze-sbom-line-11)">
+</text><text class="breeze-sbom-r5" x="0" y="239.6" textLength="12.2"
clip-path="url(#breeze-sbom-line-9)">│</text><text class="breeze-sbom-r4"
x="24.4" y="239.6" textLength="536.8"
clip-path="url(#breeze-sbom-line-9)">update-sbom-information                     </text><text
class="breeze-sbom-r1" x="585.6" y="239.6" textLength="854"
clip-path="url(#breeze-sbom-line-9)">Update SB [...]
+</text><text class="breeze-sbom-r5" x="0" y="264" textLength="12.2"
clip-path="url(#breeze-sbom-line-10)">│</text><text class="breeze-sbom-r4"
x="24.4" y="264" textLength="536.8"
clip-path="url(#breeze-sbom-line-10)">build-all-airflow-images                    </text><text
class="breeze-sbom-r1" x="585.6" y="264" textLength="854"
clip-path="url(#breeze-sbom-line-10)">Generate images&# [...]
+</text><text class="breeze-sbom-r5" x="0" y="288.4" textLength="12.2"
clip-path="url(#breeze-sbom-line-11)">│</text><text class="breeze-sbom-r4"
x="24.4" y="288.4" textLength="536.8"
clip-path="url(#breeze-sbom-line-11)">generate-providers-requirements             </text><text
class="breeze-sbom-r1" x="585.6" y="288.4" textLength="854"
clip-path="url(#breeze-sbom-line-11)">Generate requirements for selected&#
[...]
+</text><text class="breeze-sbom-r5" x="0" y="312.8" textLength="1464"
clip-path="url(#breeze-sbom-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-sbom-r1" x="1464" y="312.8" textLength="12.2"
clip-path="url(#breeze-sbom-line-12)">
</text>
</g>
</g>
diff --git a/images/breeze/output_sbom_build-all-airflow-images.svg
b/images/breeze/output_sbom_build-all-airflow-images.svg
new file mode 100644
index 0000000000..76e5648299
--- /dev/null
+++ b/images/breeze/output_sbom_build-all-airflow-images.svg
@@ -0,0 +1,156 @@
+<svg class="rich-terminal" viewBox="0 0 1482 635.5999999999999"
xmlns="http://www.w3.org/2000/svg">
+ <!-- Generated with Rich https://www.textualize.io -->
+ <style>
+
+ @font-face {
+ font-family: "Fira Code";
+ src: local("FiraCode-Regular"),
+
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
+
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff");
+ font-style: normal;
+ font-weight: 400;
+ }
+ @font-face {
+ font-family: "Fira Code";
+ src: local("FiraCode-Bold"),
+
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2")
format("woff2"),
+
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff")
format("woff");
+ font-style: bold;
+ font-weight: 700;
+ }
+
+ .breeze-sbom-build-all-airflow-images-matrix {
+ font-family: Fira Code, monospace;
+ font-size: 20px;
+ line-height: 24.4px;
+ font-variant-east-asian: full-width;
+ }
+
+ .breeze-sbom-build-all-airflow-images-title {
+ font-size: 18px;
+ font-weight: bold;
+ font-family: arial;
+ }
+
+ .breeze-sbom-build-all-airflow-images-r1 { fill: #c5c8c6 }
+.breeze-sbom-build-all-airflow-images-r2 { fill: #d0b344 }
+.breeze-sbom-build-all-airflow-images-r3 { fill: #c5c8c6;font-weight: bold }
+.breeze-sbom-build-all-airflow-images-r4 { fill: #68a0b3;font-weight: bold }
+.breeze-sbom-build-all-airflow-images-r5 { fill: #868887 }
+.breeze-sbom-build-all-airflow-images-r6 { fill: #8d7b39 }
+.breeze-sbom-build-all-airflow-images-r7 { fill: #98a84b;font-weight: bold }
+ </style>
+
+ <defs>
+ <clipPath id="breeze-sbom-build-all-airflow-images-clip-terminal">
+ <rect x="0" y="0" width="1463.0" height="584.5999999999999" />
+ </clipPath>
+ <clipPath id="breeze-sbom-build-all-airflow-images-line-0">
+ <rect x="0" y="1.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-1">
+ <rect x="0" y="25.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-2">
+ <rect x="0" y="50.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-3">
+ <rect x="0" y="74.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-4">
+ <rect x="0" y="99.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-5">
+ <rect x="0" y="123.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-6">
+ <rect x="0" y="147.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-7">
+ <rect x="0" y="172.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-8">
+ <rect x="0" y="196.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-9">
+ <rect x="0" y="221.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-10">
+ <rect x="0" y="245.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-11">
+ <rect x="0" y="269.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-12">
+ <rect x="0" y="294.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-13">
+ <rect x="0" y="318.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-14">
+ <rect x="0" y="343.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-15">
+ <rect x="0" y="367.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-16">
+ <rect x="0" y="391.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-17">
+ <rect x="0" y="416.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-18">
+ <rect x="0" y="440.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-19">
+ <rect x="0" y="465.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-20">
+ <rect x="0" y="489.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-line-21">
+ <rect x="0" y="513.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-build-all-airflow-images-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-sbom-build-all-airflow-images-title" fill="#c5c8c6"
text-anchor="middle" x="740"
y="27">Command: sbom build-all-airflow-images</text>
+ <g transform="translate(26,22)">
+ <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
+ <circle cx="22" cy="0" r="7" fill="#febc2e"/>
+ <circle cx="44" cy="0" r="7" fill="#28c840"/>
+ </g>
+
+ <g transform="translate(9, 41)"
clip-path="url(#breeze-sbom-build-all-airflow-images-clip-terminal)">
+
+ <g class="breeze-sbom-build-all-airflow-images-matrix">
+ <text class="breeze-sbom-build-all-airflow-images-r1" x="1464" y="20"
textLength="12.2" clip-path="url(#breeze-sbom-build-all-airflow-images-line-0)">
+</text><text class="breeze-sbom-build-all-airflow-images-r2" x="12.2" y="44.4"
textLength="73.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-1)">Usage:</text><text
class="breeze-sbom-build-all-airflow-images-r3" x="97.6" y="44.4"
textLength="439.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-1)">breeze sbom build-all-airflow-images</text><text
class="breeze-sbom-build-all-airflow-images-r1" x="549" y="44.4"
textLength="12.2" clip-path="url(#breeze-sb [...]
+</text><text class="breeze-sbom-build-all-airflow-images-r1" x="1464" y="68.8"
textLength="12.2" clip-path="url(#breeze-sbom-build-all-airflow-images-line-2)">
+</text><text class="breeze-sbom-build-all-airflow-images-r1" x="12.2" y="93.2"
textLength="622.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-3)">Generate images with airflow versions pre-installed</text><text
class="breeze-sbom-build-all-airflow-images-r1" x="1464" y="93.2"
textLength="12.2" clip-path="url(#breeze-sbom-build-all-airflow-images-line-3)">
+</text><text class="breeze-sbom-build-all-airflow-images-r1" x="1464"
y="117.6" textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-4)">
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="142"
textLength="24.4"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-5)">╭─</text><text
class="breeze-sbom-build-all-airflow-images-r5" x="24.4" y="142"
textLength="427"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-5)"> Generate all airflow images flags </text><text
class="breeze-sbom-build-all-airflow-images-r5" x="451.4" y="142"
textLength="988.2" clip-path="url( [...]
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="166.4"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-6)">│</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="24.4" y="166.4"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-6)">-</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="36.6" y="166.4"
textLength="85.4"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-6)">-python</text
[...]
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="190.8"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-7)">│</text><text
class="breeze-sbom-build-all-airflow-images-r6" x="170.8" y="190.8"
textLength="976"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-7)">(3.6 | 3.7 | 3.8 | 3.9 | 3.10 | 3.11)              
[...]
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="215.2"
textLength="1464"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-8)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-sbom-build-all-airflow-images-r1" x="1464" y="215.2"
textLength="12.2" clip-path="url(#breeze-sbom-build-all-airflow-images-line-8)">
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="239.6"
textLength="24.4"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-9)">╭─</text><text
class="breeze-sbom-build-all-airflow-images-r5" x="24.4" y="239.6"
textLength="219.6"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-9)"> Parallel running </text><text
class="breeze-sbom-build-all-airflow-images-r5" x="244" y="239.6"
textLength="1195.6" clip-path="url(#breeze-sbom-build-all-ai [...]
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="264"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-10)">│</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="24.4" y="264"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-10)">-</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="36.6" y="264"
textLength="48.8"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-10)">-run</text><text
[...]
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="288.4"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-11)">│</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="24.4" y="288.4"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-11)">-</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="36.6" y="288.4"
textLength="146.4"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-11)">-parallel [...]
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="312.8"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-12)">│</text><text
class="breeze-sbom-build-all-airflow-images-r6" x="378.2" y="312.8"
textLength="915"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-12)">(INTEGER RANGE)                         &#
[...]
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="337.2"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-13)">│</text><text
class="breeze-sbom-build-all-airflow-images-r5" x="378.2" y="337.2"
textLength="915"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-13)">[default: 4; 1<=x<=8]                      
[...]
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="361.6"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-14)">│</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="24.4" y="361.6"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-14)">-</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="36.6" y="361.6"
textLength="61"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-14)">-skip</text>
[...]
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="386"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-15)">│</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="24.4" y="386"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-15)">-</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="36.6" y="386"
textLength="73.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-15)">-debug</text><te
[...]
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="410.4"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-16)">│</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="24.4" y="410.4"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-16)">-</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="36.6" y="410.4"
textLength="97.6"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-16)">-include</ [...]
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="434.8"
textLength="1464"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-sbom-build-all-airflow-images-r1" x="1464" y="434.8"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-17)">
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="459.2"
textLength="24.4"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-18)">╭─</text><text
class="breeze-sbom-build-all-airflow-images-r5" x="24.4" y="459.2"
textLength="195.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-18)"> Common options </text><text
class="breeze-sbom-build-all-airflow-images-r5" x="219.6" y="459.2"
textLength="1220" clip-path="url(#breeze-sbom-build-all-ai [...]
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="483.6"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-19)">│</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="24.4" y="483.6"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-19)">-</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="36.6" y="483.6"
textLength="97.6"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-19)">-verbose</ [...]
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="508"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-20)">│</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="24.4" y="508"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-20)">-</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="36.6" y="508"
textLength="48.8"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-20)">-dry</text><text
[...]
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="532.4"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-21)">│</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="24.4" y="532.4"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-21)">-</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="36.6" y="532.4"
textLength="85.4"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-21)">-answer</t [...]
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="556.8"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-22)">│</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="24.4" y="556.8"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-22)">-</text><text
class="breeze-sbom-build-all-airflow-images-r4" x="36.6" y="556.8"
textLength="61"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-22)">-help</text>
[...]
+</text><text class="breeze-sbom-build-all-airflow-images-r5" x="0" y="581.2"
textLength="1464"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-23)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-sbom-build-all-airflow-images-r1" x="1464" y="581.2"
textLength="12.2"
clip-path="url(#breeze-sbom-build-all-airflow-images-line-23)">
+</text>
+ </g>
+ </g>
+</svg>
diff --git a/images/breeze/output_sbom_generate-providers-requirements.svg
b/images/breeze/output_sbom_generate-providers-requirements.svg
index 1d5d38d00e..5504460a0e 100644
--- a/images/breeze/output_sbom_generate-providers-requirements.svg
+++ b/images/breeze/output_sbom_generate-providers-requirements.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 952.8"
xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1026.0"
xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@@ -43,7 +43,7 @@
<defs>
<clipPath id="breeze-sbom-generate-providers-requirements-clip-terminal">
- <rect x="0" y="0" width="1463.0" height="901.8" />
+ <rect x="0" y="0" width="1463.0" height="975.0" />
</clipPath>
<clipPath id="breeze-sbom-generate-providers-requirements-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -153,9 +153,18 @@
<clipPath id="breeze-sbom-generate-providers-requirements-line-35">
<rect x="0" y="855.5" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="breeze-sbom-generate-providers-requirements-line-36">
+ <rect x="0" y="879.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-generate-providers-requirements-line-37">
+ <rect x="0" y="904.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-sbom-generate-providers-requirements-line-38">
+ <rect x="0" y="928.7" width="1464" height="24.65"/>
+ </clipPath>
</defs>
- <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1"
x="1" y="1" width="1480" height="950.8" rx="8"/><text
class="breeze-sbom-generate-providers-requirements-title" fill="#c5c8c6"
text-anchor="middle" x="740"
y="27">Command: sbom generate-providers-requirements</text>
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1"
x="1" y="1" width="1480" height="1024" rx="8"/><text
class="breeze-sbom-generate-providers-requirements-title" fill="#c5c8c6"
text-anchor="middle" x="740"
y="27">Command: sbom generate-providers-requirements</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -171,37 +180,40 @@
</text><text class="breeze-sbom-generate-providers-requirements-r1" x="12.2"
y="93.2" textLength="536.8"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-3)">Generate requirements for selected provider.</text><text
class="breeze-sbom-generate-providers-requirements-r1" x="1464" y="93.2"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-3)">
</text><text class="breeze-sbom-generate-providers-requirements-r1" x="1464"
y="117.6" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-4)">
</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="142" textLength="24.4"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-5)">╭─</text><text
class="breeze-sbom-generate-providers-requirements-r5" x="24.4" y="142"
textLength="463.6"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-5)"> Generate provider requirements flags </text><text
class="breeze-sbom-generate-providers-requirements-r5" x="488" y="142" t [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="166.4" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-6)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="166.4"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-6)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="166.4"
textLength="97.6" clip-path="url(#breeze-sbom-generate-pro [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="190.8" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-7)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="190.8"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-7)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="190.8"
textLength="85.4" clip-path="url(#breeze-sbom-generate-pro [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="215.2" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-8)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="215.2"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-8)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="215.2"
textLength="109.8" clip-path="url(#breeze-sbom-generate-pr [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="239.6" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-9)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="280.6" y="239.6"
textLength="1159"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-9)">(airbyte | alibaba | amazon | apache.beam | apache.cassandra | apache.drill | apache.
[...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="264" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-10)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="280.6" y="264"
textLength="1159"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-10)">apache.flink | apache.hdfs | apache.hive | apache.impala | apache.kafka | apache.kylin |
[...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="288.4" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-11)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="280.6" y="288.4"
textLength="1159"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-11)">apache.livy | apache.pig | apache.pinot | apache.spark | apache.sqoop | apprise | a
[...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="312.8" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-12)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="280.6" y="312.8"
textLength="1159"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-12)">asana | atlassian.jira | celery | cloudant | cncf.kubernetes | common.sql | daskexe
[...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="337.2" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-13)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="280.6" y="337.2"
textLength="1159"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-13)">databricks | datadog | dbt.cloud | dingding | discord | docker | elasticsearch 
[...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="361.6" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-14)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="280.6" y="361.6"
textLength="1159"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-14)">facebook | ftp | github | google | grpc | hashicorp | http | imap |&
[...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="386" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-15)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="280.6" y="386"
textLength="1159"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-15)">microsoft.azure | microsoft.mssql | microsoft.psrp | microsoft.winrm | mongo | mysql | 
[...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="410.4" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-16)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="280.6" y="410.4"
textLength="1159"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-16)">odbc | openfaas | openlineage | opensearch | opsgenie | oracle | pagerduty |&#
[...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="434.8" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-17)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="280.6" y="434.8"
textLength="1159"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-17)">| postgres | presto | redis | salesforce | samba | segment | sendgrid |&#
[...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="459.2" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-18)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="280.6" y="459.2"
textLength="1159"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-18)">slack | smtp | snowflake | sqlite | ssh | tableau | tabular | telegram
[...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="483.6" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-19)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="280.6" y="483.6"
textLength="1159"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-19)">yandex | zendesk)                   &#
[...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="508" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-20)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="508"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-20)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="508"
textLength="73.2" clip-path="url(#breeze-sbom-generate-provide [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="532.4" textLength="1464"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-21)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-sbom-generate-providers-requirements-r1" x="1464" y="532.4"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-21)">
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="556.8" textLength="24.4"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-22)">╭─</text><text
class="breeze-sbom-generate-providers-requirements-r5" x="24.4" y="556.8"
textLength="219.6"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-22)"> Parallel running </text><text
class="breeze-sbom-generate-providers-requirements-r5" x="244" y="556.8"
textLength="1195.6" cli [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="581.2" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-23)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="581.2"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-23)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="581.2"
textLength="48.8" clip-path="url(#breeze-sbom-generate-p [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="605.6" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-24)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="605.6"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-24)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="605.6"
textLength="146.4" clip-path="url(#breeze-sbom-generate- [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="630" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-25)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="378.2" y="630"
textLength="915"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-25)">(INTEGER RANGE)                     &#
[...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="654.4" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-26)">│</text><text
class="breeze-sbom-generate-providers-requirements-r5" x="378.2" y="654.4"
textLength="915"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-26)">[default: 4; 1<=x<=8]                  
[...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="678.8" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-27)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="678.8"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-27)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="678.8"
textLength="61" clip-path="url(#breeze-sbom-generate-pro [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="703.2" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-28)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="703.2"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-28)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="703.2"
textLength="73.2" clip-path="url(#breeze-sbom-generate-p [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="727.6" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-29)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="727.6"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-29)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="727.6"
textLength="97.6" clip-path="url(#breeze-sbom-generate-p [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="752" textLength="1464"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-30)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-sbom-generate-providers-requirements-r1" x="1464" y="752"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-30)">
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="776.4" textLength="24.4"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-31)">╭─</text><text
class="breeze-sbom-generate-providers-requirements-r5" x="24.4" y="776.4"
textLength="195.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-31)"> Common options </text><text
class="breeze-sbom-generate-providers-requirements-r5" x="219.6" y="776.4"
textLength="1220" clip- [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="800.8" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-32)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="800.8"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-32)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="800.8"
textLength="97.6" clip-path="url(#breeze-sbom-generate-p [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="825.2" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-33)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="825.2"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-33)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="825.2"
textLength="48.8" clip-path="url(#breeze-sbom-generate-p [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="849.6" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-34)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="849.6"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-34)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="849.6"
textLength="85.4" clip-path="url(#breeze-sbom-generate-p [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="874" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-35)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="874"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-35)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="874"
textLength="61" clip-path="url(#breeze-sbom-generate-providers [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="898.4" textLength="1464"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-36)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-sbom-generate-providers-requirements-r1" x="1464" y="898.4"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-36)">
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="166.4" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-6)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="166.4"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-6)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="166.4"
textLength="85.4" clip-path="url(#breeze-sbom-generate-pro [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="190.8" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-7)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="190.8"
textLength="976"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-7)">(3.6 | 3.7 | 3.8 | 3.9 | 3.10 | 3.11)          
[...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="215.2" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-8)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="215.2"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-8)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="215.2"
textLength="109.8" clip-path="url(#breeze-sbom-generate-pr [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="239.6" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-9)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="239.6"
textLength="1146.8"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-9)">(airbyte | alibaba | amazon | apache.beam | apache.cassandra | apache.drill | apach
[...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="264" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-10)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="264"
textLength="1146.8"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-10)">apache.flink | apache.hdfs | apache.hive | apache.impala | apache.kafka | apache.kylin |&#
[...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="288.4" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-11)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="288.4"
textLength="1146.8"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-11)">apache.livy | apache.pig | apache.pinot | apache.spark | apache.sqoop | apprise | 
[...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="312.8" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-12)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="312.8"
textLength="1146.8"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-12)">asana | atlassian.jira | celery | cloudant | cncf.kubernetes | common.sql | daske
[...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="337.2" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-13)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="337.2"
textLength="1146.8"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-13)">databricks | datadog | dbt.cloud | dingding | discord | docker | elasticsearch
[...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="361.6" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-14)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="361.6"
textLength="1146.8"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-14)">facebook | ftp | github | google | grpc | hashicorp | http | imap 
[...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="386" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-15)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="386"
textLength="1146.8"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-15)">| microsoft.azure | microsoft.mssql | microsoft.psrp | microsoft.winrm | mongo | mysql
[...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="410.4" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-16)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="410.4"
textLength="1146.8"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-16)">| odbc | openfaas | openlineage | opensearch | opsgenie | oracle | pagerduty
[...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="434.8" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-17)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="434.8"
textLength="1146.8"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-17)">plexus | postgres | presto | redis | salesforce | samba | segment | sen
[...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="459.2" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-18)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="459.2"
textLength="1146.8"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-18)">singularity | slack | smtp | snowflake | sqlite | ssh | tableau | tabul
[...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="483.6" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-19)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="483.6"
textLength="1146.8"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-19)">vertica | yandex | zendesk)               
[...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="508" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-20)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="508"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-20)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="508"
textLength="109.8" clip-path="url(#breeze-sbom-generate-provid [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="532.4" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-21)">│</text><text
class="breeze-sbom-generate-providers-requirements-r1" x="292.8" y="532.4"
textLength="1146.8"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-21)">value to account for the most recent version of the provider     &
[...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="556.8" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-22)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="556.8"
textLength="1146.8"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-22)">(TEXT)                      
[...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="581.2" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-23)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="581.2"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-23)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="581.2"
textLength="73.2" clip-path="url(#breeze-sbom-generate-p [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="605.6" textLength="1464"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-24)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-sbom-generate-providers-requirements-r1" x="1464" y="605.6"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-24)">
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="630" textLength="24.4"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-25)">╭─</text><text
class="breeze-sbom-generate-providers-requirements-r5" x="24.4" y="630"
textLength="219.6"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-25)"> Parallel running </text><text
class="breeze-sbom-generate-providers-requirements-r5" x="244" y="630"
textLength="1195.6" clip-path [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="654.4" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-26)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="654.4"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-26)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="654.4"
textLength="48.8" clip-path="url(#breeze-sbom-generate-p [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="678.8" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-27)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="678.8"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-27)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="678.8"
textLength="146.4" clip-path="url(#breeze-sbom-generate- [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="703.2" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-28)">│</text><text
class="breeze-sbom-generate-providers-requirements-r6" x="378.2" y="703.2"
textLength="915"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-28)">(INTEGER RANGE)                    
[...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="727.6" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-29)">│</text><text
class="breeze-sbom-generate-providers-requirements-r5" x="378.2" y="727.6"
textLength="915"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-29)">[default: 4; 1<=x<=8]                  
[...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="752" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-30)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="752"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-30)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="752"
textLength="61" clip-path="url(#breeze-sbom-generate-providers [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="776.4" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-31)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="776.4"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-31)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="776.4"
textLength="73.2" clip-path="url(#breeze-sbom-generate-p [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="800.8" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-32)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="800.8"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-32)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="800.8"
textLength="97.6" clip-path="url(#breeze-sbom-generate-p [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="825.2" textLength="1464"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-33)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-sbom-generate-providers-requirements-r1" x="1464" y="825.2"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-33)">
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="849.6" textLength="24.4"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-34)">╭─</text><text
class="breeze-sbom-generate-providers-requirements-r5" x="24.4" y="849.6"
textLength="195.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-34)"> Common options </text><text
class="breeze-sbom-generate-providers-requirements-r5" x="219.6" y="849.6"
textLength="1220" clip- [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="874" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-35)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="874"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-35)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="874"
textLength="97.6" clip-path="url(#breeze-sbom-generate-provide [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="898.4" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-36)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="898.4"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-36)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="898.4"
textLength="48.8" clip-path="url(#breeze-sbom-generate-p [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="922.8" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-37)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="922.8"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-37)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="922.8"
textLength="85.4" clip-path="url(#breeze-sbom-generate-p [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="947.2" textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-38)">│</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="947.2"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-38)">-</text><text
class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="947.2"
textLength="61" clip-path="url(#breeze-sbom-generate-pro [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0"
y="971.6" textLength="1464"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-39)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-sbom-generate-providers-requirements-r1" x="1464" y="971.6"
textLength="12.2"
clip-path="url(#breeze-sbom-generate-providers-requirements-line-39)">
</text>
</g>
</g>
diff --git a/images/breeze/output_setup_check-all-params-in-groups.svg
b/images/breeze/output_setup_check-all-params-in-groups.svg
index 03f873859e..c29db1ff1f 100644
--- a/images/breeze/output_setup_check-all-params-in-groups.svg
+++ b/images/breeze/output_setup_check-all-params-in-groups.svg
@@ -167,11 +167,11 @@
</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0"
y="434.8" textLength="12.2"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-17)">│</text><text
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="434.8"
textLength="1256.6"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-17)">release-management:prepare-provider-packages | release-management:publish-docs |          
[...]
</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0"
y="459.2" textLength="12.2"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-18)">│</text><text
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="459.2"
textLength="1256.6"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-18)">release-management:release-prod-images | release-management:start-rc-process |           
[...]
</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0"
y="483.6" textLength="12.2"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-19)">│</text><text
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="483.6"
textLength="1256.6"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-19)">release-management:start-release | release-management:update-constraints |           
[...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="508"
textLength="12.2"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-20)">│</text><text
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="508"
textLength="1256.6"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-20)">release-management:verify-provider-packages | release-management | sbom:generate-providers-requirements</text><text
class="breeze-setup-check-a [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0"
y="532.4" textLength="12.2"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-21)">│</text><text
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="532.4"
textLength="1256.6"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-21)">| sbom:update-sbom-information | sbom | setup:autocomplete | setup:check-all-params-in-groups |    
[...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0"
y="556.8" textLength="12.2"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-22)">│</text><text
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="556.8"
textLength="1256.6"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-22)">setup:config | setup:regenerate-command-images | setup:self-upgrade | setup:version | setup | shell |
[...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0"
y="581.2" textLength="12.2"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-23)">│</text><text
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="581.2"
textLength="1256.6"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-23)">start-airflow | static-checks | testing:docker-compose-tests | testing:helm-tests |       
[...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0"
y="605.6" textLength="12.2"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-24)">│</text><text
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="605.6"
textLength="1256.6"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-24)">testing:integration-tests | testing:tests | testing)              
[...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="508"
textLength="12.2"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-20)">│</text><text
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="508"
textLength="1256.6"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-20)">release-management:verify-provider-packages | release-management | sbom:build-all-airflow-images |     </text><te
[...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0"
y="532.4" textLength="12.2"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-21)">│</text><text
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="532.4"
textLength="1256.6"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-21)">sbom:generate-providers-requirements | sbom:update-sbom-information | sbom | setup:autocomplete |    
[...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0"
y="556.8" textLength="12.2"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-22)">│</text><text
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="556.8"
textLength="1256.6"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-22)">setup:check-all-params-in-groups | setup:config | setup:regenerate-command-images | setup:self-upgrade </text><text
class="b [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0"
y="581.2" textLength="12.2"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-23)">│</text><text
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="581.2"
textLength="1256.6"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-23)">| setup:version | setup | shell | start-airflow | static-checks | testing:docker-compose-tests |
[...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0"
y="605.6" textLength="12.2"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-24)">│</text><text
class="breeze-setup-check-all-params-in-groups-r6" x="183" y="605.6"
textLength="1256.6"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-24)">testing:helm-tests | testing:integration-tests | testing:tests | testing)         &#
[...]
</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="630"
textLength="1464"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-25)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="630"
textLength="12.2"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-25)">
</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0"
y="654.4" textLength="24.4"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-26)">╭─</text><text
class="breeze-setup-check-all-params-in-groups-r5" x="24.4" y="654.4"
textLength="195.2"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-26)"> Common options </text><text
class="breeze-setup-check-all-params-in-groups-r5" x="219.6" y="654.4"
textLength="1220" clip-path="url(#breeze-se [...]
</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0"
y="678.8" textLength="12.2"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-27)">│</text><text
class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="678.8"
textLength="12.2"
clip-path="url(#breeze-setup-check-all-params-in-groups-line-27)">-</text><text
class="breeze-setup-check-all-params-in-groups-r4" x="36.6" y="678.8"
textLength="97.6" clip-path="url(#breeze-setup-check-all-params-in-groups-li
[...]
diff --git a/images/breeze/output_setup_regenerate-command-images.svg
b/images/breeze/output_setup_regenerate-command-images.svg
index 427c8f14c1..bd4bd20270 100644
--- a/images/breeze/output_setup_regenerate-command-images.svg
+++ b/images/breeze/output_setup_regenerate-command-images.svg
@@ -180,7 +180,7 @@
</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="459.2"
textLength="12.2"
clip-path="url(#breeze-setup-regenerate-command-images-line-18)">│</text><text
class="breeze-setup-regenerate-command-images-r6" x="219.6" y="459.2"
textLength="1220"
clip-path="url(#breeze-setup-regenerate-command-images-line-18)">release-management:prepare-provider-packages | release-management:publish-docs |           &#
[...]
</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="483.6"
textLength="12.2"
clip-path="url(#breeze-setup-regenerate-command-images-line-19)">│</text><text
class="breeze-setup-regenerate-command-images-r6" x="219.6" y="483.6"
textLength="1220"
clip-path="url(#breeze-setup-regenerate-command-images-line-19)">release-management:release-prod-images | release-management:start-rc-process |           
[...]
</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="508"
textLength="12.2"
clip-path="url(#breeze-setup-regenerate-command-images-line-20)">│</text><text
class="breeze-setup-regenerate-command-images-r6" x="219.6" y="508"
textLength="1220"
clip-path="url(#breeze-setup-regenerate-command-images-line-20)">release-management:start-release | release-management:update-constraints |             
[...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="532.4"
textLength="12.2"
clip-path="url(#breeze-setup-regenerate-command-images-line-21)">│</text><text
class="breeze-setup-regenerate-command-images-r6" x="219.6" y="532.4"
textLength="1220"
clip-path="url(#breeze-setup-regenerate-command-images-line-21)">release-management:verify-provider-packages | release-management |             
[...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="532.4"
textLength="12.2"
clip-path="url(#breeze-setup-regenerate-command-images-line-21)">│</text><text
class="breeze-setup-regenerate-command-images-r6" x="219.6" y="532.4"
textLength="1220"
clip-path="url(#breeze-setup-regenerate-command-images-line-21)">release-management:verify-provider-packages | release-management | sbom:build-all-airflow-images |  </text><text
class="breeze-s [...]
</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="556.8"
textLength="12.2"
clip-path="url(#breeze-setup-regenerate-command-images-line-22)">│</text><text
class="breeze-setup-regenerate-command-images-r6" x="219.6" y="556.8"
textLength="1220"
clip-path="url(#breeze-setup-regenerate-command-images-line-22)">sbom:generate-providers-requirements | sbom:update-sbom-information | sbom | setup:autocomplete |   </text><text
[...]
</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="581.2"
textLength="12.2"
clip-path="url(#breeze-setup-regenerate-command-images-line-23)">│</text><text
class="breeze-setup-regenerate-command-images-r6" x="219.6" y="581.2"
textLength="1220"
clip-path="url(#breeze-setup-regenerate-command-images-line-23)">setup:check-all-params-in-groups | setup:config | setup:regenerate-command-images |         &
[...]
</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="605.6"
textLength="12.2"
clip-path="url(#breeze-setup-regenerate-command-images-line-24)">│</text><text
class="breeze-setup-regenerate-command-images-r6" x="219.6" y="605.6"
textLength="1220"
clip-path="url(#breeze-setup-regenerate-command-images-line-24)">setup:self-upgrade | setup:version | setup | shell | start-airflow | static-checks |    
[...]