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 01b1b30b15 Organize the release Breeze commands better (#32556)
01b1b30b15 is described below

commit 01b1b30b158b7335ffe7d6bc9e1e8bdda9ce2bcf
Author: Jarek Potiuk <[email protected]>
AuthorDate: Wed Jul 12 22:14:35 2023 +0200

    Organize the release Breeze commands better (#32556)
    
    The release commands in Breeze were somewhat disorganized, some of
    them were hidden from the output of release-management command, and
    they were connected to release-management group in a bit weird way.
    
    They also did not have a chapter in BREEZE documentation
    
    This PR makes all the release management commands more consistently
    explained in documentation and help file:
    
    * the list of release-management commands contains all of the commands
    * they commands are grouped together in logical groups (Airflow,
      providers, other)
    * they are all linked to the common release_management group via
      the same mechanism (``@release_management.command``)
    * screenshots are generated for all of the commands and described
      in BREEZE.rst
    * the structure of documentation in BREEZE.rst reflects the logical
      grouping of commands
    * references are added between BREEZE.rst and relase READMES when
      needed.
---
 BREEZE.rst                                         | 314 ++++++++++++---------
 dev/breeze/src/airflow_breeze/breeze.py            |   3 +
 .../commands/minor_release_command.py              |   4 +-
 .../commands/release_candidate_command.py          |   4 +-
 .../src/airflow_breeze/commands/release_command.py |   4 +-
 .../commands/release_management_commands.py        |  20 +-
 .../commands/release_management_commands_config.py |  30 +-
 .../commands/release_management_group.py           |  30 ++
 .../src/airflow_breeze/configure_rich_click.py     |  10 +-
 images/breeze/output-commands-hash.txt             |   8 +-
 images/breeze/output_release-management.svg        |  54 ++--
 ...tput_release-management_create-minor-branch.svg | 110 ++++++++
 .../output_release-management_start-rc-process.svg | 118 ++++++++
 .../output_release-management_start-release.svg    | 114 ++++++++
 14 files changed, 635 insertions(+), 188 deletions(-)

diff --git a/BREEZE.rst b/BREEZE.rst
index b31e7886de..7805128776 100644
--- a/BREEZE.rst
+++ b/BREEZE.rst
@@ -462,51 +462,6 @@ Those are all available flags of ``build-docs`` command:
   :width: 100%
   :alt: Breeze build documentation
 
-Publishing the documentation
---------------------------
-
-To publish the documentation generated by ``build-docs`` in Breeze to 
``airflow-site``,
-use the ``release-management publish-docs`` command:
-
-.. code-block:: bash
-
-     breeze release-management publish-docs
-
-The publishing documentation consists  steps:
-
-* checking out the latest ``main`` of cloned ``airflow-site``
-* copying the documentation to ``airflow-site``
-* running post-docs scripts on the docs to generate back referencing HTML for 
new versions of docs
-
-.. code-block:: bash
-
-     breeze release-management publish-docs --package-filter 
apache-airflow-providers-amazon
-
-The flag ``--package-filter`` can be used to selectively publish docs during a 
release. It can take
-values such as apache-airflow, helm-chart, apache-airflow-providers, or any 
individual providers.
-The documentation publication happens based on this flag.
-
-.. code-block:: bash
-
-     breeze release-management publish-docs --override-versioned
-
-The flag ``--override-versioned`` is a boolean flag that is used to override 
the versioned directories
-while publishing the documentation.
-
-.. code-block:: bash
-
-     breeze release-management publish-docs --airflow-site-directory
-
-The flag ``--airflow-site-directory`` takes the path of the cloned 
``airflow-site``. The command will
-not proceed if this is an invalid path.
-
-Those are all available flags of ``release-management publish-docs`` command:
-
-.. image:: ./images/breeze/output_release-management_publish-docs.svg
-  :target: 
https://raw.githubusercontent.com/apache/airflow/main/images/breeze/output_release-management_publish-docs.svg
-  :width: 100%
-  :alt: Breeze Publish documentation
-
 
 Running static checks
 ---------------------
@@ -1775,24 +1730,121 @@ do not need or have no access to run). Those are 
usually connected with releasin
   :width: 100%
   :alt: Breeze release management
 
-Breeze can be used to prepare airflow packages - both "apache-airflow" main 
package and
-provider packages.
+Airflow release commands
+........................
 
-Preparing provider documentation
-................................
+Running airflow release commands is part of the release procedure performed by 
the release managers
+and it is described in detail in `dev <dev/README_RELEASE_AIRFLOW.md>`_ .
+
+Preparing airflow packages
+""""""""""""""""""""""""""
+
+You can prepare airflow packages using Breeze:
+
+.. code-block:: bash
+
+     breeze release-management prepare-airflow-package
+
+This prepares airflow .whl package in the dist folder.
+
+Again, you can specify optional ``--package-format`` flag to build selected 
formats of airflow packages,
+default is to build ``both`` type of packages ``sdist`` and ``wheel``.
+
+.. code-block:: bash
+
+     breeze release-management prepare-airflow-package --package-format=wheel
+
+.. image:: 
./images/breeze/output_release-management_prepare-airflow-package.svg
+  :target: 
https://raw.githubusercontent.com/apache/airflow/main/images/breeze/output_release-management_prepare-airflow-package.svg
+  :width: 100%
+  :alt: Breeze release-management prepare-airflow-package
+
+
+Start minor branch of Airflow
+"""""""""""""""""""""""""""""
+
+When we create a new minor branch of Airflow, we need to perform a few 
maintenance tasks. This command
+automates it.
+
+.. code-block:: bash
+
+     breeze release-management create-minor-branch
+
+.. image:: ./images/breeze/output_release-management_create-minor-branch.svg
+  :target: 
https://raw.githubusercontent.com/apache/airflow/main/images/breeze/output_release-management_create-minor-branch.svg
+  :width: 100%
+  :alt: Breeze release-management create-minor-branch
+
+
+Start release candidate process
+"""""""""""""""""""""""""""""""
+
+When we prepare release candidate, we automate some of the steps we need to do.
+
+.. code-block:: bash
+
+     breeze release-management start-rc-process
+
+.. image:: ./images/breeze/output_release-management_start-rc-process.svg
+  :target: 
https://raw.githubusercontent.com/apache/airflow/main/images/breeze/output_release-management_start-rc-process.svg
+  :width: 100%
+  :alt: Breeze release-management start-rc-process
+
+Start release process
+"""""""""""""""""""""
+
+When we prepare final release, we automate some of the steps we need to do.
+
+.. code-block:: bash
+
+     breeze release-management start-release
+
+.. image:: ./images/breeze/output_release-management_start-release.svg
+  :target: 
https://raw.githubusercontent.com/apache/airflow/main/images/breeze/output_release-management_start-rc-process.svg
+  :width: 100%
+  :alt: Breeze release-management start-rc-process
+
+Releasing Production images
+"""""""""""""""""""""""""""
+
+The **Production image** can be released by release managers who have 
permissions to push the image. This
+happens only when there is an RC candidate or final version of Airflow 
released.
+
+You release "regular" and "slim" images as separate steps.
 
-You can read more about testing provider packages in
-`TESTING.rst <TESTING.rst#running-tests-with-provider-packages>`_
+Releasing "regular" images:
 
-There are several commands that you can run in Breeze to manage and build 
packages:
+.. code-block:: bash
 
-* preparing Provider documentation files
-* preparing Airflow packages
-* preparing Provider packages
+     breeze release-management release-prod-images --airflow-version 2.4.0
+
+Or "slim" images:
+
+.. code-block:: bash
+
+     breeze release-management release-prod-images --airflow-version 2.4.0 
--slim-images
 
-Preparing provider documentation files is part of the release procedure by the 
release managers
+By default when you are releasing the "final" image, we also tag image with 
"latest" tags but this
+step can be skipped if you pass the ``--skip-latest`` flag.
+
+These are all of the available flags for the ``release-prod-images`` command:
+
+.. image:: ./images/breeze/output_release-management_release-prod-images.svg
+  :target: 
https://raw.githubusercontent.com/apache/airflow/main/images/breeze/output_release-management_release-prod-images.svg
+  :width: 100%
+  :alt: Breeze release management release prod images
+
+Provider release commands
+.........................
+
+Preparing provider release is part of the release procedure by the release 
managers
 and it is described in detail in `dev 
<dev/README_RELEASE_PROVIDER_PACKAGES.md>`_ .
 
+Preparing provider documentation
+""""""""""""""""""""""""""""""""
+
+You can use Breeze to prepare provider documentation.
+
 The below example perform documentation preparation for provider packages.
 
 .. code-block:: bash
@@ -1814,7 +1866,7 @@ You can also add ``--answer yes`` to perform 
non-interactive build.
   :alt: Breeze prepare-provider-documentation
 
 Preparing provider packages
-...........................
+"""""""""""""""""""""""""""
 
 You can use Breeze to prepare provider packages.
 
@@ -1846,58 +1898,71 @@ You can see all providers available by running this 
command:
   :width: 100%
   :alt: Breeze prepare-provider-packages
 
-Verifying provider packages
-...........................
+Installing provider packages
+""""""""""""""""""""""""""""
 
-Breeze can also be used to verify if provider classes are importable and if 
they are following the
-right naming conventions. This happens automatically on CI but you can also 
run it manually if you
+In some cases we want to just see if the provider packages generated can be 
installed with airflow without
+verifying them. This happens automatically on CI for sdist pcackages but you 
can also run it manually if you
 just prepared provider packages and they are present in ``dist`` folder.
 
 .. code-block:: bash
 
-     breeze release-management verify-provider-packages
+     breeze release-management install-provider-packages
 
 You can also run the verification with an earlier airflow version to check for 
compatibility.
 
 .. code-block:: bash
 
-    breeze release-management verify-provider-packages --use-airflow-version 
2.4.0
+    breeze release-management install-provider-packages --use-airflow-version 
2.4.0
 
 All the command parameters are here:
 
-.. image:: 
./images/breeze/output_release-management_verify-provider-packages.svg
-  :target: 
https://raw.githubusercontent.com/apache/airflow/main/images/breeze/output_release-management_verify-provider-packages.svg
+.. image:: 
./images/breeze/output_release-management_install-provider-packages.svg
+  :target: 
https://raw.githubusercontent.com/apache/airflow/main/images/breeze/output_release-management_install-provider-packages.svg
   :width: 100%
-  :alt: Breeze verify-provider-packages
-
+  :alt: Breeze install-provider-packages
 
-Installing provider packages
-............................
+Verifying provider packages
+"""""""""""""""""""""""""""
 
-In some cases we want to just see if the provider packages generated can be 
installed with airflow without
-verifying them. This happens automatically on CI for sdist pcackages but you 
can also run it manually if you
+Breeze can also be used to verify if provider classes are importable and if 
they are following the
+right naming conventions. This happens automatically on CI but you can also 
run it manually if you
 just prepared provider packages and they are present in ``dist`` folder.
 
 .. code-block:: bash
 
-     breeze release-management install-provider-packages
+     breeze release-management verify-provider-packages
 
 You can also run the verification with an earlier airflow version to check for 
compatibility.
 
 .. code-block:: bash
 
-    breeze release-management install-provider-packages --use-airflow-version 
2.4.0
+    breeze release-management verify-provider-packages --use-airflow-version 
2.4.0
 
 All the command parameters are here:
 
-.. image:: 
./images/breeze/output_release-management_install-provider-packages.svg
-  :target: 
https://raw.githubusercontent.com/apache/airflow/main/images/breeze/output_release-management_install-provider-packages.svg
+.. image:: 
./images/breeze/output_release-management_verify-provider-packages.svg
+  :target: 
https://raw.githubusercontent.com/apache/airflow/main/images/breeze/output_release-management_verify-provider-packages.svg
   :width: 100%
-  :alt: Breeze install-provider-packages
+  :alt: Breeze verify-provider-packages
+
+Generating Providers Metadata
+"""""""""""""""""""""""""""""
+
+The release manager can generate providers metadata per provider version - 
information about provider versions
+including the associated Airflow version for the provider version (i.e first 
airflow version released after the
+provider has been released) and date of the release of the provider version.
+
+These are all of the available flags for the ``generate-providers-metadata`` 
command:
+
+.. image:: 
./images/breeze/output_release-management_generate-providers-metadata.svg
+  :target: 
https://raw.githubusercontent.com/apache/airflow/main/images/breeze/output_release-management_generate-providers-metadata.svg
+  :width: 100%
+  :alt: Breeze release management generate providers metadata
 
 
 Generating Provider Issue
-.........................
+"""""""""""""""""""""""""
 
 You can use Breeze to generate a provider issue when you release new providers.
 
@@ -1906,31 +1971,57 @@ You can use Breeze to generate a provider issue when 
you release new providers.
   :width: 100%
   :alt: Breeze generate-issue-content-providers
 
-Preparing airflow packages
-..........................
 
-You can prepare airflow packages using Breeze:
+Other release commands
+......................
+
+Publishing the documentation
+""""""""""""""""""""""""""""
+
+To publish the documentation generated by ``build-docs`` in Breeze to 
``airflow-site``,
+use the ``release-management publish-docs`` command:
 
 .. code-block:: bash
 
-     breeze release-management prepare-airflow-package
+     breeze release-management publish-docs
 
-This prepares airflow .whl package in the dist folder.
+The publishing documentation consists  steps:
 
-Again, you can specify optional ``--package-format`` flag to build selected 
formats of airflow packages,
-default is to build ``both`` type of packages ``sdist`` and ``wheel``.
+* checking out the latest ``main`` of cloned ``airflow-site``
+* copying the documentation to ``airflow-site``
+* running post-docs scripts on the docs to generate back referencing HTML for 
new versions of docs
 
 .. code-block:: bash
 
-     breeze release-management prepare-airflow-package --package-format=wheel
+     breeze release-management publish-docs --package-filter 
apache-airflow-providers-amazon
 
-.. image:: 
./images/breeze/output_release-management_prepare-airflow-package.svg
-  :target: 
https://raw.githubusercontent.com/apache/airflow/main/images/breeze/output_release-management_prepare-airflow-package.svg
+The flag ``--package-filter`` can be used to selectively publish docs during a 
release. It can take
+values such as apache-airflow, helm-chart, apache-airflow-providers, or any 
individual providers.
+The documentation publication happens based on this flag.
+
+.. code-block:: bash
+
+     breeze release-management publish-docs --override-versioned
+
+The flag ``--override-versioned`` is a boolean flag that is used to override 
the versioned directories
+while publishing the documentation.
+
+.. code-block:: bash
+
+     breeze release-management publish-docs --airflow-site-directory
+
+The flag ``--airflow-site-directory`` takes the path of the cloned 
``airflow-site``. The command will
+not proceed if this is an invalid path.
+
+Those are all available flags of ``release-management publish-docs`` command:
+
+.. image:: ./images/breeze/output_release-management_publish-docs.svg
+  :target: 
https://raw.githubusercontent.com/apache/airflow/main/images/breeze/output_release-management_publish-docs.svg
   :width: 100%
-  :alt: Breeze release-management prepare-airflow-package
+  :alt: Breeze Publish documentation
 
 Generating constraints
-......................
+""""""""""""""""""""""
 
 Whenever setup.py gets modified, the CI main job will re-generate constraint 
files. Those constraint
 files are stored in separated orphan branches: ``constraints-main``, 
``constraints-2-0``.
@@ -1983,51 +2074,6 @@ This bumps the constraint files to latest versions and 
stores hash of setup.py.
 and setup.py hash files are stored in the ``files`` folder and while 
generating the constraints diff
 of changes vs the previous constraint files is printed.
 
-Generating Providers Metadata
-.............................
-
-The release manager can generate providers metadata per provider version - 
information about provider versions
-including the associated Airflow version for the provider version (i.e first 
airflow version released after the
-provider has been released) and date of the release of the provider version.
-
-These are all of the available flags for the ``generate-providers-metadata`` 
command:
-
-.. image:: 
./images/breeze/output_release-management_generate-providers-metadata.svg
-  :target: 
https://raw.githubusercontent.com/apache/airflow/main/images/breeze/output_release-management_generate-providers-metadata.svg
-  :width: 100%
-  :alt: Breeze release management generate providers metadata
-
-
-Releasing Production images
-...........................
-
-The **Production image** can be released by release managers who have 
permissions to push the image. This
-happens only when there is an RC candidate or final version of Airflow 
released.
-
-You release "regular" and "slim" images as separate steps.
-
-Releasing "regular" images:
-
-.. code-block:: bash
-
-     breeze release-management release-prod-images --airflow-version 2.4.0
-
-Or "slim" images:
-
-.. code-block:: bash
-
-     breeze release-management release-prod-images --airflow-version 2.4.0 
--slim-images
-
-By default when you are releasing the "final" image, we also tag image with 
"latest" tags but this
-step can be skipped if you pass the ``--skip-latest`` flag.
-
-These are all of the available flags for the ``release-prod-images`` command:
-
-.. image:: ./images/breeze/output_release-management_release-prod-images.svg
-  :target: 
https://raw.githubusercontent.com/apache/airflow/main/images/breeze/output_release-management_release-prod-images.svg
-  :width: 100%
-  :alt: Breeze release management release prod images
-
 
 SBOM generation tasks
 ----------------------
diff --git a/dev/breeze/src/airflow_breeze/breeze.py 
b/dev/breeze/src/airflow_breeze/breeze.py
index f061952914..3217a3af80 100755
--- a/dev/breeze/src/airflow_breeze/breeze.py
+++ b/dev/breeze/src/airflow_breeze/breeze.py
@@ -34,6 +34,9 @@ from airflow_breeze.commands.ci_image_commands import 
ci_image  # noqa
 from airflow_breeze.commands.kubernetes_commands import kubernetes_group  # 
noqa
 from airflow_breeze.commands.production_image_commands import prod_image  # 
noqa
 from airflow_breeze.commands.release_management_commands import 
release_management  # noqa
+from airflow_breeze.commands.minor_release_command import 
create_minor_version_branch  # noqa
+from airflow_breeze.commands.release_command import airflow_release  # noqa
+from airflow_breeze.commands.release_candidate_command import 
release_management  # noqa
 from airflow_breeze.commands.sbom_commands import sbom  # noqa
 from airflow_breeze.commands.setup_commands import setup  # noqa
 from airflow_breeze.commands.testing_commands import group_for_testing  # noqa
diff --git a/dev/breeze/src/airflow_breeze/commands/minor_release_command.py 
b/dev/breeze/src/airflow_breeze/commands/minor_release_command.py
index 3df2936257..0ccb9edb25 100644
--- a/dev/breeze/src/airflow_breeze/commands/minor_release_command.py
+++ b/dev/breeze/src/airflow_breeze/commands/minor_release_command.py
@@ -20,6 +20,7 @@ import os
 
 import click
 
+from airflow_breeze.commands.release_management_group import release_management
 from airflow_breeze.utils.common_options import option_answer
 from airflow_breeze.utils.confirm import confirm_action
 from airflow_breeze.utils.console import console_print
@@ -148,10 +149,9 @@ def create_constraints(version_branch):
             )
 
 
[email protected](
+@release_management.command(
     name="create-minor-branch",
     help="Create a new version branch and update the default branches in main",
-    hidden=True,
 )
 @click.option("--version-branch", help="The version branch you want to create 
e.g 2-4", required=True)
 @option_answer
diff --git 
a/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py 
b/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
index f07f606188..b79c2fd8bb 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
@@ -20,6 +20,7 @@ import os
 
 import click
 
+from airflow_breeze.commands.release_management_group import release_management
 from airflow_breeze.utils.common_options import option_answer
 from airflow_breeze.utils.confirm import confirm_action
 from airflow_breeze.utils.console import console_print
@@ -294,11 +295,10 @@ def remove_old_releases(version, repo_root):
     os.chdir(repo_root)
 
 
[email protected](
+@release_management.command(
     name="start-rc-process",
     short_help="Start RC process",
     help="Start the process for releasing a new RC.",
-    hidden=True,
 )
 @click.option("--version", required=True, help="The release candidate version 
e.g. 2.4.3rc1")
 @click.option("--previous-version", required=True, help="Previous version 
released e.g. 2.4.2")
diff --git a/dev/breeze/src/airflow_breeze/commands/release_command.py 
b/dev/breeze/src/airflow_breeze/commands/release_command.py
index 57c77d1c19..4fff09fdae 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_command.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_command.py
@@ -20,6 +20,7 @@ import os
 
 import click
 
+from airflow_breeze.commands.release_management_group import release_management
 from airflow_breeze.utils.common_options import option_answer
 from airflow_breeze.utils.confirm import confirm_action
 from airflow_breeze.utils.console import console_print
@@ -199,12 +200,11 @@ def push_tag_for_final_version(version, 
release_candidate):
         run_command(["git", "push", "origin", "tag", f"{version}"], 
dry_run_override=DRY_RUN, check=True)
 
 
[email protected](
+@release_management.command(
     name="start-release",
     short_help="Start Airflow release process",
     help="Start the process of releasing an Airflow version. "
     "This command will guide you through the release process. ",
-    hidden=True,
 )
 @click.option("--release-candidate", required=True)
 @click.option("--previous-release", required=True)
diff --git 
a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py 
b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index 565e323c4d..a52eb9e595 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -34,9 +34,7 @@ from rich.progress import Progress
 from rich.syntax import Syntax
 
 from airflow_breeze.commands.ci_image_commands import 
rebuild_or_pull_ci_image_if_needed
-from airflow_breeze.commands.minor_release_command import 
create_minor_version_branch
-from airflow_breeze.commands.release_candidate_command import 
publish_release_candidate
-from airflow_breeze.commands.release_command import airflow_release
+from airflow_breeze.commands.release_management_group import release_management
 from airflow_breeze.global_constants import (
     ALLOWED_PLATFORMS,
     APACHE_AIRFLOW_GITHUB_REPOSITORY,
@@ -49,7 +47,6 @@ from airflow_breeze.global_constants import (
 )
 from airflow_breeze.params.shell_params import ShellParams
 from airflow_breeze.utils.ci_group import ci_group
-from airflow_breeze.utils.click_utils import BreezeGroup
 from airflow_breeze.utils.common_options import (
     argument_packages,
     option_airflow_constraints_mode_ci,
@@ -181,15 +178,6 @@ echo -e '\\e[34mRun this command to debug:
         )
 
 
[email protected](
-    cls=BreezeGroup,
-    name="release-management",
-    help="Tools that release managers can use to prepare and manage Airflow 
releases",
-)
-def release_management():
-    pass
-
-
 @release_management.command(
     name="prepare-airflow-package",
     help="Prepare sdist/whl package of Airflow.",
@@ -1234,9 +1222,3 @@ def generate_providers_metadata(refresh_constraints: 
bool, python: str | None):
     import json
 
     PROVIDER_METADATA_JSON_FILE_PATH.write_text(json.dumps(metadata_dict, 
indent=4, sort_keys=True))
-
-
-# AIRFLOW RELEASE COMMANDS
-release_management.add_command(publish_release_candidate)
-release_management.add_command(airflow_release)
-release_management.add_command(create_minor_version_branch)
diff --git 
a/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py 
b/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
index dcf7b35b43..0bd911e745 100644
--- 
a/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
+++ 
b/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
@@ -16,16 +16,34 @@
 # under the License.
 from __future__ import annotations
 
-RELEASE_MANAGEMENT_COMMANDS: dict[str, str | list[str]] = {
-    "name": "Release management",
+RELEASE_AIRFLOW_COMMANDS: dict[str, str | list[str]] = {
+    "name": "Airflow release commands",
     "commands": [
-        "verify-provider-packages",
-        "prepare-provider-documentation",
-        "prepare-provider-packages",
         "prepare-airflow-package",
+        "create-minor-branch",
+        "start-rc-process",
+        "start-release",
         "release-prod-images",
-        "generate-constraints",
+    ],
+}
+
+RELEASE_PROVIDERS_COMMANDS: dict[str, str | list[str]] = {
+    "name": "Providers release commands",
+    "commands": [
+        "prepare-provider-documentation",
+        "prepare-provider-packages",
+        "install-provider-packages",
+        "verify-provider-packages",
+        "generate-providers-metadata",
+        "generate-issue-content-providers",
+    ],
+}
+
+RELEASE_OTHER_COMMANDS: dict[str, str | list[str]] = {
+    "name": "Other release commands",
+    "commands": [
         "publish-docs",
+        "generate-constraints",
     ],
 }
 
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_group.py 
b/dev/breeze/src/airflow_breeze/commands/release_management_group.py
new file mode 100644
index 0000000000..cf898623d8
--- /dev/null
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_group.py
@@ -0,0 +1,30 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import click
+
+from airflow_breeze.utils.click_utils import BreezeGroup
+
+
[email protected](
+    cls=BreezeGroup,
+    name="release-management",
+    help="Tools that release managers can use to prepare and manage Airflow 
releases",
+)
+def release_management():
+    pass
diff --git a/dev/breeze/src/airflow_breeze/configure_rich_click.py 
b/dev/breeze/src/airflow_breeze/configure_rich_click.py
index 385ed1d887..b10093a679 100644
--- a/dev/breeze/src/airflow_breeze/configure_rich_click.py
+++ b/dev/breeze/src/airflow_breeze/configure_rich_click.py
@@ -47,8 +47,10 @@ else:
         PRODUCTION_IMAGE_TOOLS_PARAMETERS,
     )
     from airflow_breeze.commands.release_management_commands_config import (
-        RELEASE_MANAGEMENT_COMMANDS,
+        RELEASE_AIRFLOW_COMMANDS,
         RELEASE_MANAGEMENT_PARAMETERS,
+        RELEASE_OTHER_COMMANDS,
+        RELEASE_PROVIDERS_COMMANDS,
     )
     from airflow_breeze.commands.setup_commands_config import SETUP_COMMANDS, 
SETUP_PARAMETERS
     from airflow_breeze.commands.testing_commands_config import 
TESTING_COMMANDS, TESTING_PARAMETERS
@@ -102,7 +104,11 @@ else:
         "breeze ci-image": [CI_IMAGE_TOOLS_COMMANDS],
         "breeze prod-image": [PRODUCTION_IMAGE_TOOLS_COMMANDS],
         "breeze setup": [SETUP_COMMANDS],
-        "breeze release-management": [RELEASE_MANAGEMENT_COMMANDS],
+        "breeze release-management": [
+            RELEASE_AIRFLOW_COMMANDS,
+            RELEASE_PROVIDERS_COMMANDS,
+            RELEASE_OTHER_COMMANDS,
+        ],
         "breeze sbom": [SBOM_COMMANDS],
         "breeze ci": [CI_COMMANDS],
     }
diff --git a/images/breeze/output-commands-hash.txt 
b/images/breeze/output-commands-hash.txt
index a1cd835a9a..1890af0540 100644
--- a/images/breeze/output-commands-hash.txt
+++ b/images/breeze/output-commands-hash.txt
@@ -35,7 +35,7 @@ prod-image:build:58ab53c2f5e799bbe05d6fac26d001bf
 prod-image:pull:76f1f27e6119928412abecf153fce4bb
 prod-image:verify:bd2b78738a7c388dbad6076c41a9f906
 prod-image:2da480c21d7eb120075489dc1da0f55b
-release-management:create-minor-branch:91d4727f5d95df6eed6c09a5408fda08
+release-management:create-minor-branch:a3834afc4aa5d1e98002c9e9e7a9931d
 release-management:generate-constraints:b8fcaf8f0acd35ed5dbd48659bdb6485
 
release-management:generate-issue-content-providers:9cea234261547208ac812464d3e4a598
 release-management:generate-providers-metadata:d4e8e5cfaa024e3963af02d7a873048d
@@ -45,10 +45,10 @@ 
release-management:prepare-provider-documentation:bc0b95c6a0f308273ab25f728afdb0
 release-management:prepare-provider-packages:3e19a787c71d5515a2bc05539da0022f
 release-management:publish-docs:4a7d78a846f7e58c6af4a55cbdf7104b
 release-management:release-prod-images:4d85a23a2175bf8894de5aedbdd85614
-release-management:start-rc-process:108c9daabd5970fde86210b1669990cc
-release-management:start-release:ad13846c7573ddaaa59adc72f0f00284
+release-management:start-rc-process:b27bd524dd3c89f50a747b60a7e892c1
+release-management:start-release:419f48f6a4ff4457cb9de7ff496aebbe
 release-management:verify-provider-packages:96dce5644aad6b37080acf77b3d8de3a
-release-management:473d554e19e108635deda89eb8e0bd05
+release-management:b53a6b829715075b5570de4760887a2a
 sbom:generate-provider-requirements:1e7609a0ebafb839d30ec90e4254a628
 sbom:update-sbom-information:0ce56884e5f842e3e80d6619df1ccc64
 sbom:d9c57d78e23a29ec9cd0139e230e1811
diff --git a/images/breeze/output_release-management.svg 
b/images/breeze/output_release-management.svg
index c02b1f93bf..e751de1f99 100644
--- a/images/breeze/output_release-management.svg
+++ b/images/breeze/output_release-management.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 586.8" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 708.8" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -42,7 +42,7 @@
 
     <defs>
     <clipPath id="breeze-release-management-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="535.8" />
+      <rect x="0" y="0" width="1463.0" height="657.8" />
     </clipPath>
     <clipPath id="breeze-release-management-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -107,9 +107,24 @@
 <clipPath id="breeze-release-management-line-20">
     <rect x="0" y="489.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-release-management-line-21">
+    <rect x="0" y="513.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-line-22">
+    <rect x="0" y="538.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-line-23">
+    <rect x="0" y="562.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-line-24">
+    <rect x="0" y="587.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-line-25">
+    <rect x="0" y="611.5" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="584.8" rx="8"/><text 
class="breeze-release-management-title" fill="#c5c8c6" text-anchor="middle" 
x="740" y="27">Command:&#160;release-management</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="706.8" rx="8"/><text 
class="breeze-release-management-title" fill="#c5c8c6" text-anchor="middle" 
x="740" y="27">Command:&#160;release-management</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -127,20 +142,25 @@
 </text><text class="breeze-release-management-r5" x="0" y="142" 
textLength="24.4" 
clip-path="url(#breeze-release-management-line-5)">╭─</text><text 
class="breeze-release-management-r5" x="24.4" y="142" textLength="195.2" 
clip-path="url(#breeze-release-management-line-5)">&#160;Common&#160;options&#160;</text><text
 class="breeze-release-management-r5" x="219.6" y="142" textLength="1220" 
clip-path="url(#breeze-release-management-line-5)">────────────────────────────────────────────────────
 [...]
 </text><text class="breeze-release-management-r5" x="0" y="166.4" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-6)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="166.4" textLength="12.2" 
clip-path="url(#breeze-release-management-line-6)">-</text><text 
class="breeze-release-management-r4" x="36.6" y="166.4" textLength="61" 
clip-path="url(#breeze-release-management-line-6)">-help</text><text 
class="breeze-release-management-r6" x="122" y="166.4" textLeng [...]
 </text><text class="breeze-release-management-r5" x="0" y="190.8" 
textLength="1464" 
clip-path="url(#breeze-release-management-line-7)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-r2" x="1464" y="190.8" textLength="12.2" 
clip-path="url(#breeze-release-management-line-7)">
-</text><text class="breeze-release-management-r5" x="0" y="215.2" 
textLength="24.4" 
clip-path="url(#breeze-release-management-line-8)">╭─</text><text 
class="breeze-release-management-r5" x="24.4" y="215.2" textLength="244" 
clip-path="url(#breeze-release-management-line-8)">&#160;Release&#160;management&#160;</text><text
 class="breeze-release-management-r5" x="268.4" y="215.2" textLength="1171.2" 
clip-path="url(#breeze-release-management-line-8)">──────────────────────────────────────────
 [...]
-</text><text class="breeze-release-management-r5" x="0" y="239.6" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-9)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="239.6" textLength="402.6" 
clip-path="url(#breeze-release-management-line-9)">verify-provider-packages&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="451.4" y="239.6" textLength="988.2" 
clip-path="url(#breeze-release-management-line-9)" [...]
-</text><text class="breeze-release-management-r5" x="0" y="264" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-10)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="264" textLength="402.6" 
clip-path="url(#breeze-release-management-line-10)">prepare-provider-documentation&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="451.4" y="264" textLength="97.6" 
clip-path="url(#breeze-release-management-line-10)">Prepare&#160;</text><text 
class=" [...]
-</text><text class="breeze-release-management-r5" x="0" y="288.4" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-11)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="288.4" textLength="402.6" 
clip-path="url(#breeze-release-management-line-11)">prepare-provider-packages&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="451.4" y="288.4" textLength="988.2" 
clip-path="url(#breeze-release-management-line-11)">P [...]
-</text><text class="breeze-release-management-r5" x="0" y="312.8" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-12)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="312.8" textLength="402.6" 
clip-path="url(#breeze-release-management-line-12)">prepare-airflow-package&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="451.4" y="312.8" textLength="988.2" 
clip-path="url(#breeze-release-management-l [...]
-</text><text class="breeze-release-management-r5" x="0" y="337.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-13)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="337.2" textLength="402.6" 
clip-path="url(#breeze-release-management-line-13)">release-prod-images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="451.4" y="337.2" textLength="988.2" 
clip-path="url(#breeze- [...]
-</text><text class="breeze-release-management-r5" x="0" y="361.6" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-14)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="361.6" textLength="402.6" 
clip-path="url(#breeze-release-management-line-14)">generate-constraints&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="451.4" y="361.6" textLength="988.2" 
clip-path="url(#breeze-relea [...]
-</text><text class="breeze-release-management-r5" x="0" y="386" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-15)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="386" textLength="402.6" 
clip-path="url(#breeze-release-management-line-15)">publish-docs&#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-release-management-r2" x="451.4" y="386" textLength="9 [...]
-</text><text class="breeze-release-management-r5" x="0" y="410.4" 
textLength="1464" 
clip-path="url(#breeze-release-management-line-16)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-r2" x="1464" y="410.4" textLength="12.2" 
clip-path="url(#breeze-release-management-line-16)">
-</text><text class="breeze-release-management-r5" x="0" y="434.8" 
textLength="24.4" 
clip-path="url(#breeze-release-management-line-17)">╭─</text><text 
class="breeze-release-management-r5" x="24.4" y="434.8" textLength="122" 
clip-path="url(#breeze-release-management-line-17)">&#160;Commands&#160;</text><text
 class="breeze-release-management-r5" x="146.4" y="434.8" textLength="1293.2" 
clip-path="url(#breeze-release-management-line-17)">──────────────────────────────────────────────────────
 [...]
-</text><text class="breeze-release-management-r5" x="0" y="459.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-18)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="459.2" textLength="524.6" 
clip-path="url(#breeze-release-management-line-18)">generate-issue-content-providers&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="573.4" y="459.2" textLength="866.2" 
clip-path="url(#breeze-relea [...]
-</text><text class="breeze-release-management-r5" x="0" y="483.6" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-19)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="483.6" textLength="524.6" 
clip-path="url(#breeze-release-management-line-19)">generate-providers-metadata&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="573.4" y="483.6" textLength="866.2" 
cli [...]
-</text><text class="breeze-release-management-r5" x="0" y="508" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-20)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="508" textLength="524.6" 
clip-path="url(#breeze-release-management-line-20)">install-provider-packages&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="573.4" y="508" textLength="866.2" [...]
-</text><text class="breeze-release-management-r5" x="0" y="532.4" 
textLength="1464" 
clip-path="url(#breeze-release-management-line-21)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-r2" x="1464" y="532.4" textLength="12.2" 
clip-path="url(#breeze-release-management-line-21)">
+</text><text class="breeze-release-management-r5" x="0" y="215.2" 
textLength="24.4" 
clip-path="url(#breeze-release-management-line-8)">╭─</text><text 
class="breeze-release-management-r5" x="24.4" y="215.2" textLength="317.2" 
clip-path="url(#breeze-release-management-line-8)">&#160;Airflow&#160;release&#160;commands&#160;</text><text
 class="breeze-release-management-r5" x="341.6" y="215.2" textLength="1098" 
clip-path="url(#breeze-release-management-line-8)">───────────────────────────────
 [...]
+</text><text class="breeze-release-management-r5" x="0" y="239.6" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-9)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="239.6" textLength="353.8" 
clip-path="url(#breeze-release-management-line-9)">prepare-airflow-package&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="402.6" y="239.6" textLength="1037" 
clip-path="url(#breeze-release-management-line-9)">Prepare&#160;sdist/ [...]
+</text><text class="breeze-release-management-r5" x="0" y="264" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-10)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="264" textLength="353.8" 
clip-path="url(#breeze-release-management-line-10)">create-minor-branch&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="402.6" y="264" textLength="1037" 
clip-path="url(#breeze-release-management-line-10)">Cr [...]
+</text><text class="breeze-release-management-r5" x="0" y="288.4" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-11)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="288.4" textLength="353.8" 
clip-path="url(#breeze-release-management-line-11)">start-rc-process&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="402.6" y="288.4" textLength="73.2" 
clip-path="url(#breeze-release-ma [...]
+</text><text class="breeze-release-management-r5" x="0" y="312.8" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-12)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="312.8" textLength="353.8" 
clip-path="url(#breeze-release-management-line-12)">start-release&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="402.6" y="312.8" textLength="1037" 
clip-path="url(#br [...]
+</text><text class="breeze-release-management-r5" x="0" y="337.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-13)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="337.2" textLength="353.8" 
clip-path="url(#breeze-release-management-line-13)">release-prod-images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="402.6" y="337.2" textLength="1037" 
clip-path="url(#breeze-release-management-line-1 [...]
+</text><text class="breeze-release-management-r5" x="0" y="361.6" 
textLength="1464" 
clip-path="url(#breeze-release-management-line-14)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-r2" x="1464" y="361.6" textLength="12.2" 
clip-path="url(#breeze-release-management-line-14)">
+</text><text class="breeze-release-management-r5" x="0" y="386" 
textLength="24.4" 
clip-path="url(#breeze-release-management-line-15)">╭─</text><text 
class="breeze-release-management-r5" x="24.4" y="386" textLength="341.6" 
clip-path="url(#breeze-release-management-line-15)">&#160;Providers&#160;release&#160;commands&#160;</text><text
 class="breeze-release-management-r5" x="366" y="386" textLength="1073.6" 
clip-path="url(#breeze-release-management-line-15)">────────────────────────────────
 [...]
+</text><text class="breeze-release-management-r5" x="0" y="410.4" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-16)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="410.4" textLength="439.2" 
clip-path="url(#breeze-release-management-line-16)">prepare-provider-documentation&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="488" y="410.4" textLength="97.6" 
clip-path="url(#breeze-release-management-line-16)">Prepare&#16 [...]
+</text><text class="breeze-release-management-r5" x="0" y="434.8" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-17)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="434.8" textLength="439.2" 
clip-path="url(#breeze-release-management-line-17)">prepare-provider-packages&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="488" y="434.8" textLength="951.6" 
clip-path="url(#breeze-release-manage [...]
+</text><text class="breeze-release-management-r5" x="0" y="459.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-18)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="459.2" textLength="439.2" 
clip-path="url(#breeze-release-management-line-18)">install-provider-packages&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="488" y="459.2" textLength="951.6" 
clip-path="url(#breeze-release-manage [...]
+</text><text class="breeze-release-management-r5" x="0" y="483.6" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-19)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="483.6" textLength="439.2" 
clip-path="url(#breeze-release-management-line-19)">verify-provider-packages&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="488" y="483.6" textLength="951.6" 
clip-path="url(#breeze-release-m [...]
+</text><text class="breeze-release-management-r5" x="0" y="508" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-20)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="508" textLength="439.2" 
clip-path="url(#breeze-release-management-line-20)">generate-providers-metadata&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="488" y="508" textLength="951.6" 
clip-path="url(#breeze-release-management-line-20)">G [...]
+</text><text class="breeze-release-management-r5" x="0" y="532.4" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-21)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="532.4" textLength="439.2" 
clip-path="url(#breeze-release-management-line-21)">generate-issue-content-providers&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="488" y="532.4" textLength="951.6" 
clip-path="url(#breeze-release-management-line-21)">Generates&#160;conte [...]
+</text><text class="breeze-release-management-r5" x="0" y="556.8" 
textLength="1464" 
clip-path="url(#breeze-release-management-line-22)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-r2" x="1464" y="556.8" textLength="12.2" 
clip-path="url(#breeze-release-management-line-22)">
+</text><text class="breeze-release-management-r5" x="0" y="581.2" 
textLength="24.4" 
clip-path="url(#breeze-release-management-line-23)">╭─</text><text 
class="breeze-release-management-r5" x="24.4" y="581.2" textLength="292.8" 
clip-path="url(#breeze-release-management-line-23)">&#160;Other&#160;release&#160;commands&#160;</text><text
 class="breeze-release-management-r5" x="317.2" y="581.2" textLength="1122.4" 
clip-path="url(#breeze-release-management-line-23)">────────────────────────────
 [...]
+</text><text class="breeze-release-management-r5" x="0" y="605.6" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-24)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="605.6" textLength="292.8" 
clip-path="url(#breeze-release-management-line-24)">generate-constraints&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="341.6" y="605.6" textLength="1098" 
clip-path="url(#breeze-release-management-line-24)">Generates&#160;pinned&#160;cons
 [...]
+</text><text class="breeze-release-management-r5" x="0" y="630" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-25)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="630" textLength="292.8" 
clip-path="url(#breeze-release-management-line-25)">publish-docs&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r2" x="341.6" y="630" textLength="1098" 
clip-path="url(#breeze-release-management-line-25 [...]
+</text><text class="breeze-release-management-r5" x="0" y="654.4" 
textLength="1464" 
clip-path="url(#breeze-release-management-line-26)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-r2" x="1464" y="654.4" textLength="12.2" 
clip-path="url(#breeze-release-management-line-26)">
 </text>
     </g>
     </g>
diff --git a/images/breeze/output_release-management_create-minor-branch.svg 
b/images/breeze/output_release-management_create-minor-branch.svg
new file mode 100644
index 0000000000..8980e6598a
--- /dev/null
+++ b/images/breeze/output_release-management_create-minor-branch.svg
@@ -0,0 +1,110 @@
+<svg class="rich-terminal" viewBox="0 0 1482 342.79999999999995" 
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-release-management-create-minor-branch-matrix {
+        font-family: Fira Code, monospace;
+        font-size: 20px;
+        line-height: 24.4px;
+        font-variant-east-asian: full-width;
+    }
+
+    .breeze-release-management-create-minor-branch-title {
+        font-size: 18px;
+        font-weight: bold;
+        font-family: arial;
+    }
+
+    .breeze-release-management-create-minor-branch-r1 { fill: 
#c5c8c6;font-weight: bold }
+.breeze-release-management-create-minor-branch-r2 { fill: #c5c8c6 }
+.breeze-release-management-create-minor-branch-r3 { fill: #d0b344;font-weight: 
bold }
+.breeze-release-management-create-minor-branch-r4 { fill: #68a0b3;font-weight: 
bold }
+.breeze-release-management-create-minor-branch-r5 { fill: #868887 }
+.breeze-release-management-create-minor-branch-r6 { fill: #cc555a }
+.breeze-release-management-create-minor-branch-r7 { fill: #8d7b39 }
+.breeze-release-management-create-minor-branch-r8 { fill: #8a4346 }
+.breeze-release-management-create-minor-branch-r9 { fill: #98a84b;font-weight: 
bold }
+    </style>
+
+    <defs>
+    <clipPath id="breeze-release-management-create-minor-branch-clip-terminal">
+      <rect x="0" y="0" width="1463.0" height="291.79999999999995" />
+    </clipPath>
+    <clipPath id="breeze-release-management-create-minor-branch-line-0">
+    <rect x="0" y="1.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-create-minor-branch-line-1">
+    <rect x="0" y="25.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-create-minor-branch-line-2">
+    <rect x="0" y="50.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-create-minor-branch-line-3">
+    <rect x="0" y="74.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-create-minor-branch-line-4">
+    <rect x="0" y="99.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-create-minor-branch-line-5">
+    <rect x="0" y="123.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-create-minor-branch-line-6">
+    <rect x="0" y="147.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-create-minor-branch-line-7">
+    <rect x="0" y="172.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-create-minor-branch-line-8">
+    <rect x="0" y="196.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-create-minor-branch-line-9">
+    <rect x="0" y="221.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-create-minor-branch-line-10">
+    <rect x="0" y="245.5" width="1464" height="24.65"/>
+            </clipPath>
+    </defs>
+
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="340.8" rx="8"/><text 
class="breeze-release-management-create-minor-branch-title" fill="#c5c8c6" 
text-anchor="middle" x="740" 
y="27">Command:&#160;release-management&#160;create-minor-branch</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-release-management-create-minor-branch-clip-terminal)">
+    
+    <g class="breeze-release-management-create-minor-branch-matrix">
+    <text class="breeze-release-management-create-minor-branch-r2" x="1464" 
y="20" textLength="12.2" 
clip-path="url(#breeze-release-management-create-minor-branch-line-0)">
+</text><text class="breeze-release-management-create-minor-branch-r3" x="12.2" 
y="44.4" textLength="85.4" 
clip-path="url(#breeze-release-management-create-minor-branch-line-1)">Usage:&#160;</text><text
 class="breeze-release-management-create-minor-branch-r1" x="97.6" y="44.4" 
textLength="573.4" 
clip-path="url(#breeze-release-management-create-minor-branch-line-1)">breeze&#160;release-management&#160;create-minor-branch&#160;[</text><text
 class="breeze-release-management-create-minor-bran [...]
+</text><text class="breeze-release-management-create-minor-branch-r2" x="1464" 
y="68.8" textLength="12.2" 
clip-path="url(#breeze-release-management-create-minor-branch-line-2)">
+</text><text class="breeze-release-management-create-minor-branch-r2" x="12.2" 
y="93.2" textLength="817.4" 
clip-path="url(#breeze-release-management-create-minor-branch-line-3)">Create&#160;a&#160;new&#160;version&#160;branch&#160;and&#160;update&#160;the&#160;default&#160;branches&#160;in&#160;main</text><text
 class="breeze-release-management-create-minor-branch-r2" x="1464" y="93.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-create-minor-branch-line-3)">
+</text><text class="breeze-release-management-create-minor-branch-r2" x="1464" 
y="117.6" textLength="12.2" 
clip-path="url(#breeze-release-management-create-minor-branch-line-4)">
+</text><text class="breeze-release-management-create-minor-branch-r5" x="0" 
y="142" textLength="24.4" 
clip-path="url(#breeze-release-management-create-minor-branch-line-5)">╭─</text><text
 class="breeze-release-management-create-minor-branch-r5" x="24.4" y="142" 
textLength="329.4" 
clip-path="url(#breeze-release-management-create-minor-branch-line-5)">&#160;Create&#160;minor&#160;branch&#160;flags&#160;</text><text
 class="breeze-release-management-create-minor-branch-r5" x="353.8" y="142"  
[...]
+</text><text class="breeze-release-management-create-minor-branch-r5" x="0" 
y="166.4" textLength="12.2" 
clip-path="url(#breeze-release-management-create-minor-branch-line-6)">│</text><text
 class="breeze-release-management-create-minor-branch-r6" x="24.4" y="166.4" 
textLength="12.2" 
clip-path="url(#breeze-release-management-create-minor-branch-line-6)">*</text><text
 class="breeze-release-management-create-minor-branch-r4" x="61" y="166.4" 
textLength="12.2" clip-path="url(#breeze-release-m [...]
+</text><text class="breeze-release-management-create-minor-branch-r5" x="0" 
y="190.8" textLength="1464" 
clip-path="url(#breeze-release-management-create-minor-branch-line-7)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-create-minor-branch-r2" x="1464" y="190.8" 
textLength="12.2" 
clip-path="url(#breeze-release-management-create-minor-branch-line-7)">
+</text><text class="breeze-release-management-create-minor-branch-r5" x="0" 
y="215.2" textLength="24.4" 
clip-path="url(#breeze-release-management-create-minor-branch-line-8)">╭─</text><text
 class="breeze-release-management-create-minor-branch-r5" x="24.4" y="215.2" 
textLength="195.2" 
clip-path="url(#breeze-release-management-create-minor-branch-line-8)">&#160;Common&#160;options&#160;</text><text
 class="breeze-release-management-create-minor-branch-r5" x="219.6" y="215.2" 
textLength="122 [...]
+</text><text class="breeze-release-management-create-minor-branch-r5" x="0" 
y="239.6" textLength="12.2" 
clip-path="url(#breeze-release-management-create-minor-branch-line-9)">│</text><text
 class="breeze-release-management-create-minor-branch-r4" x="24.4" y="239.6" 
textLength="12.2" 
clip-path="url(#breeze-release-management-create-minor-branch-line-9)">-</text><text
 class="breeze-release-management-create-minor-branch-r4" x="36.6" y="239.6" 
textLength="85.4" clip-path="url(#breeze-release [...]
+</text><text class="breeze-release-management-create-minor-branch-r5" x="0" 
y="264" textLength="12.2" 
clip-path="url(#breeze-release-management-create-minor-branch-line-10)">│</text><text
 class="breeze-release-management-create-minor-branch-r4" x="24.4" y="264" 
textLength="12.2" 
clip-path="url(#breeze-release-management-create-minor-branch-line-10)">-</text><text
 class="breeze-release-management-create-minor-branch-r4" x="36.6" y="264" 
textLength="61" clip-path="url(#breeze-release-manag [...]
+</text><text class="breeze-release-management-create-minor-branch-r5" x="0" 
y="288.4" textLength="1464" 
clip-path="url(#breeze-release-management-create-minor-branch-line-11)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-create-minor-branch-r2" x="1464" y="288.4" 
textLength="12.2" 
clip-path="url(#breeze-release-management-create-minor-branch-line-11)">
+</text>
+    </g>
+    </g>
+</svg>
diff --git a/images/breeze/output_release-management_start-rc-process.svg 
b/images/breeze/output_release-management_start-rc-process.svg
new file mode 100644
index 0000000000..0d70e8a16f
--- /dev/null
+++ b/images/breeze/output_release-management_start-rc-process.svg
@@ -0,0 +1,118 @@
+<svg class="rich-terminal" viewBox="0 0 1482 391.59999999999997" 
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-release-management-start-rc-process-matrix {
+        font-family: Fira Code, monospace;
+        font-size: 20px;
+        line-height: 24.4px;
+        font-variant-east-asian: full-width;
+    }
+
+    .breeze-release-management-start-rc-process-title {
+        font-size: 18px;
+        font-weight: bold;
+        font-family: arial;
+    }
+
+    .breeze-release-management-start-rc-process-r1 { fill: 
#c5c8c6;font-weight: bold }
+.breeze-release-management-start-rc-process-r2 { fill: #c5c8c6 }
+.breeze-release-management-start-rc-process-r3 { fill: #d0b344;font-weight: 
bold }
+.breeze-release-management-start-rc-process-r4 { fill: #68a0b3;font-weight: 
bold }
+.breeze-release-management-start-rc-process-r5 { fill: #868887 }
+.breeze-release-management-start-rc-process-r6 { fill: #cc555a }
+.breeze-release-management-start-rc-process-r7 { fill: #8d7b39 }
+.breeze-release-management-start-rc-process-r8 { fill: #8a4346 }
+.breeze-release-management-start-rc-process-r9 { fill: #98a84b;font-weight: 
bold }
+    </style>
+
+    <defs>
+    <clipPath id="breeze-release-management-start-rc-process-clip-terminal">
+      <rect x="0" y="0" width="1463.0" height="340.59999999999997" />
+    </clipPath>
+    <clipPath id="breeze-release-management-start-rc-process-line-0">
+    <rect x="0" y="1.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-rc-process-line-1">
+    <rect x="0" y="25.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-rc-process-line-2">
+    <rect x="0" y="50.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-rc-process-line-3">
+    <rect x="0" y="74.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-rc-process-line-4">
+    <rect x="0" y="99.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-rc-process-line-5">
+    <rect x="0" y="123.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-rc-process-line-6">
+    <rect x="0" y="147.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-rc-process-line-7">
+    <rect x="0" y="172.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-rc-process-line-8">
+    <rect x="0" y="196.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-rc-process-line-9">
+    <rect x="0" y="221.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-rc-process-line-10">
+    <rect x="0" y="245.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-rc-process-line-11">
+    <rect x="0" y="269.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-rc-process-line-12">
+    <rect x="0" y="294.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="389.6" rx="8"/><text 
class="breeze-release-management-start-rc-process-title" fill="#c5c8c6" 
text-anchor="middle" x="740" 
y="27">Command:&#160;release-management&#160;start-rc-process</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-release-management-start-rc-process-clip-terminal)">
+    
+    <g class="breeze-release-management-start-rc-process-matrix">
+    <text class="breeze-release-management-start-rc-process-r2" x="1464" 
y="20" textLength="12.2" 
clip-path="url(#breeze-release-management-start-rc-process-line-0)">
+</text><text class="breeze-release-management-start-rc-process-r3" x="12.2" 
y="44.4" textLength="85.4" 
clip-path="url(#breeze-release-management-start-rc-process-line-1)">Usage:&#160;</text><text
 class="breeze-release-management-start-rc-process-r1" x="97.6" y="44.4" 
textLength="536.8" 
clip-path="url(#breeze-release-management-start-rc-process-line-1)">breeze&#160;release-management&#160;start-rc-process&#160;[</text><text
 class="breeze-release-management-start-rc-process-r4" x="634.4" y [...]
+</text><text class="breeze-release-management-start-rc-process-r2" x="1464" 
y="68.8" textLength="12.2" 
clip-path="url(#breeze-release-management-start-rc-process-line-2)">
+</text><text class="breeze-release-management-start-rc-process-r2" x="12.2" 
y="93.2" textLength="463.6" 
clip-path="url(#breeze-release-management-start-rc-process-line-3)">Start&#160;the&#160;process&#160;for&#160;releasing&#160;a&#160;new&#160;</text><text
 class="breeze-release-management-start-rc-process-r4" x="475.8" y="93.2" 
textLength="24.4" 
clip-path="url(#breeze-release-management-start-rc-process-line-3)">RC</text><text
 class="breeze-release-management-start-rc-process-r2" x="500 [...]
+</text><text class="breeze-release-management-start-rc-process-r2" x="1464" 
y="117.6" textLength="12.2" 
clip-path="url(#breeze-release-management-start-rc-process-line-4)">
+</text><text class="breeze-release-management-start-rc-process-r5" x="0" 
y="142" textLength="24.4" 
clip-path="url(#breeze-release-management-start-rc-process-line-5)">╭─</text><text
 class="breeze-release-management-start-rc-process-r5" x="24.4" y="142" 
textLength="292.8" 
clip-path="url(#breeze-release-management-start-rc-process-line-5)">&#160;Start&#160;RC&#160;process&#160;flags&#160;</text><text
 class="breeze-release-management-start-rc-process-r5" x="317.2" y="142" 
textLength="1122.4 [...]
+</text><text class="breeze-release-management-start-rc-process-r5" x="0" 
y="166.4" textLength="12.2" 
clip-path="url(#breeze-release-management-start-rc-process-line-6)">│</text><text
 class="breeze-release-management-start-rc-process-r6" x="24.4" y="166.4" 
textLength="12.2" 
clip-path="url(#breeze-release-management-start-rc-process-line-6)">*</text><text
 class="breeze-release-management-start-rc-process-r4" x="61" y="166.4" 
textLength="12.2" clip-path="url(#breeze-release-management-start [...]
+</text><text class="breeze-release-management-start-rc-process-r5" x="0" 
y="190.8" textLength="12.2" 
clip-path="url(#breeze-release-management-start-rc-process-line-7)">│</text><text
 class="breeze-release-management-start-rc-process-r6" x="24.4" y="190.8" 
textLength="12.2" 
clip-path="url(#breeze-release-management-start-rc-process-line-7)">*</text><text
 class="breeze-release-management-start-rc-process-r4" x="61" y="190.8" 
textLength="12.2" clip-path="url(#breeze-release-management-start [...]
+</text><text class="breeze-release-management-start-rc-process-r5" x="0" 
y="215.2" textLength="12.2" 
clip-path="url(#breeze-release-management-start-rc-process-line-8)">│</text><text
 class="breeze-release-management-start-rc-process-r4" x="61" y="215.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-start-rc-process-line-8)">-</text><text
 class="breeze-release-management-start-rc-process-r4" x="73.2" y="215.2" 
textLength="85.4" clip-path="url(#breeze-release-management-start [...]
+</text><text class="breeze-release-management-start-rc-process-r5" x="0" 
y="239.6" textLength="1464" 
clip-path="url(#breeze-release-management-start-rc-process-line-9)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-start-rc-process-r2" x="1464" y="239.6" 
textLength="12.2" 
clip-path="url(#breeze-release-management-start-rc-process-line-9)">
+</text><text class="breeze-release-management-start-rc-process-r5" x="0" 
y="264" textLength="24.4" 
clip-path="url(#breeze-release-management-start-rc-process-line-10)">╭─</text><text
 class="breeze-release-management-start-rc-process-r5" x="24.4" y="264" 
textLength="195.2" 
clip-path="url(#breeze-release-management-start-rc-process-line-10)">&#160;Common&#160;options&#160;</text><text
 class="breeze-release-management-start-rc-process-r5" x="219.6" y="264" 
textLength="1220" clip-path="url(# [...]
+</text><text class="breeze-release-management-start-rc-process-r5" x="0" 
y="288.4" textLength="12.2" 
clip-path="url(#breeze-release-management-start-rc-process-line-11)">│</text><text
 class="breeze-release-management-start-rc-process-r4" x="24.4" y="288.4" 
textLength="12.2" 
clip-path="url(#breeze-release-management-start-rc-process-line-11)">-</text><text
 class="breeze-release-management-start-rc-process-r4" x="36.6" y="288.4" 
textLength="85.4" clip-path="url(#breeze-release-management-s [...]
+</text><text class="breeze-release-management-start-rc-process-r5" x="0" 
y="312.8" textLength="12.2" 
clip-path="url(#breeze-release-management-start-rc-process-line-12)">│</text><text
 class="breeze-release-management-start-rc-process-r4" x="24.4" y="312.8" 
textLength="12.2" 
clip-path="url(#breeze-release-management-start-rc-process-line-12)">-</text><text
 class="breeze-release-management-start-rc-process-r4" x="36.6" y="312.8" 
textLength="61" clip-path="url(#breeze-release-management-sta [...]
+</text><text class="breeze-release-management-start-rc-process-r5" x="0" 
y="337.2" textLength="1464" 
clip-path="url(#breeze-release-management-start-rc-process-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-start-rc-process-r2" x="1464" y="337.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-start-rc-process-line-13)">
+</text>
+    </g>
+    </g>
+</svg>
diff --git a/images/breeze/output_release-management_start-release.svg 
b/images/breeze/output_release-management_start-release.svg
new file mode 100644
index 0000000000..da50f43b4c
--- /dev/null
+++ b/images/breeze/output_release-management_start-release.svg
@@ -0,0 +1,114 @@
+<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>
+
+    @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-release-management-start-release-matrix {
+        font-family: Fira Code, monospace;
+        font-size: 20px;
+        line-height: 24.4px;
+        font-variant-east-asian: full-width;
+    }
+
+    .breeze-release-management-start-release-title {
+        font-size: 18px;
+        font-weight: bold;
+        font-family: arial;
+    }
+
+    .breeze-release-management-start-release-r1 { fill: #c5c8c6;font-weight: 
bold }
+.breeze-release-management-start-release-r2 { fill: #c5c8c6 }
+.breeze-release-management-start-release-r3 { fill: #d0b344;font-weight: bold }
+.breeze-release-management-start-release-r4 { fill: #68a0b3;font-weight: bold }
+.breeze-release-management-start-release-r5 { fill: #868887 }
+.breeze-release-management-start-release-r6 { fill: #cc555a }
+.breeze-release-management-start-release-r7 { fill: #8d7b39 }
+.breeze-release-management-start-release-r8 { fill: #8a4346 }
+.breeze-release-management-start-release-r9 { fill: #98a84b;font-weight: bold }
+    </style>
+
+    <defs>
+    <clipPath id="breeze-release-management-start-release-clip-terminal">
+      <rect x="0" y="0" width="1463.0" height="316.2" />
+    </clipPath>
+    <clipPath id="breeze-release-management-start-release-line-0">
+    <rect x="0" y="1.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-release-line-1">
+    <rect x="0" y="25.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-release-line-2">
+    <rect x="0" y="50.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-release-line-3">
+    <rect x="0" y="74.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-release-line-4">
+    <rect x="0" y="99.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-release-line-5">
+    <rect x="0" y="123.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-release-line-6">
+    <rect x="0" y="147.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-release-line-7">
+    <rect x="0" y="172.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-release-line-8">
+    <rect x="0" y="196.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-release-line-9">
+    <rect x="0" y="221.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-release-line-10">
+    <rect x="0" y="245.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-release-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="365.2" rx="8"/><text 
class="breeze-release-management-start-release-title" fill="#c5c8c6" 
text-anchor="middle" x="740" 
y="27">Command:&#160;release-management&#160;start-release</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-release-management-start-release-clip-terminal)">
+    
+    <g class="breeze-release-management-start-release-matrix">
+    <text class="breeze-release-management-start-release-r2" x="1464" y="20" 
textLength="12.2" 
clip-path="url(#breeze-release-management-start-release-line-0)">
+</text><text class="breeze-release-management-start-release-r3" x="12.2" 
y="44.4" textLength="85.4" 
clip-path="url(#breeze-release-management-start-release-line-1)">Usage:&#160;</text><text
 class="breeze-release-management-start-release-r1" x="97.6" y="44.4" 
textLength="500.2" 
clip-path="url(#breeze-release-management-start-release-line-1)">breeze&#160;release-management&#160;start-release&#160;[</text><text
 class="breeze-release-management-start-release-r4" x="597.8" y="44.4" 
textLength [...]
+</text><text class="breeze-release-management-start-release-r2" x="1464" 
y="68.8" textLength="12.2" 
clip-path="url(#breeze-release-management-start-release-line-2)">
+</text><text class="breeze-release-management-start-release-r2" x="12.2" 
y="93.2" textLength="1305.4" 
clip-path="url(#breeze-release-management-start-release-line-3)">Start&#160;the&#160;process&#160;of&#160;releasing&#160;an&#160;Airflow&#160;version.&#160;This&#160;command&#160;will&#160;guide&#160;you&#160;through&#160;the&#160;release&#160;process.</text><text
 class="breeze-release-management-start-release-r2" x="1464" y="93.2" 
textLength="12.2" clip-path="url(#breeze-release-managem [...]
+</text><text class="breeze-release-management-start-release-r2" x="1464" 
y="117.6" textLength="12.2" 
clip-path="url(#breeze-release-management-start-release-line-4)">
+</text><text class="breeze-release-management-start-release-r5" x="0" y="142" 
textLength="24.4" 
clip-path="url(#breeze-release-management-start-release-line-5)">╭─</text><text 
class="breeze-release-management-start-release-r5" x="24.4" y="142" 
textLength="256.2" 
clip-path="url(#breeze-release-management-start-release-line-5)">&#160;Start&#160;release&#160;flags&#160;</text><text
 class="breeze-release-management-start-release-r5" x="280.6" y="142" 
textLength="1159" clip-path="url(#breeze- [...]
+</text><text class="breeze-release-management-start-release-r5" x="0" 
y="166.4" textLength="12.2" 
clip-path="url(#breeze-release-management-start-release-line-6)">│</text><text 
class="breeze-release-management-start-release-r6" x="24.4" y="166.4" 
textLength="12.2" 
clip-path="url(#breeze-release-management-start-release-line-6)">*</text><text 
class="breeze-release-management-start-release-r4" x="61" y="166.4" 
textLength="12.2" 
clip-path="url(#breeze-release-management-start-release-line-6 [...]
+</text><text class="breeze-release-management-start-release-r5" x="0" 
y="190.8" textLength="12.2" 
clip-path="url(#breeze-release-management-start-release-line-7)">│</text><text 
class="breeze-release-management-start-release-r6" x="24.4" y="190.8" 
textLength="12.2" 
clip-path="url(#breeze-release-management-start-release-line-7)">*</text><text 
class="breeze-release-management-start-release-r4" x="61" y="190.8" 
textLength="12.2" 
clip-path="url(#breeze-release-management-start-release-line-7 [...]
+</text><text class="breeze-release-management-start-release-r5" x="0" 
y="215.2" textLength="1464" 
clip-path="url(#breeze-release-management-start-release-line-8)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-start-release-r2" x="1464" y="215.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-start-release-line-8)">
+</text><text class="breeze-release-management-start-release-r5" x="0" 
y="239.6" textLength="24.4" 
clip-path="url(#breeze-release-management-start-release-line-9)">╭─</text><text 
class="breeze-release-management-start-release-r5" x="24.4" y="239.6" 
textLength="195.2" 
clip-path="url(#breeze-release-management-start-release-line-9)">&#160;Common&#160;options&#160;</text><text
 class="breeze-release-management-start-release-r5" x="219.6" y="239.6" 
textLength="1220" clip-path="url(#breeze-rele [...]
+</text><text class="breeze-release-management-start-release-r5" x="0" y="264" 
textLength="12.2" 
clip-path="url(#breeze-release-management-start-release-line-10)">│</text><text 
class="breeze-release-management-start-release-r4" x="24.4" y="264" 
textLength="12.2" 
clip-path="url(#breeze-release-management-start-release-line-10)">-</text><text 
class="breeze-release-management-start-release-r4" x="36.6" y="264" 
textLength="85.4" 
clip-path="url(#breeze-release-management-start-release-line-10) [...]
+</text><text class="breeze-release-management-start-release-r5" x="0" 
y="288.4" textLength="12.2" 
clip-path="url(#breeze-release-management-start-release-line-11)">│</text><text 
class="breeze-release-management-start-release-r4" x="24.4" y="288.4" 
textLength="12.2" 
clip-path="url(#breeze-release-management-start-release-line-11)">-</text><text 
class="breeze-release-management-start-release-r4" x="36.6" y="288.4" 
textLength="61" clip-path="url(#breeze-release-management-start-release-line 
[...]
+</text><text class="breeze-release-management-start-release-r5" x="0" 
y="312.8" textLength="1464" 
clip-path="url(#breeze-release-management-start-release-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-start-release-r2" x="1464" y="312.8" 
textLength="12.2" 
clip-path="url(#breeze-release-management-start-release-line-12)">
+</text>
+    </g>
+    </g>
+</svg>

Reply via email to