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 8b1460a7995 feat(breeze): Add distribution name support to tarball 
command (#54798)
8b1460a7995 is described below

commit 8b1460a79950cdab704129dce15ce8e5c0a4258e
Author: Bugra Ozturk <[email protected]>
AuthorDate: Sun Aug 31 10:51:01 2025 +0200

    feat(breeze): Add distribution name support to tarball command (#54798)
    
    * feat(breeze): Add airflowctl tarball command
    
    Include airflowctl and TaskSDK release commands into help
    
    * fix(breeze): Output Path to Root out/
    
    * feat(breeze): Enhance tarball creation to support distribution names
    
    * feat(breeze): Add support for creating source tarball releases for 
providers and integrate into release management commands
    
    * Use Literal and Enum to regulate parameter types
---
 dev/breeze/doc/09_release_management_tasks.rst     |  27 ++++++
 .../doc/images/output_release-management.svg       |  54 +++++++----
 .../doc/images/output_release-management.txt       |   2 +-
 ...anagement_prepare-airflow-ctl-distributions.svg |  26 ++---
 ...anagement_prepare-airflow-ctl-distributions.txt |   2 +-
 ...se-management_prepare-airflow-distributions.svg |  22 +++--
 ...se-management_prepare-airflow-distributions.txt |   2 +-
 ..._release-management_prepare-airflow-tarball.svg |  40 +++++---
 ..._release-management_prepare-airflow-tarball.txt |   2 +-
 ...e-management_prepare-provider-distributions.svg |  22 +++--
 ...e-management_prepare-provider-distributions.txt |   2 +-
 ...e-management_prepare-task-sdk-distributions.svg |  22 +++--
 ...e-management_prepare-task-sdk-distributions.txt |   2 +-
 .../commands/release_candidate_command.py          | 106 +++++++++++++++++----
 .../commands/release_management_commands.py        |  44 +++++++++
 .../commands/release_management_commands_config.py |   8 +-
 .../src/airflow_breeze/configure_rich_click.py     |   4 +
 dev/breeze/src/airflow_breeze/global_constants.py  |  12 ++-
 18 files changed, 294 insertions(+), 105 deletions(-)

diff --git a/dev/breeze/doc/09_release_management_tasks.rst 
b/dev/breeze/doc/09_release_management_tasks.rst
index eaac22aa475..96cd38fd74c 100644
--- a/dev/breeze/doc/09_release_management_tasks.rst
+++ b/dev/breeze/doc/09_release_management_tasks.rst
@@ -54,6 +54,10 @@ default is to build ``both`` type of distributions ``sdist`` 
and ``wheel``.
 
      breeze release-management prepare-airflow-distributions 
--distribution-format=wheel
 
+If you pass ``--tag`` fag, the distribution will create a source tarball 
release along with sdist.
+``--tag`` flag corresponds to actual tag in git.
+
+
 .. image:: ./images/output_release-management_prepare-airflow-distributions.svg
   :target: 
https://raw.githubusercontent.com/apache/airflow/main/dev/breeze/doc/images/output_release-management_prepare-airflow-distributions.svg
   :width: 100%
@@ -78,6 +82,13 @@ tarball for.
 
      breeze release-management prepare-airflow-tarball --version 2.8.0rc1
 
+You can also specify distribution name which distribution of Airflow you are 
preparing the tarball for.
+By default it is "airflow".
+
+.. code-block:: bash
+
+     breeze release-management prepare-airflow-tarball --version 2.8.0rc1 
--distribution-name airflowctl
+
 .. image:: ./images/output_release-management_prepare-airflow-tarball.svg
   :target: 
https://raw.githubusercontent.com/apache/airflow/main/dev/breeze/doc/images/output_release-management_prepare-airflow-tarball.svg
   :width: 100%
@@ -380,6 +391,12 @@ before running, so you should run it before generating 
Airflow package below as
 
 The below example builds providers in the wheel format.
 
+.. code-block:: bash
+
+     breeze release-management prepare-provider-distributions 
--distribution-format wheel
+
+The below example builds providers in both wheel and tar.gz (sdist) formats.
+
 .. code-block:: bash
 
      breeze release-management prepare-provider-distributions
@@ -398,6 +415,10 @@ You can see all providers available by running this 
command:
 
      breeze release-management prepare-provider-distributions --help
 
+If you pass ``--tag`` fag, the distribution will create a source tarball 
release along with sdist.
+``--tag`` flag corresponds to actual tag in git.
+
+
 .. image:: 
./images/output_release-management_prepare-provider-distributions.svg
   :target: 
https://raw.githubusercontent.com/apache/airflow/main/dev/breeze/doc/images/output_release-management_prepare-provider-distributions.svg
   :width: 100%
@@ -759,6 +780,9 @@ default is to build ``both`` type of distributions 
``sdist`` and ``wheel``.
 
      breeze release-management prepare-task-sdk-distributions 
--distribution-format=wheel
 
+If you pass ``--tag`` fag, the distribution will create a source tarball 
release along with sdist.
+``--tag`` flag corresponds to actual tag in git.
+
 .. image:: 
./images/output_release-management_prepare-task-sdk-distributions.svg
   :target: 
https://raw.githubusercontent.com/apache/airflow/main/dev/breeze/doc/images/output_release-management_prepare-task-sdk-distributions.svg
   :width: 100%
@@ -783,6 +807,9 @@ default is to build ``both`` type of distributions 
``sdist`` and ``wheel``.
 
      breeze release-management prepare-airflow-ctl-distributions 
--distribution-format=wheel
 
+If you pass ``--tag`` fag, the distribution will create a source tarball 
release along with sdist.
+``--tag`` flag corresponds to actual tag in git.
+
 .. image:: 
./images/output_release-management_prepare-airflow-ctl-distributions.svg
   :target: 
https://raw.githubusercontent.com/apache/airflow/main/dev/breeze/doc/images/output_release-management_prepare-airflow-ctl-distributions.svg
   :width: 100%
diff --git a/dev/breeze/doc/images/output_release-management.svg 
b/dev/breeze/doc/images/output_release-management.svg
index a4988b0442e..e56fab233a6 100644
--- a/dev/breeze/doc/images/output_release-management.svg
+++ b/dev/breeze/doc/images/output_release-management.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1196.8" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 1270.0" 
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="1145.8" />
+      <rect x="0" y="0" width="1463.0" height="1219.0" />
     </clipPath>
     <clipPath id="breeze-release-management-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -182,17 +182,26 @@
 <clipPath id="breeze-release-management-line-45">
     <rect x="0" y="1099.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-release-management-line-46">
+    <rect x="0" y="1123.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-line-47">
+    <rect x="0" y="1148.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-line-48">
+    <rect x="0" y="1172.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="1194.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="1268" 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"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
-
+        
     <g transform="translate(9, 41)" 
clip-path="url(#breeze-release-management-clip-terminal)">
-
+    
     <g class="breeze-release-management-matrix">
     <text class="breeze-release-management-r1" x="1464" y="20" 
textLength="12.2" clip-path="url(#breeze-release-management-line-0)">
 </text><text class="breeze-release-management-r2" x="12.2" y="44.4" 
textLength="73.2" 
clip-path="url(#breeze-release-management-line-1)">Usage:</text><text 
class="breeze-release-management-r3" x="97.6" y="44.4" textLength="305" 
clip-path="url(#breeze-release-management-line-1)">breeze&#160;release-management</text><text
 class="breeze-release-management-r1" x="414.8" y="44.4" textLength="12.2" 
clip-path="url(#breeze-release-management-line-1)">[</text><text 
class="breeze-release-managemen [...]
@@ -205,7 +214,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="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="414.8" 
clip-path="url(#breeze-release-management-line-9)">create-minor-branch&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="463.6" y="239.6" textLength="976" 
clip-path="url(#breez [...]
 </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="414.8" 
clip-path="url(#breeze-release-management-line-10)">prepare-airflow-distributions&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="463.6" y="264" textLength="976" 
clip-path="url(#breeze-release-management-line-10)">Prepare&#160;sdist/whl& 
[...]
-</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="414.8" 
clip-path="url(#breeze-release-management-line-11)">prepare-airflow-tarball&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="463.6" y="288.4" textLength="976" 
clip-path="url(#breeze-release-manageme [...]
+</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="414.8" 
clip-path="url(#breeze-release-management-line-11)">prepare-airflow-tarball&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="463.6" y="288.4" textLength="976" 
clip-path="url(#breeze-release-manageme [...]
 </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="414.8" 
clip-path="url(#breeze-release-management-line-12)">start-rc-process&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="463.6" y="312.8" textLength="976" clip 
[...]
 </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="414.8" 
clip-path="url(#breeze-release-management-line-13)">start-release&#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-r1" x="463.6" y="337.2" textLe [...]
 </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="414.8" 
clip-path="url(#breeze-release-management-line-14)">release-prod-images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="463.6" y="361.6" textLength="976" 
clip-path="url(#bre [...]
@@ -226,21 +235,24 @@
 </text><text class="breeze-release-management-r5" x="0" y="727.6" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-29)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="727.6" textLength="439.2" 
clip-path="url(#breeze-release-management-line-29)">clean-old-provider-artifacts&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="488" y="727.6" textLength="951.6" 
clip-path="url(#breeze-release-management-line-29)"> [...]
 </text><text class="breeze-release-management-r5" x="0" y="752" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-30)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="752" textLength="439.2" 
clip-path="url(#breeze-release-management-line-30)">tag-providers&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="488" y="752" te [...]
 </text><text class="breeze-release-management-r5" x="0" y="776.4" 
textLength="1464" 
clip-path="url(#breeze-release-management-line-31)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-r1" x="1464" y="776.4" textLength="12.2" 
clip-path="url(#breeze-release-management-line-31)">
-</text><text class="breeze-release-management-r5" x="0" y="800.8" 
textLength="24.4" 
clip-path="url(#breeze-release-management-line-32)">╭─</text><text 
class="breeze-release-management-r5" x="24.4" y="800.8" textLength="292.8" 
clip-path="url(#breeze-release-management-line-32)">&#160;Other&#160;release&#160;commands&#160;</text><text
 class="breeze-release-management-r5" x="317.2" y="800.8" textLength="1122.4" 
clip-path="url(#breeze-release-management-line-32)">────────────────────────────
 [...]
-</text><text class="breeze-release-management-r5" x="0" y="825.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-33)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="825.2" textLength="292.8" 
clip-path="url(#breeze-release-management-line-33)">add-back-references&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="341.6" y="825.2" textLength="1098" 
clip-path="url(#breeze-release-management-line-33)">Command&#160;to&#160;add&# 
[...]
-</text><text class="breeze-release-management-r5" x="0" y="849.6" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-34)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="849.6" textLength="292.8" 
clip-path="url(#breeze-release-management-line-34)">prepare-python-client&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="341.6" y="849.6" textLength="1098" 
clip-path="url(#breeze-release-management-line-34)">Prepares&#160;python&#160;client&#16
 [...]
-</text><text class="breeze-release-management-r5" x="0" y="874" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-35)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="874" textLength="292.8" 
clip-path="url(#breeze-release-management-line-35)">publish-docs&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="341.6" y="874" textLength="1098" 
clip-path="url(#breeze-release-management-line-35 [...]
-</text><text class="breeze-release-management-r5" x="0" y="898.4" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-36)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="898.4" textLength="292.8" 
clip-path="url(#breeze-release-management-line-36)">generate-constraints&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="341.6" y="898.4" textLength="1098" 
clip-path="url(#breeze-release-management-line-36)">Generates&#160;pinned&#160;cons
 [...]
-</text><text class="breeze-release-management-r5" x="0" y="922.8" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-37)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="922.8" textLength="292.8" 
clip-path="url(#breeze-release-management-line-37)">update-constraints&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="341.6" y="922.8" textLength="1098" 
clip-path="url(#breeze-release-management-line-37)">Update&#160;released& [...]
-</text><text class="breeze-release-management-r5" x="0" y="947.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-38)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="947.2" textLength="292.8" 
clip-path="url(#breeze-release-management-line-38)">publish-docs-to-s3&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="341.6" y="947.2" textLength="1098" 
clip-path="url(#breeze-release-management-line-38)">Publishes&#160;docs&# [...]
-</text><text class="breeze-release-management-r5" x="0" y="971.6" 
textLength="1464" 
clip-path="url(#breeze-release-management-line-39)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-r1" x="1464" y="971.6" textLength="12.2" 
clip-path="url(#breeze-release-management-line-39)">
-</text><text class="breeze-release-management-r5" x="0" y="996" 
textLength="24.4" 
clip-path="url(#breeze-release-management-line-40)">╭─</text><text 
class="breeze-release-management-r5" x="24.4" y="996" textLength="122" 
clip-path="url(#breeze-release-management-line-40)">&#160;Commands&#160;</text><text
 class="breeze-release-management-r5" x="146.4" y="996" textLength="1293.2" 
clip-path="url(#breeze-release-management-line-40)">────────────────────────────────────────────────────────────
 [...]
-</text><text class="breeze-release-management-r5" x="0" y="1020.4" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-41)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="1020.4" textLength="402.6" 
clip-path="url(#breeze-release-management-line-41)">constraints-version-check&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="451.4" y="1020.4" textLength="988.2" 
clip-path="url(#breeze-release-management-line-41) [...]
-</text><text class="breeze-release-management-r5" x="0" y="1044.8" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-42)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="1044.8" textLength="402.6" 
clip-path="url(#breeze-release-management-line-42)">merge-prod-images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="451.4" y="1044.8" textLength="988.2" 
clip-path= [...]
-</text><text class="breeze-release-management-r5" x="0" y="1069.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-43)">│</text><text 
class="breeze-release-management-r1" x="451.4" y="1069.2" textLength="988.2" 
clip-path="url(#breeze-release-management-line-43)">permissions).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
-</text><text class="breeze-release-management-r5" x="0" y="1093.6" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-44)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="1093.6" textLength="402.6" 
clip-path="url(#breeze-release-management-line-44)">prepare-airflow-ctl-distributions</text><text
 class="breeze-release-management-r1" x="451.4" y="1093.6" textLength="988.2" 
clip-path="url(#breeze-release-management-line-44)">Prepare&#160;sdist/whl&#160;distributi
 [...]
-</text><text class="breeze-release-management-r5" x="0" y="1118" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-45)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="1118" textLength="402.6" 
clip-path="url(#breeze-release-management-line-45)">prepare-task-sdk-distributions&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="451.4" y="1118" textLength="988.2" 
clip-path="url(#breeze-release-management-line-45)">Prepare&#160;sdist/whl&#160;d
 [...]
-</text><text class="breeze-release-management-r5" x="0" y="1142.4" 
textLength="1464" 
clip-path="url(#breeze-release-management-line-46)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-r1" x="1464" y="1142.4" textLength="12.2" 
clip-path="url(#breeze-release-management-line-46)">
+</text><text class="breeze-release-management-r5" x="0" y="800.8" 
textLength="24.4" 
clip-path="url(#breeze-release-management-line-32)">╭─</text><text 
class="breeze-release-management-r5" x="24.4" y="800.8" textLength="427" 
clip-path="url(#breeze-release-management-line-32)">&#160;Airflow&#160;Task&#160;SDK&#160;release&#160;commands&#160;</text><text
 class="breeze-release-management-r5" x="451.4" y="800.8" textLength="988.2" 
clip-path="url(#breeze-release-management-line-32)">────────── [...]
+</text><text class="breeze-release-management-r5" x="0" y="825.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-33)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="825.2" textLength="512.4" 
clip-path="url(#breeze-release-management-line-33)">prepare-task-sdk-distributions&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="561.2" y="825.2" textLength="878.4" 
clip-path="url(#breeze-r [...]
+</text><text class="breeze-release-management-r5" x="0" y="849.6" 
textLength="1464" 
clip-path="url(#breeze-release-management-line-34)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-r1" x="1464" y="849.6" textLength="12.2" 
clip-path="url(#breeze-release-management-line-34)">
+</text><text class="breeze-release-management-r5" x="0" y="874" 
textLength="24.4" 
clip-path="url(#breeze-release-management-line-35)">╭─</text><text 
class="breeze-release-management-r5" x="24.4" y="874" textLength="353.8" 
clip-path="url(#breeze-release-management-line-35)">&#160;airflowctl&#160;release&#160;commands&#160;</text><text
 class="breeze-release-management-r5" x="378.2" y="874" textLength="1061.4" 
clip-path="url(#breeze-release-management-line-35)">─────────────────────────────
 [...]
+</text><text class="breeze-release-management-r5" x="0" y="898.4" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-36)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="898.4" textLength="585.6" 
clip-path="url(#breeze-release-management-line-36)">prepare-airflow-ctl-distributions&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="634.4" y="898.4" textLength="805.2" 
cli [...]
+</text><text class="breeze-release-management-r5" x="0" y="922.8" 
textLength="1464" 
clip-path="url(#breeze-release-management-line-37)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-r1" x="1464" y="922.8" textLength="12.2" 
clip-path="url(#breeze-release-management-line-37)">
+</text><text class="breeze-release-management-r5" x="0" y="947.2" 
textLength="24.4" 
clip-path="url(#breeze-release-management-line-38)">╭─</text><text 
class="breeze-release-management-r5" x="24.4" y="947.2" textLength="292.8" 
clip-path="url(#breeze-release-management-line-38)">&#160;Other&#160;release&#160;commands&#160;</text><text
 class="breeze-release-management-r5" x="317.2" y="947.2" textLength="1122.4" 
clip-path="url(#breeze-release-management-line-38)">────────────────────────────
 [...]
+</text><text class="breeze-release-management-r5" x="0" y="971.6" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-39)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="971.6" textLength="292.8" 
clip-path="url(#breeze-release-management-line-39)">add-back-references&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="341.6" y="971.6" textLength="1098" 
clip-path="url(#breeze-release-management-line-39)">Command&#160;to&#160;add&# 
[...]
+</text><text class="breeze-release-management-r5" x="0" y="996" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-40)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="996" textLength="292.8" 
clip-path="url(#breeze-release-management-line-40)">prepare-python-client&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="341.6" y="996" textLength="1098" 
clip-path="url(#breeze-release-management-line-40)">Prepares&#160;python&#160;client&#160;pack
 [...]
+</text><text class="breeze-release-management-r5" x="0" y="1020.4" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-41)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="1020.4" textLength="292.8" 
clip-path="url(#breeze-release-management-line-41)">publish-docs&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="341.6" y="1020.4" textLength="1098" 
clip-path="url(#breeze-release-managemen [...]
+</text><text class="breeze-release-management-r5" x="0" y="1044.8" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-42)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="1044.8" textLength="292.8" 
clip-path="url(#breeze-release-management-line-42)">generate-constraints&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="341.6" y="1044.8" textLength="1098" 
clip-path="url(#breeze-release-management-line-42)">Generates&#160;pinned&#160;c
 [...]
+</text><text class="breeze-release-management-r5" x="0" y="1069.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-43)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="1069.2" textLength="292.8" 
clip-path="url(#breeze-release-management-line-43)">update-constraints&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="341.6" y="1069.2" textLength="1098" 
clip-path="url(#breeze-release-management-line-43)">Update&#160;releas [...]
+</text><text class="breeze-release-management-r5" x="0" y="1093.6" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-44)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="1093.6" textLength="292.8" 
clip-path="url(#breeze-release-management-line-44)">publish-docs-to-s3&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="341.6" y="1093.6" textLength="1098" 
clip-path="url(#breeze-release-management-line-44)">Publishes&#160;doc [...]
+</text><text class="breeze-release-management-r5" x="0" y="1118" 
textLength="1464" 
clip-path="url(#breeze-release-management-line-45)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-r1" x="1464" y="1118" textLength="12.2" 
clip-path="url(#breeze-release-management-line-45)">
+</text><text class="breeze-release-management-r5" x="0" y="1142.4" 
textLength="24.4" 
clip-path="url(#breeze-release-management-line-46)">╭─</text><text 
class="breeze-release-management-r5" x="24.4" y="1142.4" textLength="122" 
clip-path="url(#breeze-release-management-line-46)">&#160;Commands&#160;</text><text
 class="breeze-release-management-r5" x="146.4" y="1142.4" textLength="1293.2" 
clip-path="url(#breeze-release-management-line-46)">───────────────────────────────────────────────────
 [...]
+</text><text class="breeze-release-management-r5" x="0" y="1166.8" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-47)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="1166.8" textLength="305" 
clip-path="url(#breeze-release-management-line-47)">constraints-version-check</text><text
 class="breeze-release-management-r1" x="353.8" y="1166.8" textLength="1085.8" 
clip-path="url(#breeze-release-management-line-47)">Check&#160;constraints&#160;against&#160;releas
 [...]
+</text><text class="breeze-release-management-r5" x="0" y="1191.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-line-48)">│</text><text 
class="breeze-release-management-r4" x="24.4" y="1191.2" textLength="305" 
clip-path="url(#breeze-release-management-line-48)">merge-prod-images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-release-management-r1" x="353.8" y="1191.2" textLength="1085.8" 
clip-path="url(#breeze-release-management-line-48)">Merge&# [...]
+</text><text class="breeze-release-management-r5" x="0" y="1215.6" 
textLength="1464" 
clip-path="url(#breeze-release-management-line-49)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-r1" x="1464" y="1215.6" textLength="12.2" 
clip-path="url(#breeze-release-management-line-49)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_release-management.txt 
b/dev/breeze/doc/images/output_release-management.txt
index 6914785379b..807d6884b2b 100644
--- a/dev/breeze/doc/images/output_release-management.txt
+++ b/dev/breeze/doc/images/output_release-management.txt
@@ -1 +1 @@
-66c12fef8217c406f79e5a56aa6bf2f3
+2387270c0e14eb8ba7c5ff8c67b970aa
diff --git 
a/dev/breeze/doc/images/output_release-management_prepare-airflow-ctl-distributions.svg
 
b/dev/breeze/doc/images/output_release-management_prepare-airflow-ctl-distributions.svg
index 5730f621f0e..6fe8747b652 100644
--- 
a/dev/breeze/doc/images/output_release-management_prepare-airflow-ctl-distributions.svg
+++ 
b/dev/breeze/doc/images/output_release-management_prepare-airflow-ctl-distributions.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 464.79999999999995" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 489.2" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath 
id="breeze-release-management-prepare-airflow-ctl-distributions-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="413.79999999999995" />
+      <rect x="0" y="0" width="1463.0" height="438.2" />
     </clipPath>
     <clipPath 
id="breeze-release-management-prepare-airflow-ctl-distributions-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -93,17 +93,20 @@
 <clipPath 
id="breeze-release-management-prepare-airflow-ctl-distributions-line-15">
     <rect x="0" y="367.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath 
id="breeze-release-management-prepare-airflow-ctl-distributions-line-16">
+    <rect x="0" y="391.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="462.8" rx="8"/><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-title" 
fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;release-management&#160;prepare-airflow-ctl-distributions</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="487.2" rx="8"/><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-title" 
fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;release-management&#160;prepare-airflow-ctl-distributions</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-prepare-airflow-ctl-distributions-clip-terminal)">
-
+    
     <g 
class="breeze-release-management-prepare-airflow-ctl-distributions-matrix">
     <text 
class="breeze-release-management-prepare-airflow-ctl-distributions-r1" x="1464" 
y="20" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-0)">
 </text><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-r2" x="12.2" 
y="44.4" textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-1)">Usage:</text><text
 class="breeze-release-management-prepare-airflow-ctl-distributions-r3" 
x="97.6" y="44.4" textLength="719.8" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-1)">breeze&#160;release-management&#160;prepare-airflow-ctl-distributions</text
 [...]
@@ -116,12 +119,13 @@
 </text><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-r5" x="0" 
y="215.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-8)">│</text><text
 class="breeze-release-management-prepare-airflow-ctl-distributions-r1" 
x="329.4" y="215.2" textLength="1110.2" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-8)">etc.).&#160;Note&#160;the&#160;`.`&#160;is&#160;need&#160;in&#160;`.dev0`&#160;
 [...]
 </text><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-r5" x="0" 
y="239.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-9)">│</text><text
 class="breeze-release-management-prepare-airflow-ctl-distributions-r6" 
x="329.4" y="239.6" textLength="1110.2" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-9)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
 </text><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-r5" x="0" 
y="264" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-10)">│</text><text
 class="breeze-release-management-prepare-airflow-ctl-distributions-r4" 
x="24.4" y="264" textLength="207.4" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-10)">--use-local-hatch</text><text
 class="breeze-release-management-prepare-airflow-ctl- [...]
-</text><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-r5" x="0" 
y="288.4" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-11)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-airflow-ctl-distributions-r1" 
x="1464" y="288.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepa [...]
-</text><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-r5" x="0" 
y="312.8" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-12)">╭─</text><text
 class="breeze-release-management-prepare-airflow-ctl-distributions-r5" 
x="24.4" y="312.8" textLength="195.2" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-12)">&#160;Common&#160;options&#160;</text><text
 class="breeze-release-management-p [...]
-</text><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-r5" x="0" 
y="337.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-13)">│</text><text
 class="breeze-release-management-prepare-airflow-ctl-distributions-r4" 
x="24.4" y="337.2" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-13)">--verbose</text><text
 class="breeze-release-management-prepare-airflow-ctl-dist [...]
-</text><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-r5" x="0" 
y="361.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-14)">│</text><text
 class="breeze-release-management-prepare-airflow-ctl-distributions-r4" 
x="24.4" y="361.6" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-14)">--dry-run</text><text
 class="breeze-release-management-prepare-airflow-ctl-dist [...]
-</text><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-r5" x="0" 
y="386" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-15)">│</text><text
 class="breeze-release-management-prepare-airflow-ctl-distributions-r4" 
x="24.4" y="386" textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-15)">--help</text><text
 class="breeze-release-management-prepare-airflow-ctl-distribution [...]
-</text><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-r5" x="0" 
y="410.4" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-16)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-airflow-ctl-distributions-r1" 
x="1464" y="410.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepa [...]
+</text><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-r5" x="0" 
y="288.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-11)">│</text><text
 class="breeze-release-management-prepare-airflow-ctl-distributions-r4" 
x="24.4" y="288.4" textLength="61" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-11)">--tag</text><text
 class="breeze-release-management-prepare-airflow-ctl-distributio [...]
+</text><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-r5" x="0" 
y="312.8" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-airflow-ctl-distributions-r1" 
x="1464" y="312.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepa [...]
+</text><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-r5" x="0" 
y="337.2" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-13)">╭─</text><text
 class="breeze-release-management-prepare-airflow-ctl-distributions-r5" 
x="24.4" y="337.2" textLength="195.2" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-13)">&#160;Common&#160;options&#160;</text><text
 class="breeze-release-management-p [...]
+</text><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-r5" x="0" 
y="361.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-14)">│</text><text
 class="breeze-release-management-prepare-airflow-ctl-distributions-r4" 
x="24.4" y="361.6" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-14)">--verbose</text><text
 class="breeze-release-management-prepare-airflow-ctl-dist [...]
+</text><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-r5" x="0" 
y="386" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-15)">│</text><text
 class="breeze-release-management-prepare-airflow-ctl-distributions-r4" 
x="24.4" y="386" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-15)">--dry-run</text><text
 class="breeze-release-management-prepare-airflow-ctl-distribu [...]
+</text><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-r5" x="0" 
y="410.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-16)">│</text><text
 class="breeze-release-management-prepare-airflow-ctl-distributions-r4" 
x="24.4" y="410.4" textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-16)">--help</text><text
 class="breeze-release-management-prepare-airflow-ctl-distribu [...]
+</text><text 
class="breeze-release-management-prepare-airflow-ctl-distributions-r5" x="0" 
y="434.8" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-airflow-ctl-distributions-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-airflow-ctl-distributions-r1" 
x="1464" y="434.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepa [...]
 </text>
     </g>
     </g>
diff --git 
a/dev/breeze/doc/images/output_release-management_prepare-airflow-ctl-distributions.txt
 
b/dev/breeze/doc/images/output_release-management_prepare-airflow-ctl-distributions.txt
index 29d4041a01a..c43cf284be8 100644
--- 
a/dev/breeze/doc/images/output_release-management_prepare-airflow-ctl-distributions.txt
+++ 
b/dev/breeze/doc/images/output_release-management_prepare-airflow-ctl-distributions.txt
@@ -1 +1 @@
-5a59e6772b7a51ca98f8e8180398bdf0
+3bd7d675eea1fa8b2103b05f9fe3687c
diff --git 
a/dev/breeze/doc/images/output_release-management_prepare-airflow-distributions.svg
 
b/dev/breeze/doc/images/output_release-management_prepare-airflow-distributions.svg
index da494b08875..485c3dc2749 100644
--- 
a/dev/breeze/doc/images/output_release-management_prepare-airflow-distributions.svg
+++ 
b/dev/breeze/doc/images/output_release-management_prepare-airflow-distributions.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 464.79999999999995" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 489.2" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath 
id="breeze-release-management-prepare-airflow-distributions-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="413.79999999999995" />
+      <rect x="0" y="0" width="1463.0" height="438.2" />
     </clipPath>
     <clipPath 
id="breeze-release-management-prepare-airflow-distributions-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -93,9 +93,12 @@
 <clipPath id="breeze-release-management-prepare-airflow-distributions-line-15">
     <rect x="0" y="367.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-release-management-prepare-airflow-distributions-line-16">
+    <rect x="0" y="391.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="462.8" rx="8"/><text 
class="breeze-release-management-prepare-airflow-distributions-title" 
fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;release-management&#160;prepare-airflow-distributions</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="487.2" rx="8"/><text 
class="breeze-release-management-prepare-airflow-distributions-title" 
fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;release-management&#160;prepare-airflow-distributions</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -116,12 +119,13 @@
 </text><text 
class="breeze-release-management-prepare-airflow-distributions-r5" x="0" 
y="215.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-8)">│</text><text
 class="breeze-release-management-prepare-airflow-distributions-r1" x="329.4" 
y="215.2" textLength="1110.2" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-8)">etc.).&#160;Note&#160;the&#160;`.`&#160;is&#160;need&#160;in&#160;`.dev0`&#160;and&#160;`.post`
 [...]
 </text><text 
class="breeze-release-management-prepare-airflow-distributions-r5" x="0" 
y="239.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-9)">│</text><text
 class="breeze-release-management-prepare-airflow-distributions-r6" x="329.4" 
y="239.6" textLength="1110.2" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-9)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
 </text><text 
class="breeze-release-management-prepare-airflow-distributions-r5" x="0" 
y="264" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-10)">│</text><text
 class="breeze-release-management-prepare-airflow-distributions-r4" x="24.4" 
y="264" textLength="207.4" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-10)">--use-local-hatch</text><text
 class="breeze-release-management-prepare-airflow-distributions-r1" x= [...]
-</text><text 
class="breeze-release-management-prepare-airflow-distributions-r5" x="0" 
y="288.4" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-11)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-airflow-distributions-r1" x="1464" 
y="288.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-d [...]
-</text><text 
class="breeze-release-management-prepare-airflow-distributions-r5" x="0" 
y="312.8" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-12)">╭─</text><text
 class="breeze-release-management-prepare-airflow-distributions-r5" x="24.4" 
y="312.8" textLength="195.2" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-12)">&#160;Common&#160;options&#160;</text><text
 class="breeze-release-management-prepare-airflow-d [...]
-</text><text 
class="breeze-release-management-prepare-airflow-distributions-r5" x="0" 
y="337.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-13)">│</text><text
 class="breeze-release-management-prepare-airflow-distributions-r4" x="24.4" 
y="337.2" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-13)">--verbose</text><text
 class="breeze-release-management-prepare-airflow-distributions-r7" x="158 [...]
-</text><text 
class="breeze-release-management-prepare-airflow-distributions-r5" x="0" 
y="361.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-14)">│</text><text
 class="breeze-release-management-prepare-airflow-distributions-r4" x="24.4" 
y="361.6" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-14)">--dry-run</text><text
 class="breeze-release-management-prepare-airflow-distributions-r7" x="158 [...]
-</text><text 
class="breeze-release-management-prepare-airflow-distributions-r5" x="0" 
y="386" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-15)">│</text><text
 class="breeze-release-management-prepare-airflow-distributions-r4" x="24.4" 
y="386" textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-15)">--help</text><text
 class="breeze-release-management-prepare-airflow-distributions-r7" x="158.6" 
y="3 [...]
-</text><text 
class="breeze-release-management-prepare-airflow-distributions-r5" x="0" 
y="410.4" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-16)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-airflow-distributions-r1" x="1464" 
y="410.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-d [...]
+</text><text 
class="breeze-release-management-prepare-airflow-distributions-r5" x="0" 
y="288.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-11)">│</text><text
 class="breeze-release-management-prepare-airflow-distributions-r4" x="24.4" 
y="288.4" textLength="61" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-11)">--tag</text><text
 class="breeze-release-management-prepare-airflow-distributions-r1" x="329.4" 
y=" [...]
+</text><text 
class="breeze-release-management-prepare-airflow-distributions-r5" x="0" 
y="312.8" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-airflow-distributions-r1" x="1464" 
y="312.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-d [...]
+</text><text 
class="breeze-release-management-prepare-airflow-distributions-r5" x="0" 
y="337.2" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-13)">╭─</text><text
 class="breeze-release-management-prepare-airflow-distributions-r5" x="24.4" 
y="337.2" textLength="195.2" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-13)">&#160;Common&#160;options&#160;</text><text
 class="breeze-release-management-prepare-airflow-d [...]
+</text><text 
class="breeze-release-management-prepare-airflow-distributions-r5" x="0" 
y="361.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-14)">│</text><text
 class="breeze-release-management-prepare-airflow-distributions-r4" x="24.4" 
y="361.6" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-14)">--verbose</text><text
 class="breeze-release-management-prepare-airflow-distributions-r7" x="158 [...]
+</text><text 
class="breeze-release-management-prepare-airflow-distributions-r5" x="0" 
y="386" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-15)">│</text><text
 class="breeze-release-management-prepare-airflow-distributions-r4" x="24.4" 
y="386" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-15)">--dry-run</text><text
 class="breeze-release-management-prepare-airflow-distributions-r7" x="158.6"  
[...]
+</text><text 
class="breeze-release-management-prepare-airflow-distributions-r5" x="0" 
y="410.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-16)">│</text><text
 class="breeze-release-management-prepare-airflow-distributions-r4" x="24.4" 
y="410.4" textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-16)">--help</text><text
 class="breeze-release-management-prepare-airflow-distributions-r7" x="158.6"  
[...]
+</text><text 
class="breeze-release-management-prepare-airflow-distributions-r5" x="0" 
y="434.8" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-airflow-distributions-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-airflow-distributions-r1" x="1464" 
y="434.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-d [...]
 </text>
     </g>
     </g>
diff --git 
a/dev/breeze/doc/images/output_release-management_prepare-airflow-distributions.txt
 
b/dev/breeze/doc/images/output_release-management_prepare-airflow-distributions.txt
index 23cfaca1194..09c3d23b022 100644
--- 
a/dev/breeze/doc/images/output_release-management_prepare-airflow-distributions.txt
+++ 
b/dev/breeze/doc/images/output_release-management_prepare-airflow-distributions.txt
@@ -1 +1 @@
-ded1f764fbbd1ef0cb885615f9e0ae83
+9a8864f40e52836268af594ccbbe5531
diff --git 
a/dev/breeze/doc/images/output_release-management_prepare-airflow-tarball.svg 
b/dev/breeze/doc/images/output_release-management_prepare-airflow-tarball.svg
index 67c814251aa..b298e8e694a 100644
--- 
a/dev/breeze/doc/images/output_release-management_prepare-airflow-tarball.svg
+++ 
b/dev/breeze/doc/images/output_release-management_prepare-airflow-tarball.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 367.2" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 440.4" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -37,15 +37,13 @@
 .breeze-release-management-prepare-airflow-tarball-r3 { fill: 
#c5c8c6;font-weight: bold }
 .breeze-release-management-prepare-airflow-tarball-r4 { fill: 
#68a0b3;font-weight: bold }
 .breeze-release-management-prepare-airflow-tarball-r5 { fill: #868887 }
-.breeze-release-management-prepare-airflow-tarball-r6 { fill: #cc555a }
-.breeze-release-management-prepare-airflow-tarball-r7 { fill: #8d7b39 }
-.breeze-release-management-prepare-airflow-tarball-r8 { fill: #8a4346 }
-.breeze-release-management-prepare-airflow-tarball-r9 { fill: 
#98a84b;font-weight: bold }
+.breeze-release-management-prepare-airflow-tarball-r6 { fill: #8d7b39 }
+.breeze-release-management-prepare-airflow-tarball-r7 { fill: 
#98a84b;font-weight: bold }
     </style>
 
     <defs>
     <clipPath 
id="breeze-release-management-prepare-airflow-tarball-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="316.2" />
+      <rect x="0" y="0" width="1463.0" height="389.4" />
     </clipPath>
     <clipPath id="breeze-release-management-prepare-airflow-tarball-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -83,9 +81,18 @@
 <clipPath id="breeze-release-management-prepare-airflow-tarball-line-11">
     <rect x="0" y="269.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-release-management-prepare-airflow-tarball-line-12">
+    <rect x="0" y="294.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-prepare-airflow-tarball-line-13">
+    <rect x="0" y="318.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-prepare-airflow-tarball-line-14">
+    <rect x="0" y="343.1" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="365.2" rx="8"/><text 
class="breeze-release-management-prepare-airflow-tarball-title" fill="#c5c8c6" 
text-anchor="middle" x="740" 
y="27">Command:&#160;release-management&#160;prepare-airflow-tarball</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="438.4" rx="8"/><text 
class="breeze-release-management-prepare-airflow-tarball-title" fill="#c5c8c6" 
text-anchor="middle" x="740" 
y="27">Command:&#160;release-management&#160;prepare-airflow-tarball</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,16 +105,19 @@
     <text class="breeze-release-management-prepare-airflow-tarball-r1" 
x="1464" y="20" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-0)">
 </text><text class="breeze-release-management-prepare-airflow-tarball-r2" 
x="12.2" y="44.4" textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-1)">Usage:</text><text
 class="breeze-release-management-prepare-airflow-tarball-r3" x="97.6" y="44.4" 
textLength="597.8" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-1)">breeze&#160;release-management&#160;prepare-airflow-tarball</text><text
 class="breeze-release-management-prepare-ai [...]
 </text><text class="breeze-release-management-prepare-airflow-tarball-r1" 
x="1464" y="68.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-2)">
-</text><text class="breeze-release-management-prepare-airflow-tarball-r1" 
x="12.2" y="93.2" textLength="402.6" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-3)">Prepare&#160;airflow&#x27;s&#160;source&#160;tarball.</text><text
 class="breeze-release-management-prepare-airflow-tarball-r1" x="1464" y="93.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-3)">
+</text><text class="breeze-release-management-prepare-airflow-tarball-r1" 
x="12.2" y="93.2" textLength="695.4" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-3)">Prepare&#160;airflow&#x27;s&#160;or&#160;airflow&#160;distribution&#160;source&#160;tarball.</text><text
 class="breeze-release-management-prepare-airflow-tarball-r1" x="1464" y="93.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-3)">
 </text><text class="breeze-release-management-prepare-airflow-tarball-r1" 
x="1464" y="117.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-4)">
 </text><text class="breeze-release-management-prepare-airflow-tarball-r5" 
x="0" y="142" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-5)">╭─</text><text
 class="breeze-release-management-prepare-airflow-tarball-r5" x="24.4" y="142" 
textLength="183" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-5)">&#160;Package&#160;flags&#160;</text><text
 class="breeze-release-management-prepare-airflow-tarball-r5" x="207.4" y="142" 
text [...]
-</text><text class="breeze-release-management-prepare-airflow-tarball-r5" 
x="0" y="166.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-6)">│</text><text
 class="breeze-release-management-prepare-airflow-tarball-r6" x="24.4" 
y="166.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-6)">*</text><text
 class="breeze-release-management-prepare-airflow-tarball-r4" x="61" y="166.4" 
textLength="109.8" clip-path=" [...]
-</text><text class="breeze-release-management-prepare-airflow-tarball-r5" 
x="0" y="190.8" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-7)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-airflow-tarball-r1" x="1464" 
y="190.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-7)">
-</text><text class="breeze-release-management-prepare-airflow-tarball-r5" 
x="0" y="215.2" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-8)">╭─</text><text
 class="breeze-release-management-prepare-airflow-tarball-r5" x="24.4" 
y="215.2" textLength="195.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-8)">&#160;Common&#160;options&#160;</text><text
 class="breeze-release-management-prepare-airflow-tarball-r5" x="219.6" y="21 
[...]
-</text><text class="breeze-release-management-prepare-airflow-tarball-r5" 
x="0" y="239.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-9)">│</text><text
 class="breeze-release-management-prepare-airflow-tarball-r4" x="24.4" 
y="239.6" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-9)">--dry-run</text><text
 class="breeze-release-management-prepare-airflow-tarball-r9" x="158.6" 
y="239.6" textLength="24.4"  [...]
-</text><text class="breeze-release-management-prepare-airflow-tarball-r5" 
x="0" y="264" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-10)">│</text><text
 class="breeze-release-management-prepare-airflow-tarball-r4" x="24.4" y="264" 
textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-10)">--verbose</text><text
 class="breeze-release-management-prepare-airflow-tarball-r9" x="158.6" y="264" 
textLength="24.4" clip [...]
-</text><text class="breeze-release-management-prepare-airflow-tarball-r5" 
x="0" y="288.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-11)">│</text><text
 class="breeze-release-management-prepare-airflow-tarball-r4" x="24.4" 
y="288.4" textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-11)">--help</text><text
 class="breeze-release-management-prepare-airflow-tarball-r9" x="158.6" 
y="288.4" textLength="24.4" cl [...]
-</text><text class="breeze-release-management-prepare-airflow-tarball-r5" 
x="0" y="312.8" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-airflow-tarball-r1" x="1464" 
y="312.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-12)">
+</text><text class="breeze-release-management-prepare-airflow-tarball-r5" 
x="0" y="166.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-6)">│</text><text
 class="breeze-release-management-prepare-airflow-tarball-r4" x="24.4" 
y="166.4" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-6)">--version</text><text
 class="breeze-release-management-prepare-airflow-tarball-r1" x="305" y="166.4" 
textLength="524.6" c [...]
+</text><text class="breeze-release-management-prepare-airflow-tarball-r5" 
x="0" y="190.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-7)">│</text><text
 class="breeze-release-management-prepare-airflow-tarball-r4" x="24.4" 
y="190.8" textLength="231.8" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-7)">--distribution-name</text><text
 class="breeze-release-management-prepare-airflow-tarball-r1" x="305" y="190.8" 
textLength [...]
+</text><text class="breeze-release-management-prepare-airflow-tarball-r5" 
x="0" y="215.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-8)">│</text><text
 class="breeze-release-management-prepare-airflow-tarball-r4" x="24.4" 
y="215.2" textLength="61" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-8)">--tag</text><text
 class="breeze-release-management-prepare-airflow-tarball-r1" x="305" y="215.2" 
textLength="1122.4" clip-pa [...]
+</text><text class="breeze-release-management-prepare-airflow-tarball-r5" 
x="0" y="239.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-9)">│</text><text
 class="breeze-release-management-prepare-airflow-tarball-r6" x="305" y="239.6" 
textLength="1122.4" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-9)">(TEXT)&#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-prepare-airflow-tarball-r5" 
x="0" y="264" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-10)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-airflow-tarball-r1" x="1464" y="264" 
textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-10)">
+</text><text class="breeze-release-management-prepare-airflow-tarball-r5" 
x="0" y="288.4" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-11)">╭─</text><text
 class="breeze-release-management-prepare-airflow-tarball-r5" x="24.4" 
y="288.4" textLength="195.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-11)">&#160;Common&#160;options&#160;</text><text
 class="breeze-release-management-prepare-airflow-tarball-r5" x="219.6" y=" 
[...]
+</text><text class="breeze-release-management-prepare-airflow-tarball-r5" 
x="0" y="312.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-12)">│</text><text
 class="breeze-release-management-prepare-airflow-tarball-r4" x="24.4" 
y="312.8" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-12)">--dry-run</text><text
 class="breeze-release-management-prepare-airflow-tarball-r7" x="158.6" 
y="312.8" textLength="24.4 [...]
+</text><text class="breeze-release-management-prepare-airflow-tarball-r5" 
x="0" y="337.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-13)">│</text><text
 class="breeze-release-management-prepare-airflow-tarball-r4" x="24.4" 
y="337.2" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-13)">--verbose</text><text
 class="breeze-release-management-prepare-airflow-tarball-r7" x="158.6" 
y="337.2" textLength="24.4 [...]
+</text><text class="breeze-release-management-prepare-airflow-tarball-r5" 
x="0" y="361.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-14)">│</text><text
 class="breeze-release-management-prepare-airflow-tarball-r4" x="24.4" 
y="361.6" textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-14)">--help</text><text
 class="breeze-release-management-prepare-airflow-tarball-r7" x="158.6" 
y="361.6" textLength="24.4" cl [...]
+</text><text class="breeze-release-management-prepare-airflow-tarball-r5" 
x="0" y="386" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-15)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-airflow-tarball-r1" x="1464" y="386" 
textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-airflow-tarball-line-15)">
 </text>
     </g>
     </g>
diff --git 
a/dev/breeze/doc/images/output_release-management_prepare-airflow-tarball.txt 
b/dev/breeze/doc/images/output_release-management_prepare-airflow-tarball.txt
index 19b5526b1c6..1f782aecabc 100644
--- 
a/dev/breeze/doc/images/output_release-management_prepare-airflow-tarball.txt
+++ 
b/dev/breeze/doc/images/output_release-management_prepare-airflow-tarball.txt
@@ -1 +1 @@
-f98358d95810966a00142a5e654c7909
+d6bd14bc9e4d7bd1f6fb5b9b3272a3a1
diff --git 
a/dev/breeze/doc/images/output_release-management_prepare-provider-distributions.svg
 
b/dev/breeze/doc/images/output_release-management_prepare-provider-distributions.svg
index 35e62f8a7e7..7b0f7dba6af 100644
--- 
a/dev/breeze/doc/images/output_release-management_prepare-provider-distributions.svg
+++ 
b/dev/breeze/doc/images/output_release-management_prepare-provider-distributions.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1099.2" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 1123.6" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath 
id="breeze-release-management-prepare-provider-distributions-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="1048.2" />
+      <rect x="0" y="0" width="1463.0" height="1072.6" />
     </clipPath>
     <clipPath 
id="breeze-release-management-prepare-provider-distributions-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -171,9 +171,12 @@
 <clipPath 
id="breeze-release-management-prepare-provider-distributions-line-41">
     <rect x="0" y="1001.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath 
id="breeze-release-management-prepare-provider-distributions-line-42">
+    <rect x="0" y="1026.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="1097.2" rx="8"/><text 
class="breeze-release-management-prepare-provider-distributions-title" 
fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;release-management&#160;prepare-provider-distributions</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="1121.6" rx="8"/><text 
class="breeze-release-management-prepare-provider-distributions-title" 
fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;release-management&#160;prepare-provider-distributions</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -220,12 +223,13 @@
 </text><text 
class="breeze-release-management-prepare-provider-distributions-r5" x="0" 
y="849.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-34)">│</text><text
 class="breeze-release-management-prepare-provider-distributions-r1" x="475.8" 
y="849.6" textLength="963.8" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-34)">adding&#160;individual&#160;packages&#160;as&#160;arguments&#160;to&#160;every&#160;comman
 [...]
 </text><text 
class="breeze-release-management-prepare-provider-distributions-r5" x="0" 
y="874" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-35)">│</text><text
 class="breeze-release-management-prepare-provider-distributions-r1" x="475.8" 
y="874" textLength="963.8" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-35)">packages&#160;passed&#160;as&#160;arguments.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
 </text><text 
class="breeze-release-management-prepare-provider-distributions-r5" x="0" 
y="898.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-36)">│</text><text
 class="breeze-release-management-prepare-provider-distributions-r7" x="475.8" 
y="898.4" textLength="963.8" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-36)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
-</text><text 
class="breeze-release-management-prepare-provider-distributions-r5" x="0" 
y="922.8" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-37)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-provider-distributions-r1" x="1464" 
y="922.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-provid [...]
-</text><text 
class="breeze-release-management-prepare-provider-distributions-r5" x="0" 
y="947.2" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-38)">╭─</text><text
 class="breeze-release-management-prepare-provider-distributions-r5" x="24.4" 
y="947.2" textLength="195.2" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-38)">&#160;Common&#160;options&#160;</text><text
 class="breeze-release-management-prepare-provi [...]
-</text><text 
class="breeze-release-management-prepare-provider-distributions-r5" x="0" 
y="971.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-39)">│</text><text
 class="breeze-release-management-prepare-provider-distributions-r4" x="24.4" 
y="971.6" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-39)">--dry-run</text><text
 class="breeze-release-management-prepare-provider-distributions-r6" x [...]
-</text><text 
class="breeze-release-management-prepare-provider-distributions-r5" x="0" 
y="996" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-40)">│</text><text
 class="breeze-release-management-prepare-provider-distributions-r4" x="24.4" 
y="996" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-40)">--verbose</text><text
 class="breeze-release-management-prepare-provider-distributions-r6" x="15 [...]
-</text><text 
class="breeze-release-management-prepare-provider-distributions-r5" x="0" 
y="1020.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-41)">│</text><text
 class="breeze-release-management-prepare-provider-distributions-r4" x="24.4" 
y="1020.4" textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-41)">--help</text><text
 class="breeze-release-management-prepare-provider-distributions-r6" x=" [...]
-</text><text 
class="breeze-release-management-prepare-provider-distributions-r5" x="0" 
y="1044.8" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-42)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-provider-distributions-r1" x="1464" 
y="1044.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-prov [...]
+</text><text 
class="breeze-release-management-prepare-provider-distributions-r5" x="0" 
y="922.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-37)">│</text><text
 class="breeze-release-management-prepare-provider-distributions-r4" x="24.4" 
y="922.8" textLength="61" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-37)">--tag</text><text
 class="breeze-release-management-prepare-provider-distributions-r1" x="475.8 
[...]
+</text><text 
class="breeze-release-management-prepare-provider-distributions-r5" x="0" 
y="947.2" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-38)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-provider-distributions-r1" x="1464" 
y="947.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-provid [...]
+</text><text 
class="breeze-release-management-prepare-provider-distributions-r5" x="0" 
y="971.6" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-39)">╭─</text><text
 class="breeze-release-management-prepare-provider-distributions-r5" x="24.4" 
y="971.6" textLength="195.2" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-39)">&#160;Common&#160;options&#160;</text><text
 class="breeze-release-management-prepare-provi [...]
+</text><text 
class="breeze-release-management-prepare-provider-distributions-r5" x="0" 
y="996" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-40)">│</text><text
 class="breeze-release-management-prepare-provider-distributions-r4" x="24.4" 
y="996" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-40)">--dry-run</text><text
 class="breeze-release-management-prepare-provider-distributions-r6" x="15 [...]
+</text><text 
class="breeze-release-management-prepare-provider-distributions-r5" x="0" 
y="1020.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-41)">│</text><text
 class="breeze-release-management-prepare-provider-distributions-r4" x="24.4" 
y="1020.4" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-41)">--verbose</text><text
 class="breeze-release-management-prepare-provider-distributions-r6" [...]
+</text><text 
class="breeze-release-management-prepare-provider-distributions-r5" x="0" 
y="1044.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-42)">│</text><text
 class="breeze-release-management-prepare-provider-distributions-r4" x="24.4" 
y="1044.8" textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-42)">--help</text><text
 class="breeze-release-management-prepare-provider-distributions-r6" x=" [...]
+</text><text 
class="breeze-release-management-prepare-provider-distributions-r5" x="0" 
y="1069.2" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-provider-distributions-line-43)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-provider-distributions-r1" x="1464" 
y="1069.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-prov [...]
 </text>
     </g>
     </g>
diff --git 
a/dev/breeze/doc/images/output_release-management_prepare-provider-distributions.txt
 
b/dev/breeze/doc/images/output_release-management_prepare-provider-distributions.txt
index d9a7af41394..f61d4024bcc 100644
--- 
a/dev/breeze/doc/images/output_release-management_prepare-provider-distributions.txt
+++ 
b/dev/breeze/doc/images/output_release-management_prepare-provider-distributions.txt
@@ -1 +1 @@
-1d031671d50f0a45410fda366afe659f
+2b84369620049c7b407390f681587198
diff --git 
a/dev/breeze/doc/images/output_release-management_prepare-task-sdk-distributions.svg
 
b/dev/breeze/doc/images/output_release-management_prepare-task-sdk-distributions.svg
index 3a5c40292cf..22da5af8b14 100644
--- 
a/dev/breeze/doc/images/output_release-management_prepare-task-sdk-distributions.svg
+++ 
b/dev/breeze/doc/images/output_release-management_prepare-task-sdk-distributions.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 464.79999999999995" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 489.2" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath 
id="breeze-release-management-prepare-task-sdk-distributions-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="413.79999999999995" />
+      <rect x="0" y="0" width="1463.0" height="438.2" />
     </clipPath>
     <clipPath 
id="breeze-release-management-prepare-task-sdk-distributions-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -93,9 +93,12 @@
 <clipPath 
id="breeze-release-management-prepare-task-sdk-distributions-line-15">
     <rect x="0" y="367.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath 
id="breeze-release-management-prepare-task-sdk-distributions-line-16">
+    <rect x="0" y="391.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="462.8" rx="8"/><text 
class="breeze-release-management-prepare-task-sdk-distributions-title" 
fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;release-management&#160;prepare-task-sdk-distributions</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="487.2" rx="8"/><text 
class="breeze-release-management-prepare-task-sdk-distributions-title" 
fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;release-management&#160;prepare-task-sdk-distributions</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -116,12 +119,13 @@
 </text><text 
class="breeze-release-management-prepare-task-sdk-distributions-r5" x="0" 
y="215.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-8)">│</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r1" x="329.4" 
y="215.2" textLength="1110.2" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-8)">etc.).&#160;Note&#160;the&#160;`.`&#160;is&#160;need&#160;in&#160;`.dev0`&#160;and&#160;`.p
 [...]
 </text><text 
class="breeze-release-management-prepare-task-sdk-distributions-r5" x="0" 
y="239.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-9)">│</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r6" x="329.4" 
y="239.6" textLength="1110.2" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-9)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
 </text><text 
class="breeze-release-management-prepare-task-sdk-distributions-r5" x="0" 
y="264" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-10)">│</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r4" x="24.4" 
y="264" textLength="207.4" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-10)">--use-local-hatch</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r [...]
-</text><text 
class="breeze-release-management-prepare-task-sdk-distributions-r5" x="0" 
y="288.4" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-11)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r1" x="1464" 
y="288.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-task-s [...]
-</text><text 
class="breeze-release-management-prepare-task-sdk-distributions-r5" x="0" 
y="312.8" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-12)">╭─</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r5" x="24.4" 
y="312.8" textLength="195.2" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-12)">&#160;Common&#160;options&#160;</text><text
 class="breeze-release-management-prepare-task- [...]
-</text><text 
class="breeze-release-management-prepare-task-sdk-distributions-r5" x="0" 
y="337.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-13)">│</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r4" x="24.4" 
y="337.2" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-13)">--verbose</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r7" x [...]
-</text><text 
class="breeze-release-management-prepare-task-sdk-distributions-r5" x="0" 
y="361.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-14)">│</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r4" x="24.4" 
y="361.6" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-14)">--dry-run</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r7" x [...]
-</text><text 
class="breeze-release-management-prepare-task-sdk-distributions-r5" x="0" 
y="386" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-15)">│</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r4" x="24.4" 
y="386" textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-15)">--help</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r7" x="158.6" 
[...]
-</text><text 
class="breeze-release-management-prepare-task-sdk-distributions-r5" x="0" 
y="410.4" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-16)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r1" x="1464" 
y="410.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-task-s [...]
+</text><text 
class="breeze-release-management-prepare-task-sdk-distributions-r5" x="0" 
y="288.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-11)">│</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r4" x="24.4" 
y="288.4" textLength="61" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-11)">--tag</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r1" x="329.4 
[...]
+</text><text 
class="breeze-release-management-prepare-task-sdk-distributions-r5" x="0" 
y="312.8" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r1" x="1464" 
y="312.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-task-s [...]
+</text><text 
class="breeze-release-management-prepare-task-sdk-distributions-r5" x="0" 
y="337.2" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-13)">╭─</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r5" x="24.4" 
y="337.2" textLength="195.2" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-13)">&#160;Common&#160;options&#160;</text><text
 class="breeze-release-management-prepare-task- [...]
+</text><text 
class="breeze-release-management-prepare-task-sdk-distributions-r5" x="0" 
y="361.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-14)">│</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r4" x="24.4" 
y="361.6" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-14)">--verbose</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r7" x [...]
+</text><text 
class="breeze-release-management-prepare-task-sdk-distributions-r5" x="0" 
y="386" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-15)">│</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r4" x="24.4" 
y="386" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-15)">--dry-run</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r7" x="15 [...]
+</text><text 
class="breeze-release-management-prepare-task-sdk-distributions-r5" x="0" 
y="410.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-16)">│</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r4" x="24.4" 
y="410.4" textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-16)">--help</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r7" x="15 [...]
+</text><text 
class="breeze-release-management-prepare-task-sdk-distributions-r5" x="0" 
y="434.8" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-task-sdk-distributions-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-task-sdk-distributions-r1" x="1464" 
y="434.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-task-s [...]
 </text>
     </g>
     </g>
diff --git 
a/dev/breeze/doc/images/output_release-management_prepare-task-sdk-distributions.txt
 
b/dev/breeze/doc/images/output_release-management_prepare-task-sdk-distributions.txt
index 67f5f0cf65b..2c5b366cba0 100644
--- 
a/dev/breeze/doc/images/output_release-management_prepare-task-sdk-distributions.txt
+++ 
b/dev/breeze/doc/images/output_release-management_prepare-task-sdk-distributions.txt
@@ -1 +1 @@
-d4edfdcbafb4f63ddeca69d26851eb20
+092958649cfdcc6c09a5d645bd82841b
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 b793a4478b7..d588eedd7f4 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
@@ -18,15 +18,27 @@ from __future__ import annotations
 
 import os
 import shutil
+from datetime import datetime
 from pathlib import Path
+from typing import Literal
 
 import click
 
 from airflow_breeze.commands.common_options import option_answer, 
option_dry_run, option_verbose
 from airflow_breeze.commands.release_management_group import release_management
+from airflow_breeze.global_constants import (
+    DistributionType,
+    get_airflow_version,
+    get_airflowctl_version,
+    get_task_sdk_version,
+)
 from airflow_breeze.utils.confirm import confirm_action
 from airflow_breeze.utils.console import console_print
-from airflow_breeze.utils.path_utils import AIRFLOW_DIST_PATH, 
AIRFLOW_ROOT_PATH, OUT_PATH
+from airflow_breeze.utils.path_utils import (
+    AIRFLOW_DIST_PATH,
+    AIRFLOW_ROOT_PATH,
+    OUT_PATH,
+)
 from airflow_breeze.utils.reproducible import get_source_date_epoch, 
repack_deterministically
 from airflow_breeze.utils.run_utils import run_command
 from airflow_breeze.utils.shared_options import get_dry_run
@@ -236,12 +248,18 @@ def git_clean():
         console_print("[success]Git repo cleaned")
 
 
-def tarball_release(version: str, version_without_rc: str, source_date_epoch: 
int):
-    console_print(f"[info]Creating tarball for Airflow {version}")
+def tarball_release(
+    version: str,
+    version_without_rc: str,
+    source_date_epoch: int,
+    distribution_name: DistributionType,
+    tag: str | None = None,
+):
+    console_print(f"[info]Creating tarball for Apache 
{distribution_name.value} {version}")
     shutil.rmtree(OUT_PATH, ignore_errors=True)
     OUT_PATH.mkdir(exist_ok=True)
     AIRFLOW_DIST_PATH.mkdir(exist_ok=True)
-    archive_name = f"apache-airflow-{version_without_rc}-source.tar.gz"
+    archive_name = 
f"apache-{distribution_name.value}-{version_without_rc}-source.tar.gz"
     temporary_archive = OUT_PATH / archive_name
     result = run_command(
         [
@@ -250,15 +268,17 @@ def tarball_release(version: str, version_without_rc: 
str, source_date_epoch: in
             "tar.umask=0077",
             "archive",
             "--format=tar.gz",
-            f"{version}",
-            f"--prefix=apache-airflow-{version_without_rc}/",
+            f"{version if tag is None else tag}",
+            f"--prefix=apache-{distribution_name.value}-{version_without_rc}/",
             "-o",
             temporary_archive.as_posix(),
         ],
         check=False,
     )
     if result.returncode != 0:
-        console_print(f"[error]Failed to create tarball {temporary_archive} 
for Airflow {version}")
+        console_print(
+            f"[error]Failed to create tarball {temporary_archive} for Apache 
{distribution_name.value} {version}"
+        )
         exit(result.returncode)
     final_archive = AIRFLOW_DIST_PATH / archive_name
     result = repack_deterministically(
@@ -273,6 +293,41 @@ def tarball_release(version: str, version_without_rc: str, 
source_date_epoch: in
     console_print(f"[success]Tarball created in {final_archive}")
 
 
+def create_tarball_release(
+    version: str,
+    distribution_name: Literal["airflow", "task-sdk", "providers", 
"airflowctl"],
+    tag: str | None,
+):
+    from packaging.version import Version
+
+    distribution_name = DistributionType(distribution_name)
+    if not version:
+        if distribution_name == DistributionType.AIRFLOW_CORE:
+            version = get_airflow_version()
+        elif distribution_name == DistributionType.TASK_SDK:
+            version = get_task_sdk_version()
+        elif distribution_name == DistributionType.AIRFLOW_CTL:
+            version = get_airflowctl_version()
+        elif distribution_name == DistributionType.PROVIDERS:
+            version = get_airflow_version()
+    distribution_version = Version(version)
+    source_date_epoch = get_source_date_epoch(AIRFLOW_ROOT_PATH)
+    version_without_rc = (
+        distribution_version.base_version
+        if distribution_name != DistributionType.PROVIDERS
+        else f"{datetime.now().strftime('%Y-%m-%d')}"
+    )
+
+    # Create the tarball
+    tarball_release(
+        version=version,
+        version_without_rc=version_without_rc,
+        source_date_epoch=source_date_epoch,
+        distribution_name=distribution_name,
+        tag=tag,
+    )
+
+
 def create_artifacts_with_hatch(source_date_epoch: int):
     console_print("[info]Creating artifacts with hatch")
     shutil.rmtree(AIRFLOW_DIST_PATH, ignore_errors=True)
@@ -523,24 +578,30 @@ def remove_old_releases(version, repo_root):
 
 @release_management.command(
     name="prepare-airflow-tarball",
-    help="Prepare airflow's source tarball.",
+    help="Prepare airflow's or airflow distribution source tarball.",
+)
[email protected]("--version", help="The release candidate version e.g. 2.4.3rc1", 
envvar="VERSION")
[email protected](
+    "--distribution-name",
+    default="airflow",
+    help="The distribution name, airflow, task-sdk, providers, airflowctl",
 )
 @click.option(
-    "--version", required=True, help="The release candidate version e.g. 
2.4.3rc1", envvar="VERSION"
+    "--tag",
+    help="The git tag to use for creating the tarball. If not provided, 
__init__ file version is used.",
+    default=None,
 )
 @option_dry_run
 @option_verbose
-def prepare_airflow_tarball(version: str):
-    from packaging.version import Version
-
-    airflow_version = Version(version)
-    if not airflow_version.is_prerelease:
-        exit("--version value must be a pre-release")
-    source_date_epoch = get_source_date_epoch(AIRFLOW_ROOT_PATH)
-    version_without_rc = airflow_version.base_version
-    # Create the tarball
-    tarball_release(
-        version=version, version_without_rc=version_without_rc, 
source_date_epoch=source_date_epoch
+def prepare_airflow_tarball(
+    version: str,
+    distribution_name: Literal["airflow", "task-sdk", "providers", 
"airflowctl"],
+    tag: str | None,
+):
+    create_tarball_release(
+        version=version,
+        distribution_name=distribution_name,
+        tag=tag,
     )
 
 
@@ -627,7 +688,10 @@ def publish_release_candidate(version, previous_version, 
task_sdk_version, githu
     if confirm_action("Create tarball?"):
         # Create the tarball
         tarball_release(
-            version=version, version_without_rc=version_without_rc, 
source_date_epoch=source_date_epoch
+            version=version,
+            version_without_rc=version_without_rc,
+            source_date_epoch=source_date_epoch,
+            distribution_name=DistributionType.AIRFLOW_CORE,
         )
     # Sign the release
     sign_the_release(airflow_repo_root)
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 74a5ac583b3..706d76a6c51 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -88,6 +88,7 @@ from 
airflow_breeze.commands.common_package_installation_options import (
     option_providers_skip_constraints,
     option_use_distributions_from_dist,
 )
+from airflow_breeze.commands.release_candidate_command import 
create_tarball_release
 from airflow_breeze.commands.release_management_group import release_management
 from airflow_breeze.global_constants import (
     ALL_PYTHON_VERSION_TO_PATCHLEVEL_VERSION,
@@ -227,6 +228,12 @@ option_use_local_hatch = click.option(
     envvar="USE_LOCAL_HATCH",
     help="Use local hatch instead of docker to build the package. You need to 
have hatch installed.",
 )
+option_tag = click.option(
+    "--tag",
+    type=str,
+    help="Tag to use for the release processes",
+    default=None,
+)
 
 MY_DIR_PATH = os.path.dirname(__file__)
 SOURCE_DIR_PATH = os.path.abspath(
@@ -538,12 +545,14 @@ def _check_sdist_to_wheel(python_path: Path, dist_info: 
DistributionPackageInfo,
 @option_distribution_format
 @option_version_suffix
 @option_use_local_hatch
+@option_tag
 @option_verbose
 @option_dry_run
 def prepare_airflow_distributions(
     distribution_format: str,
     version_suffix: str,
     use_local_hatch: bool,
+    tag: str | None = None,
 ):
     perform_environment_checks()
     fix_ownership_using_docker()
@@ -574,6 +583,13 @@ def prepare_airflow_distributions(
             version_suffix=version_suffix,
         )
     get_console().print("[success]Successfully prepared Airflow packages")
+    if tag is not None:
+        # Create the tarball
+        create_tarball_release(
+            version=version_suffix,
+            distribution_name="airflow",
+            tag=tag,
+        )
 
 
 def _prepare_non_core_distributions(
@@ -700,12 +716,14 @@ def _prepare_non_core_distributions(
 @option_distribution_format
 @option_version_suffix
 @option_use_local_hatch
+@option_tag
 @option_verbose
 @option_dry_run
 def prepare_task_sdk_distributions(
     distribution_format: str,
     version_suffix: str,
     use_local_hatch: bool,
+    tag: str | None = None,
 ):
     _prepare_non_core_distributions(
         # Argument parameters
@@ -719,6 +737,13 @@ def prepare_task_sdk_distributions(
         distribution_name="task-sdk",
         distribution_pretty_name="Task SDK",
     )
+    if tag is not None:
+        # Create the tarball
+        create_tarball_release(
+            version=version_suffix,
+            distribution_name="task-sdk",
+            tag=tag,
+        )
 
 
 @release_management.command(
@@ -728,12 +753,14 @@ def prepare_task_sdk_distributions(
 @option_distribution_format
 @option_version_suffix
 @option_use_local_hatch
+@option_tag
 @option_verbose
 @option_dry_run
 def prepare_airflow_ctl_distributions(
     distribution_format: str,
     version_suffix: str,
     use_local_hatch: bool,
+    tag: str | None = None,
 ):
     _prepare_non_core_distributions(
         # Argument parameters
@@ -748,6 +775,14 @@ def prepare_airflow_ctl_distributions(
         distribution_pretty_name="",
         full_distribution_pretty_name="airflowctl",
     )
+    print(f"tag passed: {tag}")
+    if tag is not None:
+        # Create the tarball
+        create_tarball_release(
+            version=version_suffix,
+            distribution_name="airflowctl",
+            tag=tag,
+        )
 
 
 def provider_action_summary(description: str, message_type: MessageType, 
packages: list[str]):
@@ -1042,6 +1077,7 @@ def _build_provider_distributions(
 @option_include_not_ready_providers
 @option_include_removed_providers
 @argument_provider_distributions
+@option_tag
 @option_verbose
 def prepare_provider_distributions(
     clean_dist: bool,
@@ -1055,6 +1091,7 @@ def prepare_provider_distributions(
     skip_deleting_generated_files: bool,
     skip_tag_check: bool,
     version_suffix: str,
+    tag: str | None = None,
 ):
     perform_environment_checks()
     fix_ownership_using_docker()
@@ -1139,6 +1176,13 @@ def prepare_provider_distributions(
     for dist_info in packages:
         get_console().print(str(dist_info))
     get_console().print()
+    # Create the tarball
+    if tag is not None:
+        create_tarball_release(
+            version=version_suffix,
+            distribution_name="providers",
+            tag=tag,
+        )
 
 
 def run_generate_constraints(
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 09eae51533c..903f547486d 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
@@ -86,15 +86,14 @@ RELEASE_MANAGEMENT_PARAMETERS: dict[str, list[dict[str, str 
| list[str]]]] = {
                 "--distribution-format",
                 "--version-suffix",
                 "--use-local-hatch",
+                "--tag",
             ],
         }
     ],
     "breeze release-management prepare-airflow-tarball": [
         {
             "name": "Package flags",
-            "options": [
-                "--version",
-            ],
+            "options": ["--version", "--distribution-name", "--tag"],
         }
     ],
     "breeze release-management prepare-task-sdk-distributions": [
@@ -104,6 +103,7 @@ RELEASE_MANAGEMENT_PARAMETERS: dict[str, list[dict[str, str 
| list[str]]]] = {
                 "--distribution-format",
                 "--version-suffix",
                 "--use-local-hatch",
+                "--tag",
             ],
         }
     ],
@@ -114,6 +114,7 @@ RELEASE_MANAGEMENT_PARAMETERS: dict[str, list[dict[str, str 
| list[str]]]] = {
                 "--distribution-format",
                 "--version-suffix",
                 "--use-local-hatch",
+                "--tag",
             ],
         }
     ],
@@ -234,6 +235,7 @@ RELEASE_MANAGEMENT_PARAMETERS: dict[str, list[dict[str, str 
| list[str]]]] = {
                 "--skip-tag-check",
                 "--version-suffix",
                 "--distributions-list",
+                "--tag",
             ],
         }
     ],
diff --git a/dev/breeze/src/airflow_breeze/configure_rich_click.py 
b/dev/breeze/src/airflow_breeze/configure_rich_click.py
index a5b1df980c8..3ac1a200a41 100644
--- a/dev/breeze/src/airflow_breeze/configure_rich_click.py
+++ b/dev/breeze/src/airflow_breeze/configure_rich_click.py
@@ -49,6 +49,8 @@ else:
     )
     from airflow_breeze.commands.release_management_commands_config import (
         RELEASE_AIRFLOW_COMMANDS,
+        RELEASE_AIRFLOW_CTL_COMMANDS,
+        RELEASE_AIRFLOW_TASK_SDK_COMMANDS,
         RELEASE_HELM_COMMANDS,
         RELEASE_MANAGEMENT_PARAMETERS,
         RELEASE_OTHER_COMMANDS,
@@ -112,6 +114,8 @@ else:
             RELEASE_AIRFLOW_COMMANDS,
             RELEASE_HELM_COMMANDS,
             RELEASE_PROVIDERS_COMMANDS,
+            RELEASE_AIRFLOW_TASK_SDK_COMMANDS,
+            RELEASE_AIRFLOW_CTL_COMMANDS,
             RELEASE_OTHER_COMMANDS,
         ],
         "breeze sbom": [SBOM_COMMANDS],
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py 
b/dev/breeze/src/airflow_breeze/global_constants.py
index 2ee0c045ecd..fd13e723e4b 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -206,7 +206,7 @@ UV_VERSION = "0.8.14"
 DEFAULT_UV_HTTP_TIMEOUT = 300
 DEFAULT_WSL2_HTTP_TIMEOUT = 900
 
-# packages that  providers docs
+# packages that providers docs
 REGULAR_DOC_PACKAGES = [
     "apache-airflow",
     "docker-stack",
@@ -216,6 +216,16 @@ REGULAR_DOC_PACKAGES = [
     "apache-airflow-ctl",
 ]
 
+
+# packages that are distributions of Airflow
+class DistributionType(Enum):
+    AIRFLOW_CORE = "airflow"
+    PROVIDERS = "providers"
+    TASK_SDK = "task-sdk"
+    AIRFLOW_CTL = "airflowctl"
+    HELM_CHART = "helm-chart"
+
+
 DESTINATION_LOCATIONS = [
     "s3://live-docs-airflow-apache-org/docs/",
     "s3://staging-docs-airflow-apache-org/docs/",

Reply via email to