You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by ep...@apache.org on 2025/12/08 16:36:58 UTC
(airflow) 21/30: [v3-1-test] Fix airflow/task-sdk relase PMC checks (#59164) (#59165)
This is an automated email from the ASF dual-hosted git repository.
ephraimanierobi pushed a commit to branch v3-1-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
commit c3435fed2e7d27db669a7fea7a8be6bbd09b4a0a
Author: Jarek Potiuk <ja...@potiuk.com>
AuthorDate: Sun Dec 7 19:33:30 2025 +0100
[v3-1-test] Fix airflow/task-sdk relase PMC checks (#59164) (#59165)
There were few small issues with the airflow/task-sdk release-checks:
* one cd was missing in the process
* task-sdk folder was not pointing to the right sub-folder.
* Dockerfile.pmc should use constraints and for task-sdk they
should install also apache-airflow and apache-airflow-core
as those are not dependencies of task-sdk and pip failed
to find them without --pre flag.
(cherry picked from commit ad6961dc447001e9aa1b6080dffb0f7d51eb060e)
---
dev/README_RELEASE_AIRFLOW.md | 5 +-
dev/breeze/doc/09_release_management_tasks.rst | 49 +-
.../doc/images/output_release-management.svg | 64 +--
.../doc/images/output_release-management.txt | 2 +-
...management_generate-issue-content-providers.svg | 32 +-
...management_generate-issue-content-providers.txt | 2 +-
...lease-management_prepare-helm-chart-package.svg | 32 +-
...lease-management_prepare-helm-chart-package.txt | 2 +-
...e-management_prepare-provider-distributions.svg | 2 +-
...e-management_prepare-provider-distributions.txt | 2 +-
...e-management_prepare-provider-documentation.svg | 102 +++--
...e-management_prepare-provider-documentation.txt | 2 +-
.../output_release-management_publish-docs.svg | 2 +-
.../output_release-management_publish-docs.txt | 2 +-
.../output_release-management_tag-providers.svg | 37 +-
.../output_release-management_tag-providers.txt | 2 +-
...se-management_update-providers-next-version.svg | 95 ++++
...se-management_update-providers-next-version.txt | 1 +
.../output_setup_check-all-params-in-groups.svg | 20 +-
.../output_setup_check-all-params-in-groups.txt | 2 +-
.../output_setup_regenerate-command-images.svg | 22 +-
.../output_setup_regenerate-command-images.txt | 2 +-
.../commands/release_management_commands.py | 503 +++++++++++++++------
.../commands/release_management_commands_config.py | 51 ++-
.../airflow_breeze/utils/check_release_files.py | 8 +-
.../src/airflow_breeze/utils/click_validators.py | 52 +++
dev/breeze/src/airflow_breeze/utils/path_utils.py | 11 +
27 files changed, 808 insertions(+), 298 deletions(-)
diff --git a/dev/README_RELEASE_AIRFLOW.md b/dev/README_RELEASE_AIRFLOW.md
index 9bbfd99bca3..598cc4e9096 100644
--- a/dev/README_RELEASE_AIRFLOW.md
+++ b/dev/README_RELEASE_AIRFLOW.md
@@ -712,6 +712,7 @@ As a PMC member, you should be able to clone the SVN repository
or update it if you already checked it out:
```shell script
+cd ${AIRFLOW_REPO_ROOT}
cd ..
[ -d asf-dist ] || svn checkout --depth=immediates https://dist.apache.org/repos/dist asf-dist
svn update --set-depth=infinity asf-dist/dev/airflow
@@ -728,12 +729,12 @@ Optionally you can use the `breeze release-management check-release-files` comma
present in SVN. This command may also help with verifying installation of the packages.
```shell script
-breeze release-management check-release-files airflow --version ${VERSION_RC} --path-to-airflow-svn "${PATH_TO_AIRFLOW_SVN}"
+breeze release-management check-release-files airflow --version ${VERSION_RC}
```
```shell script
-breeze release-management check-release-files task-sdk --version ${TASK_SDK_VERSION_RC} --path-to-airflow-svn "${PATH_TO_AIRFLOW_SVN}/task-sdk"
+breeze release-management check-release-files task-sdk --version ${TASK_SDK_VERSION_RC}
```
## Licence check
diff --git a/dev/breeze/doc/09_release_management_tasks.rst b/dev/breeze/doc/09_release_management_tasks.rst
index 731942706c7..3d3108c6df2 100644
--- a/dev/breeze/doc/09_release_management_tasks.rst
+++ b/dev/breeze/doc/09_release_management_tasks.rst
@@ -94,6 +94,32 @@ When testing from HEAD of the branch when the tag
:width: 100%
:alt: Breeze release-management prepare-tarball
+Validating Release Candidate for PMC
+"""""""""""""""""""""""""""""""""""""
+
+PMC members can use Breeze to automate verification of release candidates instead of manually
+running multiple verification steps. This command validates SVN files, GPG signatures, SHA512
+checksums, Apache RAT licenses, and reproducible builds.
+
+.. code-block:: bash
+
+ breeze release-management validate-rc-by-pmc --distribution airflow --version 3.1.3rc1 --task-sdk-version 1.1.3rc1 --svn-path ~/asf-dist/dev/airflow
+
+You can run individual checks by specifying the ``--checks`` flag:
+
+.. code-block:: bash
+
+ breeze release-management validate-rc-by-pmc \
+ --distribution airflow \
+ --version 3.1.3rc1 \
+ --svn-path ~/asf-dist/dev/airflow \
+ --checks svn,signatures,checksums,licenses
+
+.. image:: ./images/output_release-management_validate-rc-by-pmc.svg
+ :target: https://raw.githubusercontent.com/apache/airflow/main/dev/breeze/doc/images/output_release-management_validate-rc-by-pmc.svg
+ :width: 100%
+ :alt: Breeze release-management validate-rc-by-pmc
+
Start minor branch of Airflow
"""""""""""""""""""""""""""""
@@ -281,10 +307,10 @@ This command can be utilized to manage git tags for providers within the Airflow
Sometimes in cases when there is a connectivity issue to GitHub, it might be possible that local tags get created and lead to annoying errors.
The default behaviour would be to clean such local tags up.
-The flag ``--clean-local-tags`` can be used to delete the local tags.
+The flag ``--clean-tags`` can be used to delete the local tags.
However, If you want to disable this behaviour, set the envvar CLEAN_LOCAL_TAGS to false or use the
-``--no-clean-local-tags`` flag.
+``--no-clean-tags`` flag.
.. code-block:: bash
@@ -381,6 +407,23 @@ You can also add ``--answer yes`` to perform non-interactive build.
:width: 100%
:alt: Breeze prepare-provider-documentation
+Updating provider next version
+""""""""""""""""""""""""""""""
+
+You can use Breeze to update references to other providers automatically to the
+next version of dependent providers, when they are commented with ``# use next version``.
+
+The below example perform the upgrade.
+
+.. code-block:: bash
+
+ breeze release-management update-providers-next-version
+
+
+.. image:: ./images/output_release-management_update-providers-next-version.svg
+ :target: https://raw.githubusercontent.com/apache/airflow/main/dev/breeze/doc/images/output_release-management_update-providers-next-version.svg
+ :alt: Breeze update-providers-next-version
+
Preparing providers
"""""""""""""""""""
@@ -428,7 +471,7 @@ Installing providers
""""""""""""""""""""
In some cases we want to just see if the providers generated can be installed with Airflow without
-verifying them. This happens automatically on CI for sdist pcackages but you can also run it manually if you
+verifying them. This happens automatically on CI for ``sdist`` packages but you can also run it manually if you
just prepared providers and they are present in ``dist`` folder.
.. code-block:: bash
diff --git a/dev/breeze/doc/images/output_release-management.svg b/dev/breeze/doc/images/output_release-management.svg
index a58d6ee577c..4b0ea7d3f6f 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 1294.3999999999999" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1318.8" xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@@ -42,7 +42,7 @@
<defs>
<clipPath id="breeze-release-management-clip-terminal">
- <rect x="0" y="0" width="1463.0" height="1243.3999999999999" />
+ <rect x="0" y="0" width="1463.0" height="1267.8" />
</clipPath>
<clipPath id="breeze-release-management-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -194,9 +194,12 @@
<clipPath id="breeze-release-management-line-49">
<rect x="0" y="1197.1" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="breeze-release-management-line-50">
+ <rect x="0" y="1221.5" width="1464" height="24.65"/>
+ </clipPath>
</defs>
- <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1292.4" rx="8"/><text class="breeze-release-management-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: release-management</text>
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1316.8" rx="8"/><text class="breeze-release-management-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: 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"/>
@@ -230,33 +233,34 @@
</text><text class="breeze-release-management-r5" x="0" y="532.4" textLength="1464" clip-path="url(#breeze-release-management-line-21)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-line-21)">
</text><text class="breeze-release-management-r5" x="0" y="556.8" textLength="24.4" clip-path="url(#breeze-release-management-line-22)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="556.8" textLength="341.6" clip-path="url(#breeze-release-management-line-22)"> Providers release commands </text><text class="breeze-release-management-r5" x="366" y="556.8" textLength="1073.6" clip-path="url(#breeze-release-management-line-22)">────────────────────────── [...]
</text><text class="breeze-release-management-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-line-23)">│</text><text class="breeze-release-management-r4" x="24.4" y="581.2" textLength="439.2" clip-path="url(#breeze-release-management-line-23)">prepare-provider-documentation      </text><text class="breeze-release-management-r1" x="488" y="581.2" textLength="951.6" clip-path="url(#breeze-release-management-line-23)">Prepare [...]
-</text><text class="breeze-release-management-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-line-24)">│</text><text class="breeze-release-management-r4" x="24.4" y="605.6" textLength="439.2" clip-path="url(#breeze-release-management-line-24)">prepare-provider-distributions      </text><text class="breeze-release-management-r1" x="488" y="605.6" textLength="951.6" clip-path="url(#breeze-release-management-line-24)">Prepare [...]
-</text><text class="breeze-release-management-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-line-25)">│</text><text class="breeze-release-management-r4" x="24.4" y="630" textLength="439.2" clip-path="url(#breeze-release-management-line-25)">install-provider-distributions      </text><text class="breeze-release-management-r1" x="488" y="630" textLength="951.6" clip-path="url(#breeze-release-management-line-25)">Installs pr [...]
-</text><text class="breeze-release-management-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-line-26)">│</text><text class="breeze-release-management-r4" x="24.4" y="654.4" textLength="439.2" clip-path="url(#breeze-release-management-line-26)">verify-provider-distributions       </text><text class="breeze-release-management-r1" x="488" y="654.4" textLength="951.6" clip-path="url(#breeze-release-management-line-26)">Verif [...]
-</text><text class="breeze-release-management-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-line-27)">│</text><text class="breeze-release-management-r4" x="24.4" y="678.8" textLength="439.2" clip-path="url(#breeze-release-management-line-27)">generate-providers-metadata         </text><text class="breeze-release-management-r1" x="488" y="678.8" textLength="951.6" clip-path="url(#breeze-release-management-line- [...]
-</text><text class="breeze-release-management-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-line-28)">│</text><text class="breeze-release-management-r4" x="24.4" y="703.2" textLength="439.2" clip-path="url(#breeze-release-management-line-28)">generate-issue-content-providers    </text><text class="breeze-release-management-r1" x="488" y="703.2" textLength="951.6" clip-path="url(#breeze-release-management-line-28)">Generates conte [...]
-</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        </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                       </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="427" clip-path="url(#breeze-release-management-line-32)"> Airflow Task SDK release commands </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            </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)"> airflowctl release commands </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               </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)"> Other release commands </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     </text><text class="breeze-release-management-r1" x="341.6" y="971.6" textLength="1098" clip-path="url(#breeze-release-management-line-39)">Command to 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   </text><text class="breeze-release-management-r1" x="341.6" y="996" textLength="1098" clip-path="url(#breeze-release-management-line-40)">Prepares python client 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            </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    </text><text class="breeze-release-management-r1" x="341.6" y="1044.8" textLength="1098" clip-path="url(#breeze-release-management-line-42)">Generates pinned 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      </text><text class="breeze-release-management-r1" x="341.6" y="1069.2" textLength="1098" clip-path="url(#breeze-release-management-line-43)">Update 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      </text><text class="breeze-release-management-r1" x="341.6" y="1093.6" textLength="1098" clip-path="url(#breeze-release-management-line-44)">Publishes doc [...]
-</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="292.8" clip-path="url(#breeze-release-management-line-45)">check-release-files     </text><text class="breeze-release-management-r1" x="341.6" y="1118" textLength="1098" clip-path="url(#breeze-release-management-line-45)">Verify that all [...]
-</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="1166.8" textLength="24.4" clip-path="url(#breeze-release-management-line-47)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1166.8" textLength="122" clip-path="url(#breeze-release-management-line-47)"> Commands </text><text class="breeze-release-management-r5" x="146.4" y="1166.8" textLength="1293.2" clip-path="url(#breeze-release-management-line-47)">─────────────────────────────────────────────────── [...]
-</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)">constraints-version-check</text><text class="breeze-release-management-r1" x="353.8" y="1191.2" textLength="1085.8" clip-path="url(#breeze-release-management-line-48)">Check constraints against releas [...]
-</text><text class="breeze-release-management-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-line-49)">│</text><text class="breeze-release-management-r4" x="24.4" y="1215.6" textLength="305" clip-path="url(#breeze-release-management-line-49)">merge-prod-images        </text><text class="breeze-release-management-r1" x="353.8" y="1215.6" textLength="1085.8" clip-path="url(#breeze-release-management-line-49)">Merge&# [...]
-</text><text class="breeze-release-management-r5" x="0" y="1240" textLength="1464" clip-path="url(#breeze-release-management-line-50)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-line-50)">
+</text><text class="breeze-release-management-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-line-24)">│</text><text class="breeze-release-management-r4" x="24.4" y="605.6" textLength="439.2" clip-path="url(#breeze-release-management-line-24)">update-providers-next-version       </text><text class="breeze-release-management-r1" x="488" y="605.6" textLength="951.6" clip-path="url(#breeze-release-management-line-24)">Updat [...]
+</text><text class="breeze-release-management-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-line-25)">│</text><text class="breeze-release-management-r4" x="24.4" y="630" textLength="439.2" clip-path="url(#breeze-release-management-line-25)">prepare-provider-distributions      </text><text class="breeze-release-management-r1" x="488" y="630" textLength="951.6" clip-path="url(#breeze-release-management-line-25)">Prepare sdi [...]
+</text><text class="breeze-release-management-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-line-26)">│</text><text class="breeze-release-management-r4" x="24.4" y="654.4" textLength="439.2" clip-path="url(#breeze-release-management-line-26)">install-provider-distributions      </text><text class="breeze-release-management-r1" x="488" y="654.4" textLength="951.6" clip-path="url(#breeze-release-management-line-26)">Installs&# [...]
+</text><text class="breeze-release-management-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-line-27)">│</text><text class="breeze-release-management-r4" x="24.4" y="678.8" textLength="439.2" clip-path="url(#breeze-release-management-line-27)">verify-provider-distributions       </text><text class="breeze-release-management-r1" x="488" y="678.8" textLength="951.6" clip-path="url(#breeze-release-management-line-27)">Verif [...]
+</text><text class="breeze-release-management-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-line-28)">│</text><text class="breeze-release-management-r4" x="24.4" y="703.2" textLength="439.2" clip-path="url(#breeze-release-management-line-28)">generate-providers-metadata         </text><text class="breeze-release-management-r1" x="488" y="703.2" textLength="951.6" clip-path="url(#breeze-release-management-line- [...]
+</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)">generate-issue-content-providers    </text><text class="breeze-release-management-r1" x="488" y="727.6" textLength="951.6" clip-path="url(#breeze-release-management-line-29)">Generates conte [...]
+</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)">clean-old-provider-artifacts        </text><text class="breeze-release-management-r1" x="488" y="752" textLength="951.6" clip-path="url(#breeze-release-management-line-30)">Cleans [...]
+</text><text class="breeze-release-management-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-line-31)">│</text><text class="breeze-release-management-r4" x="24.4" y="776.4" textLength="439.2" clip-path="url(#breeze-release-management-line-31)">tag-providers                       </text><text class="breeze-release-management-r1" x="488" y="776 [...]
+</text><text class="breeze-release-management-r5" x="0" y="800.8" textLength="1464" clip-path="url(#breeze-release-management-line-32)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-line-32)">
+</text><text class="breeze-release-management-r5" x="0" y="825.2" textLength="24.4" clip-path="url(#breeze-release-management-line-33)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="825.2" textLength="427" clip-path="url(#breeze-release-management-line-33)"> Airflow Task SDK release commands </text><text class="breeze-release-management-r5" x="451.4" y="825.2" textLength="988.2" clip-path="url(#breeze-release-management-line-33)">────────── [...]
+</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="512.4" clip-path="url(#breeze-release-management-line-34)">prepare-task-sdk-distributions            </text><text class="breeze-release-management-r1" x="561.2" y="849.6" textLength="878.4" clip-path="url(#breeze-r [...]
+</text><text class="breeze-release-management-r5" x="0" y="874" textLength="1464" clip-path="url(#breeze-release-management-line-35)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-release-management-line-35)">
+</text><text class="breeze-release-management-r5" x="0" y="898.4" textLength="24.4" clip-path="url(#breeze-release-management-line-36)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="898.4" textLength="353.8" clip-path="url(#breeze-release-management-line-36)"> airflowctl release commands </text><text class="breeze-release-management-r5" x="378.2" y="898.4" textLength="1061.4" clip-path="url(#breeze-release-management-line-36)">─────────────────────── [...]
+</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="585.6" clip-path="url(#breeze-release-management-line-37)">prepare-airflow-ctl-distributions               </text><text class="breeze-release-management-r1" x="634.4" y="922.8" textLength="805.2" cli [...]
+</text><text class="breeze-release-management-r5" x="0" y="947.2" textLength="1464" clip-path="url(#breeze-release-management-line-38)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-line-38)">
+</text><text class="breeze-release-management-r5" x="0" y="971.6" textLength="24.4" clip-path="url(#breeze-release-management-line-39)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="971.6" textLength="292.8" clip-path="url(#breeze-release-management-line-39)"> Other release commands </text><text class="breeze-release-management-r5" x="317.2" y="971.6" textLength="1122.4" clip-path="url(#breeze-release-management-line-39)">──────────────────────────── [...]
+</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)">add-back-references     </text><text class="breeze-release-management-r1" x="341.6" y="996" textLength="1098" clip-path="url(#breeze-release-management-line-40)">Command to add ba [...]
+</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)">prepare-python-client   </text><text class="breeze-release-management-r1" x="341.6" y="1020.4" textLength="1098" clip-path="url(#breeze-release-management-line-41)">Prepares python client& [...]
+</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)">publish-docs            </text><text class="breeze-release-management-r1" x="341.6" y="1044.8" textLength="1098" clip-path="url(#breeze-release-managemen [...]
+</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)">generate-constraints    </text><text class="breeze-release-management-r1" x="341.6" y="1069.2" textLength="1098" clip-path="url(#breeze-release-management-line-43)">Generates pinned c [...]
+</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)">update-constraints      </text><text class="breeze-release-management-r1" x="341.6" y="1093.6" textLength="1098" clip-path="url(#breeze-release-management-line-44)">Update releas [...]
+</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="292.8" clip-path="url(#breeze-release-management-line-45)">publish-docs-to-s3      </text><text class="breeze-release-management-r1" x="341.6" y="1118" textLength="1098" clip-path="url(#breeze-release-management-line-45)">Publishes docs  [...]
+</text><text class="breeze-release-management-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-line-46)">│</text><text class="breeze-release-management-r4" x="24.4" y="1142.4" textLength="292.8" clip-path="url(#breeze-release-management-line-46)">check-release-files     </text><text class="breeze-release-management-r1" x="341.6" y="1142.4" textLength="1098" clip-path="url(#breeze-release-management-line-46)">Verify that a [...]
+</text><text class="breeze-release-management-r5" x="0" y="1166.8" textLength="1464" clip-path="url(#breeze-release-management-line-47)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-line-47)">
+</text><text class="breeze-release-management-r5" x="0" y="1191.2" textLength="24.4" clip-path="url(#breeze-release-management-line-48)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1191.2" textLength="122" clip-path="url(#breeze-release-management-line-48)"> Commands </text><text class="breeze-release-management-r5" x="146.4" y="1191.2" textLength="1293.2" clip-path="url(#breeze-release-management-line-48)">─────────────────────────────────────────────────── [...]
+</text><text class="breeze-release-management-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-line-49)">│</text><text class="breeze-release-management-r4" x="24.4" y="1215.6" textLength="305" clip-path="url(#breeze-release-management-line-49)">constraints-version-check</text><text class="breeze-release-management-r1" x="353.8" y="1215.6" textLength="1085.8" clip-path="url(#breeze-release-management-line-49)">Check constraints against releas [...]
+</text><text class="breeze-release-management-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-line-50)">│</text><text class="breeze-release-management-r4" x="24.4" y="1240" textLength="305" clip-path="url(#breeze-release-management-line-50)">merge-prod-images        </text><text class="breeze-release-management-r1" x="353.8" y="1240" textLength="1085.8" clip-path="url(#breeze-release-management-line-50)">Merge pr [...]
+</text><text class="breeze-release-management-r5" x="0" y="1264.4" textLength="1464" clip-path="url(#breeze-release-management-line-51)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-line-51)">
</text>
</g>
</g>
diff --git a/dev/breeze/doc/images/output_release-management.txt b/dev/breeze/doc/images/output_release-management.txt
index 04d1453a712..74e81545457 100644
--- a/dev/breeze/doc/images/output_release-management.txt
+++ b/dev/breeze/doc/images/output_release-management.txt
@@ -1 +1 @@
-eac5e457db3b3fa57c5180ad88ee7c05
+adf95164020fa37164c778e10dcdaa36
diff --git a/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.svg b/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.svg
index 16a1bc10274..1036ffeb24e 100644
--- a/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.svg
+++ b/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 757.5999999999999" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 733.1999999999999" 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-generate-issue-content-providers-clip-terminal">
- <rect x="0" y="0" width="1463.0" height="706.5999999999999" />
+ <rect x="0" y="0" width="1463.0" height="682.1999999999999" />
</clipPath>
<clipPath id="breeze-release-management-generate-issue-content-providers-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -126,12 +126,9 @@
<clipPath id="breeze-release-management-generate-issue-content-providers-line-26">
<rect x="0" y="635.9" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="breeze-release-management-generate-issue-content-providers-line-27">
- <rect x="0" y="660.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="755.6" rx="8"/><text class="breeze-release-management-generate-issue-content-providers-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: release-management generate-issue-content-providers</text>
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="731.2" rx="8"/><text class="breeze-release-management-generate-issue-content-providers-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: release-management generate-issue-content-providers</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -158,18 +155,17 @@
</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="12.2" y="361.6" textLength="585.6" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-14)">Generates content for issue to test the release.</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-14)">
</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-15)">
</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="410.4" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-16)">╭─</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="24.4" y="410.4" textLength="366" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-16)"> Generate issue content flags </text><text class="breeze-re [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-17)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="434.8" textLength="219.6" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-17)">--disable-progress</text><text class="breeze-release-management-generate-issue-cont [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-18)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="459.2" textLength="219.6" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-18)">--excluded-pr-list</text><text class="breeze-release-management-generate-issue-cont [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-19)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="483.6" textLength="170.8" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-19)">--github-token</text><text class="breeze-release-management-generate-issue-content- [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-20)">│</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="378.2" y="508" textLength="1061.4" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-20)">variable set. Can be generated with:     [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-21)">│</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="378.2" y="532.4" textLength="1061.4" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-21)">https://github.com/settings/tokens/new?description=Read%20sssues&scopes=repo: [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-22)">│</text><text class="breeze-release-management-generate-issue-content-providers-r6" x="378.2" y="556.8" textLength="1061.4" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-22)">(TEXT)             [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-23)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="581.2" textLength="292.8" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-23)">--only-available-in-dist</text><text class="breeze-release-management-generate-issu [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-24)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="605.6" textLength="305" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-24)">--no-include-browser-link</text><text class="breeze-release-management-generate-issue [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="630" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-25)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-release-management-generate-iss [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="654.4" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-26)">╭─</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="24.4" y="654.4" textLength="195.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-26)"> Common options </text><text class="breeze-release-management-gener [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-27)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="678.8" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-27)">--help</text><text class="breeze-release-management-generate-issue-content-providers [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="703.2" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-28)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-generate [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-17)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="434.8" textLength="219.6" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-17)">--disable-progress</text><text class="breeze-release-management-generate-issue-cont [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-18)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="459.2" textLength="219.6" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-18)">--excluded-pr-list</text><text class="breeze-release-management-generate-issue-cont [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-19)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="483.6" textLength="170.8" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-19)">--github-token</text><text class="breeze-release-management-generate-issue-content- [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-20)">│</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="366" y="508" textLength="1073.6" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-20)">variable set. Can be generated with:    &# [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-21)">│</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="366" y="532.4" textLength="1073.6" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-21)">https://github.com/settings/tokens/new?description=Read%20sssues&scopes=repo:st [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-22)">│</text><text class="breeze-release-management-generate-issue-content-providers-r6" x="366" y="556.8" textLength="1073.6" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-22)">(TEXT)              [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-23)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="581.2" textLength="292.8" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-23)">--only-available-in-dist</text><text class="breeze-release-management-generate-issu [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="605.6" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-24)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-generate [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="630" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-25)">╭─</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="24.4" y="630" textLength="195.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-25)"> Common options </text><text class="breeze-release-management-generate- [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-26)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="654.4" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-26)">--help</text><text class="breeze-release-management-generate-issue-content-providers [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="678.8" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-27)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-generate [...]
</text>
</g>
</g>
diff --git a/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.txt b/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.txt
index 9d4f5e8d26c..2e7720d4e17 100644
--- a/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.txt
@@ -1 +1 @@
-c025f2c9ea1fa5f8b3e3e5b8f01dcd6d
+4a8d979dd9f841744b5b400de502144b
diff --git a/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.svg b/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.svg
index 996c438385a..f07b12057bd 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.svg
+++ b/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.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>
@@ -43,7 +43,7 @@
<defs>
<clipPath id="breeze-release-management-prepare-helm-chart-package-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-helm-chart-package-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -81,9 +81,18 @@
<clipPath id="breeze-release-management-prepare-helm-chart-package-line-11">
<rect x="0" y="269.9" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="breeze-release-management-prepare-helm-chart-package-line-12">
+ <rect x="0" y="294.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-prepare-helm-chart-package-line-13">
+ <rect x="0" y="318.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-prepare-helm-chart-package-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-helm-chart-package-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: release-management prepare-helm-chart-package</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-helm-chart-package-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: release-management prepare-helm-chart-package</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -99,13 +108,16 @@
</text><text class="breeze-release-management-prepare-helm-chart-package-r1" x="12.2" y="93.2" textLength="341.6" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-3)">Prepares helm chart package.</text><text class="breeze-release-management-prepare-helm-chart-package-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-3)">
</text><text class="breeze-release-management-prepare-helm-chart-package-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-4)">
</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-5)">╭─</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="24.4" y="142" textLength="183" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-5)"> Package flags </text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="207. [...]
-</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-6)">│</text><text class="breeze-release-management-prepare-helm-chart-package-r4" x="24.4" y="166.4" textLength="146.4" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-6)">--sign-email</text><text class="breeze-release-management-prepare-helm-chart-package-r1" x="219.6" y="166.4" [...]
-</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="0" y="190.8" textLength="1464" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-7)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-prepare-helm-chart-package-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package- [...]
-</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="0" y="215.2" textLength="24.4" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-8)">╭─</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="24.4" y="215.2" textLength="195.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-8)"> Common options </text><text class="breeze-release-management-prepare-helm-chart-package-r5" [...]
-</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-9)">│</text><text class="breeze-release-management-prepare-helm-chart-package-r4" x="24.4" y="239.6" textLength="109.8" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-9)">--dry-run</text><text class="breeze-release-management-prepare-helm-chart-package-r7" x="158.6" y="239.6" tex [...]
-</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-10)">│</text><text class="breeze-release-management-prepare-helm-chart-package-r4" x="24.4" y="264" textLength="109.8" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-10)">--verbose</text><text class="breeze-release-management-prepare-helm-chart-package-r7" x="158.6" y="264" textLen [...]
-</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-11)">│</text><text class="breeze-release-management-prepare-helm-chart-package-r4" x="24.4" y="288.4" textLength="73.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-11)">--help</text><text class="breeze-release-management-prepare-helm-chart-package-r7" x="158.6" y="288.4" textL [...]
-</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="0" y="312.8" textLength="1464" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-prepare-helm-chart-package-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package [...]
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-6)">│</text><text class="breeze-release-management-prepare-helm-chart-package-r4" x="24.4" y="166.4" textLength="146.4" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-6)">--sign-email</text><text class="breeze-release-management-prepare-helm-chart-package-r1" x="268.4" y="166.4" [...]
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-7)">│</text><text class="breeze-release-management-prepare-helm-chart-package-r4" x="24.4" y="190.8" textLength="195.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-7)">--version-suffix</text><text class="breeze-release-management-prepare-helm-chart-package-r1" x="268.4" y="190 [...]
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-8)">│</text><text class="breeze-release-management-prepare-helm-chart-package-r1" x="268.4" y="215.2" textLength="1171.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-8)">replaced with staging URLs.            [...]
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-9)">│</text><text class="breeze-release-management-prepare-helm-chart-package-r6" x="268.4" y="239.6" textLength="1171.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-9)">(TEXT)                  [...]
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="0" y="264" textLength="1464" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-10)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-prepare-helm-chart-package-r1" x="1464" y="264" textLength="12.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-10)">
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="0" y="288.4" textLength="24.4" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-11)">╭─</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="24.4" y="288.4" textLength="195.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-11)"> Common options </text><text class="breeze-release-management-prepare-helm-chart-package-r5 [...]
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-12)">│</text><text class="breeze-release-management-prepare-helm-chart-package-r4" x="24.4" y="312.8" textLength="109.8" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-12)">--dry-run</text><text class="breeze-release-management-prepare-helm-chart-package-r7" x="158.6" y="312.8" t [...]
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-13)">│</text><text class="breeze-release-management-prepare-helm-chart-package-r4" x="24.4" y="337.2" textLength="109.8" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-13)">--verbose</text><text class="breeze-release-management-prepare-helm-chart-package-r7" x="158.6" y="337.2" t [...]
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-14)">│</text><text class="breeze-release-management-prepare-helm-chart-package-r4" x="24.4" y="361.6" textLength="73.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-14)">--help</text><text class="breeze-release-management-prepare-helm-chart-package-r7" x="158.6" y="361.6" textL [...]
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" x="0" y="386" textLength="1464" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-15)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-prepare-helm-chart-package-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-15)">
</text>
</g>
</g>
diff --git a/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.txt b/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.txt
index 6051dbc2d79..73731275785 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.txt
@@ -1 +1 @@
-27169c83fcbcca907a0b32a5c4faeb48
+4d19d7c6652330646ee94bf409c14787
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..ff5a15defb9 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
@@ -215,7 +215,7 @@
</text><text class="breeze-release-management-prepare-provider-distributions-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-distributions-line-29)">│</text><text class="breeze-release-management-prepare-provider-distributions-r1" x="475.8" y="727.6" textLength="963.8" clip-path="url(#breeze-release-management-prepare-provider-distributions-line-29)">.post1, .post2 etc.). Note the `.` is need in  [...]
</text><text class="breeze-release-management-prepare-provider-distributions-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-distributions-line-30)">│</text><text class="breeze-release-management-prepare-provider-distributions-r1" x="475.8" y="752" textLength="963.8" clip-path="url(#breeze-release-management-prepare-provider-distributions-line-30)">followed with +local_version         &# [...]
</text><text class="breeze-release-management-prepare-provider-distributions-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-distributions-line-31)">│</text><text class="breeze-release-management-prepare-provider-distributions-r7" x="475.8" y="776.4" textLength="963.8" clip-path="url(#breeze-release-management-prepare-provider-distributions-line-31)">(TEXT)               [...]
-</text><text class="breeze-release-management-prepare-provider-distributions-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-distributions-line-32)">│</text><text class="breeze-release-management-prepare-provider-distributions-r4" x="24.4" y="800.8" textLength="244" clip-path="url(#breeze-release-management-prepare-provider-distributions-line-32)">--distributions-list</text><text class="breeze-release-management-prepare-provider-distributi [...]
+</text><text class="breeze-release-management-prepare-provider-distributions-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-distributions-line-32)">│</text><text class="breeze-release-management-prepare-provider-distributions-r4" x="24.4" y="800.8" textLength="244" clip-path="url(#breeze-release-management-prepare-provider-distributions-line-32)">--distributions-list</text><text class="breeze-release-management-prepare-provider-distributi [...]
</text><text class="breeze-release-management-prepare-provider-distributions-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-distributions-line-33)">│</text><text class="breeze-release-management-prepare-provider-distributions-r1" x="475.8" y="825.2" textLength="963.8" clip-path="url(#breeze-release-management-prepare-provider-distributions-line-33)">documentation building, and document publishing. It is  [...]
</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 individual packages as arguments to every 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 passed as arguments.        &# [...]
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..8d2300bf36f 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
+92b4cf987fa3fa7bf32c06a96408a1c6
diff --git a/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.svg b/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.svg
index b615329317a..2b6b595341c 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.svg
+++ b/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1074.8" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1343.1999999999998" 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-documentation-clip-terminal">
- <rect x="0" y="0" width="1463.0" height="1023.8" />
+ <rect x="0" y="0" width="1463.0" height="1292.1999999999998" />
</clipPath>
<clipPath id="breeze-release-management-prepare-provider-documentation-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -168,9 +168,42 @@
<clipPath id="breeze-release-management-prepare-provider-documentation-line-40">
<rect x="0" y="977.5" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="breeze-release-management-prepare-provider-documentation-line-41">
+ <rect x="0" y="1001.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-prepare-provider-documentation-line-42">
+ <rect x="0" y="1026.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-prepare-provider-documentation-line-43">
+ <rect x="0" y="1050.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-prepare-provider-documentation-line-44">
+ <rect x="0" y="1075.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-prepare-provider-documentation-line-45">
+ <rect x="0" y="1099.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-prepare-provider-documentation-line-46">
+ <rect x="0" y="1123.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-prepare-provider-documentation-line-47">
+ <rect x="0" y="1148.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-prepare-provider-documentation-line-48">
+ <rect x="0" y="1172.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-prepare-provider-documentation-line-49">
+ <rect x="0" y="1197.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-prepare-provider-documentation-line-50">
+ <rect x="0" y="1221.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-prepare-provider-documentation-line-51">
+ <rect x="0" y="1245.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="1072.8" rx="8"/><text class="breeze-release-management-prepare-provider-documentation-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: release-management prepare-provider-documentation</text>
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1341.2" rx="8"/><text class="breeze-release-management-prepare-provider-documentation-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: release-management prepare-provider-documentation</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -196,32 +229,43 @@
</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-13)">
</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="12.2" y="361.6" textLength="780.8" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-14)">Prepare CHANGELOG, README and COMMITS information for providers.</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation- [...]
</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-15)">
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="410.4" textLength="24.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-16)">╭─</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="24.4" y="410.4" textLength="512.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-16)"> Provider documentation preparation flags </text><text class="bre [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-17)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="434.8" textLength="158.6" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-17)">--base-branch</text><text class="breeze-release-management-prepare-provider-documentation-r [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-18)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="451.4" y="459.2" textLength="988.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-18)">old branch)            &# [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-19)">│</text><text class="breeze-release-management-prepare-provider-documentation-r6" x="451.4" y="483.6" textLength="988.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-19)">(TEXT)               [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-20)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="508" textLength="231.8" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-20)">--github-repository</text><text class="breeze-release-management-prepare-provider-documentation [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-21)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="532.4" textLength="353.8" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-21)">--include-not-ready-providers</text><text class="breeze-release-management-prepare-provider [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-22)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="556.8" textLength="329.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-22)">--include-removed-providers</text><text class="breeze-release-management-prepare-provider-d [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-23)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="581.2" textLength="207.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-23)">--non-interactive</text><text class="breeze-release-management-prepare-provider-documentati [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-24)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="451.4" y="605.6" textLength="988.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-24)">confirms releasefor providers prepared for release - us [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-25)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="451.4" y="630" textLength="988.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-25)">non-interactive mode in CI.         [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-26)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="654.4" textLength="305" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-26)">--only-min-version-update</text><text class="breeze-release-management-prepare-provider-docum [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-27)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="451.4" y="678.8" textLength="988.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-27)">documentation              [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-28)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="703.2" textLength="292.8" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-28)">--reapply-templates-only</text><text class="breeze-release-management-prepare-provider-docu [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-29)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="451.4" y="727.6" textLength="988.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-29)">you need to regenerate documentation.      [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-30)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="752" textLength="195.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-30)">--skip-git-fetch</text><text class="breeze-release-management-prepare-provider-documentation-r1 [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-31)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="451.4" y="776.4" textLength="988.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-31)">default, the remote is recreated and fetched to ma [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-32)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="451.4" y="800.8" textLength="988.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-32)">and that recent commits are not missing    [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-33)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="825.2" textLength="195.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-33)">--skip-changelog</text><text class="breeze-release-management-prepare-provider-documentatio [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-34)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="849.6" textLength="158.6" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-34)">--skip-readme</text><text class="breeze-release-management-prepare-provider-documentation-r [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="874" textLength="1464" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-35)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-d [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="898.4" textLength="24.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-36)">╭─</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="24.4" y="898.4" textLength="195.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-36)"> Common options </text><text class="breeze-release-management-prepare-provi [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-37)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="922.8" textLength="109.8" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-37)">--verbose</text><text class="breeze-release-management-prepare-provider-documentation-r7" x [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-38)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="947.2" textLength="97.6" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-38)">--answer</text><text class="breeze-release-management-prepare-provider-documentation-r7" x=" [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-39)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="971.6" textLength="109.8" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-39)">--dry-run</text><text class="breeze-release-management-prepare-provider-documentation-r7" x [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-40)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="996" textLength="73.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-40)">--help</text><text class="breeze-release-management-prepare-provider-documentation-r7" x="158.6" [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="1020.4" textLength="1464" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-41)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-prepare-prov [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="410.4" textLength="24.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-16)">╭─</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="24.4" y="410.4" textLength="378.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-16)"> Documentation generation mode </text><text class="breeze-release-mana [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-17)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="434.8" textLength="170.8" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-17)">--release-date</text><text class="breeze-release-management-prepare-provider-documentation- [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-18)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="378.2" y="459.2" textLength="1061.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-18)">2025-11-16 or 2025-11-16_01).        &# [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-19)">│</text><text class="breeze-release-management-prepare-provider-documentation-r6" x="378.2" y="483.6" textLength="1061.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-19)">(TEXT)               [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-20)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="508" textLength="244" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-20)">--incremental-update</text><text class="breeze-release-management-prepare-provider-documentation- [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-21)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="378.2" y="532.4" textLength="1061.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-21)">changes.              [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-22)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="556.8" textLength="305" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-22)">--only-min-version-update</text><text class="breeze-release-management-prepare-provider-docum [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-23)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="378.2" y="581.2" textLength="1061.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-23)">documentation             [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-24)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="605.6" textLength="292.8" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-24)">--reapply-templates-only</text><text class="breeze-release-management-prepare-provider-docu [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-25)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="378.2" y="630" textLength="1061.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-25)">need to regenerate documentation.        [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-26)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="654.4" textLength="207.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-26)">--non-interactive</text><text class="breeze-release-management-prepare-provider-documentati [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-27)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="378.2" y="678.8" textLength="1061.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-27)">confirms releasefor providers prepared for release - u [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-28)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="378.2" y="703.2" textLength="1061.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-28)">non-interactive mode in CI.         [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="727.6" textLength="1464" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-29)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provid [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="752" textLength="24.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-30)">╭─</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="24.4" y="752" textLength="366" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-30)"> Select non-regular providers </text><text class="breeze-release-management- [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-31)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="776.4" textLength="353.8" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-31)">--include-not-ready-providers</text><text class="breeze-release-management-prepare-provider [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-32)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="800.8" textLength="329.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-32)">--include-removed-providers</text><text class="breeze-release-management-prepare-provider-d [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="825.2" textLength="1464" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-33)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provid [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="849.6" textLength="24.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-34)">╭─</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="24.4" y="849.6" textLength="146.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-34)"> Skip steps </text><text class="breeze-release-management-prepare-provider- [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-35)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="874" textLength="195.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-35)">--skip-git-fetch</text><text class="breeze-release-management-prepare-provider-documentation-r1 [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-36)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="268.4" y="898.4" textLength="1171.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-36)">remote is recreated and fetched to make sure that [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-37)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="268.4" y="922.8" textLength="1171.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-37)">not missing            & [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-38)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="947.2" textLength="195.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-38)">--skip-changelog</text><text class="breeze-release-management-prepare-provider-documentatio [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-39)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="971.6" textLength="158.6" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-39)">--skip-readme</text><text class="breeze-release-management-prepare-provider-documentation-r [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="996" textLength="1464" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-40)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-d [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="1020.4" textLength="24.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-41)">╭─</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="24.4" y="1020.4" textLength="219.6" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-41)"> Advanced options </text><text class="breeze-release-management-prepare-p [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-42)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="1044.8" textLength="158.6" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-42)">--base-branch</text><text class="breeze-release-management-prepare-provider-documentation [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-43)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="329.4" y="1069.2" textLength="1110.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-43)">branch)             &# [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-44)">│</text><text class="breeze-release-management-prepare-provider-documentation-r6" x="329.4" y="1093.6" textLength="1110.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-44)">(TEXT)              [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-45)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="1118" textLength="231.8" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-45)">--github-repository</text><text class="breeze-release-management-prepare-provider-documentati [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="1142.4" textLength="1464" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-46)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-prepare-prov [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="1166.8" textLength="24.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-47)">╭─</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="24.4" y="1166.8" textLength="195.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-47)"> Common options </text><text class="breeze-release-management-prepare-pro [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-48)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="1191.2" textLength="109.8" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-48)">--verbose</text><text class="breeze-release-management-prepare-provider-documentation-r7" [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-49)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="1215.6" textLength="97.6" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-49)">--answer</text><text class="breeze-release-management-prepare-provider-documentation-r7" x [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-50)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="1240" textLength="109.8" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-50)">--dry-run</text><text class="breeze-release-management-prepare-provider-documentation-r7" x=" [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-51)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="1264.4" textLength="73.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-51)">--help</text><text class="breeze-release-management-prepare-provider-documentation-r7" x=" [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="1288.8" textLength="1464" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-52)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="1464" y="1288.8" 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-documentation.txt b/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.txt
index 638ef96ff40..4be325bf750 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.txt
@@ -1 +1 @@
-b3476f20044a01072d03971ddea1b6c4
+df4caa6f639503f0f0da3fe91e7cf1b0
diff --git a/dev/breeze/doc/images/output_release-management_publish-docs.svg b/dev/breeze/doc/images/output_release-management_publish-docs.svg
index 91f36f758b8..149b660fda1 100644
--- a/dev/breeze/doc/images/output_release-management_publish-docs.svg
+++ b/dev/breeze/doc/images/output_release-management_publish-docs.svg
@@ -211,7 +211,7 @@
</text><text class="breeze-release-management-publish-docs-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-line-23)">│</text><text class="breeze-release-management-publish-docs-r1" x="488" y="581.2" textLength="951.6" clip-path="url(#breeze-release-management-publish-docs-line-23)">matching the full package name, for example `apache-airflow-providers-*`.     </text><text class="breeze [...]
</text><text class="breeze-release-management-publish-docs-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-line-24)">│</text><text class="breeze-release-management-publish-docs-r1" x="488" y="605.6" textLength="951.6" clip-path="url(#breeze-release-management-publish-docs-line-24)">Useful when you want to selectseveral similarly named packages together.      </text><tex [...]
</text><text class="breeze-release-management-publish-docs-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-line-25)">│</text><text class="breeze-release-management-publish-docs-r8" x="488" y="630" textLength="951.6" clip-path="url(#breeze-release-management-publish-docs-line-25)">(TEXT)                            [...]
-</text><text class="breeze-release-management-publish-docs-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-line-26)">│</text><text class="breeze-release-management-publish-docs-r4" x="61" y="654.4" textLength="244" clip-path="url(#breeze-release-management-publish-docs-line-26)">--distributions-list</text><text class="breeze-release-management-publish-docs-r1" x="488" y="654.4" textLength="951.6" clip-path="url(#breeze-release-management-publi [...]
+</text><text class="breeze-release-management-publish-docs-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-line-26)">│</text><text class="breeze-release-management-publish-docs-r4" x="61" y="654.4" textLength="244" clip-path="url(#breeze-release-management-publish-docs-line-26)">--distributions-list</text><text class="breeze-release-management-publish-docs-r1" x="488" y="654.4" textLength="951.6" clip-path="url(#breeze-release-management-publi [...]
</text><text class="breeze-release-management-publish-docs-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-line-27)">│</text><text class="breeze-release-management-publish-docs-r1" x="488" y="678.8" textLength="951.6" clip-path="url(#breeze-release-management-publish-docs-line-27)">documentation building, and document publishing. It is an easier alternative  </text><text class="breeze-rele [...]
</text><text class="breeze-release-management-publish-docs-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-line-28)">│</text><text class="breeze-release-management-publish-docs-r1" x="488" y="703.2" textLength="951.6" clip-path="url(#breeze-release-management-publish-docs-line-28)">to adding individual packages as arguments to every command. This overrides   </text><text class="b [...]
</text><text class="breeze-release-management-publish-docs-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-publish-docs-line-29)">│</text><text class="breeze-release-management-publish-docs-r1" x="488" y="727.6" textLength="951.6" clip-path="url(#breeze-release-management-publish-docs-line-29)">the packages passed as arguments.                   [...]
diff --git a/dev/breeze/doc/images/output_release-management_publish-docs.txt b/dev/breeze/doc/images/output_release-management_publish-docs.txt
index 7b07e4d1e09..32edfe4bad9 100644
--- a/dev/breeze/doc/images/output_release-management_publish-docs.txt
+++ b/dev/breeze/doc/images/output_release-management_publish-docs.txt
@@ -1 +1 @@
-90b3e65f6dfe76c5580f0cb3880e688a
+a67dcc78f2f47fb5e9a3081485d38a77
diff --git a/dev/breeze/doc/images/output_release-management_tag-providers.svg b/dev/breeze/doc/images/output_release-management_tag-providers.svg
index 00ac6b5bee3..11d454ad8f8 100644
--- a/dev/breeze/doc/images/output_release-management_tag-providers.svg
+++ b/dev/breeze/doc/images/output_release-management_tag-providers.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 416.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 464.79999999999995" xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@@ -37,12 +37,15 @@
.breeze-release-management-tag-providers-r3 { fill: #c5c8c6;font-weight: bold }
.breeze-release-management-tag-providers-r4 { fill: #68a0b3;font-weight: bold }
.breeze-release-management-tag-providers-r5 { fill: #868887 }
-.breeze-release-management-tag-providers-r6 { fill: #98a84b;font-weight: bold }
+.breeze-release-management-tag-providers-r6 { fill: #cc555a }
+.breeze-release-management-tag-providers-r7 { fill: #8d7b39 }
+.breeze-release-management-tag-providers-r8 { fill: #8a4346 }
+.breeze-release-management-tag-providers-r9 { fill: #98a84b;font-weight: bold }
</style>
<defs>
<clipPath id="breeze-release-management-tag-providers-clip-terminal">
- <rect x="0" y="0" width="1463.0" height="365.0" />
+ <rect x="0" y="0" width="1463.0" height="413.79999999999995" />
</clipPath>
<clipPath id="breeze-release-management-tag-providers-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -86,9 +89,15 @@
<clipPath id="breeze-release-management-tag-providers-line-13">
<rect x="0" y="318.7" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="breeze-release-management-tag-providers-line-14">
+ <rect x="0" y="343.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-tag-providers-line-15">
+ <rect x="0" y="367.5" width="1464" height="24.65"/>
+ </clipPath>
</defs>
- <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="414" rx="8"/><text class="breeze-release-management-tag-providers-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: release-management tag-providers</text>
+ <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-tag-providers-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: release-management tag-providers</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -104,15 +113,17 @@
</text><text class="breeze-release-management-tag-providers-r1" x="12.2" y="93.2" textLength="549" clip-path="url(#breeze-release-management-tag-providers-line-3)">Generates tags for airflow provider releases.</text><text class="breeze-release-management-tag-providers-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-3)">
</text><text class="breeze-release-management-tag-providers-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-4)">
</text><text class="breeze-release-management-tag-providers-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-release-management-tag-providers-line-5)">╭─</text><text class="breeze-release-management-tag-providers-r5" x="24.4" y="142" textLength="280.6" clip-path="url(#breeze-release-management-tag-providers-line-5)"> Add tags to providers </text><text class="breeze-release-management-tag-providers-r5" x="305" y="142" textLength="1134.6" clip-path="url(# [...]
-</text><text class="breeze-release-management-tag-providers-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-6)">│</text><text class="breeze-release-management-tag-providers-r4" x="24.4" y="166.4" textLength="219.6" clip-path="url(#breeze-release-management-tag-providers-line-6)">--clean-local-tags</text><text class="breeze-release-management-tag-providers-r1" x="244" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-t [...]
-</text><text class="breeze-release-management-tag-providers-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-7)">│</text><text class="breeze-release-management-tag-providers-r1" x="561.2" y="190.8" textLength="878.4" clip-path="url(#breeze-release-management-tag-providers-line-7)">avoid errors. The default behaviour would be to clean such local tags.  </text><text class="bre [...]
-</text><text class="breeze-release-management-tag-providers-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-8)">│</text><text class="breeze-release-management-tag-providers-r5" x="561.2" y="215.2" textLength="878.4" clip-path="url(#breeze-release-management-tag-providers-line-8)">[default: clean-local-tags]                     &# [...]
-</text><text class="breeze-release-management-tag-providers-r5" x="0" y="239.6" textLength="1464" clip-path="url(#breeze-release-management-tag-providers-line-9)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-tag-providers-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-9)">
-</text><text class="breeze-release-management-tag-providers-r5" x="0" y="264" textLength="24.4" clip-path="url(#breeze-release-management-tag-providers-line-10)">╭─</text><text class="breeze-release-management-tag-providers-r5" x="24.4" y="264" textLength="195.2" clip-path="url(#breeze-release-management-tag-providers-line-10)"> Common options </text><text class="breeze-release-management-tag-providers-r5" x="219.6" y="264" textLength="1220" clip-path="url(#breeze-release- [...]
-</text><text class="breeze-release-management-tag-providers-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-11)">│</text><text class="breeze-release-management-tag-providers-r4" x="24.4" y="288.4" textLength="109.8" clip-path="url(#breeze-release-management-tag-providers-line-11)">--dry-run</text><text class="breeze-release-management-tag-providers-r6" x="158.6" y="288.4" textLength="24.4" clip-path="url(#breeze-release-management-tag-pr [...]
-</text><text class="breeze-release-management-tag-providers-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-12)">│</text><text class="breeze-release-management-tag-providers-r4" x="24.4" y="312.8" textLength="109.8" clip-path="url(#breeze-release-management-tag-providers-line-12)">--verbose</text><text class="breeze-release-management-tag-providers-r6" x="158.6" y="312.8" textLength="24.4" clip-path="url(#breeze-release-management-tag-pr [...]
-</text><text class="breeze-release-management-tag-providers-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-13)">│</text><text class="breeze-release-management-tag-providers-r4" x="24.4" y="337.2" textLength="73.2" clip-path="url(#breeze-release-management-tag-providers-line-13)">--help</text><text class="breeze-release-management-tag-providers-r6" x="158.6" y="337.2" textLength="24.4" clip-path="url(#breeze-release-management-tag-provid [...]
-</text><text class="breeze-release-management-tag-providers-r5" x="0" y="361.6" textLength="1464" clip-path="url(#breeze-release-management-tag-providers-line-14)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-tag-providers-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-14)">
+</text><text class="breeze-release-management-tag-providers-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-6)">│</text><text class="breeze-release-management-tag-providers-r4" x="61" y="166.4" textLength="146.4" clip-path="url(#breeze-release-management-tag-providers-line-6)">--clean-tags</text><text class="breeze-release-management-tag-providers-r1" x="207.4" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-tag-pro [...]
+</text><text class="breeze-release-management-tag-providers-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-7)">│</text><text class="breeze-release-management-tag-providers-r1" x="451.4" y="190.8" textLength="988.2" clip-path="url(#breeze-release-management-tag-providers-line-7)">issues to avoid errors. The default behaviour would be to clean both local and    [...]
+</text><text class="breeze-release-management-tag-providers-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-8)">│</text><text class="breeze-release-management-tag-providers-r1" x="451.4" y="215.2" textLength="988.2" clip-path="url(#breeze-release-management-tag-providers-line-8)">remote tags.                         [...]
+</text><text class="breeze-release-management-tag-providers-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-9)">│</text><text class="breeze-release-management-tag-providers-r5" x="451.4" y="239.6" textLength="988.2" clip-path="url(#breeze-release-management-tag-providers-line-9)">[default: clean-tags]                      &# [...]
+</text><text class="breeze-release-management-tag-providers-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-10)">│</text><text class="breeze-release-management-tag-providers-r6" x="24.4" y="264" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-10)">*</text><text class="breeze-release-management-tag-providers-r4" x="61" y="264" textLength="170.8" clip-path="url(#breeze-release-management-tag-providers-line-10)" [...]
+</text><text class="breeze-release-management-tag-providers-r5" x="0" y="288.4" textLength="1464" clip-path="url(#breeze-release-management-tag-providers-line-11)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-tag-providers-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-11)">
+</text><text class="breeze-release-management-tag-providers-r5" x="0" y="312.8" textLength="24.4" clip-path="url(#breeze-release-management-tag-providers-line-12)">╭─</text><text class="breeze-release-management-tag-providers-r5" x="24.4" y="312.8" textLength="195.2" clip-path="url(#breeze-release-management-tag-providers-line-12)"> Common options </text><text class="breeze-release-management-tag-providers-r5" x="219.6" y="312.8" textLength="1220" clip-path="url(#breeze-re [...]
+</text><text class="breeze-release-management-tag-providers-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-13)">│</text><text class="breeze-release-management-tag-providers-r4" x="24.4" y="337.2" textLength="109.8" clip-path="url(#breeze-release-management-tag-providers-line-13)">--dry-run</text><text class="breeze-release-management-tag-providers-r9" x="158.6" y="337.2" textLength="24.4" clip-path="url(#breeze-release-management-tag-pr [...]
+</text><text class="breeze-release-management-tag-providers-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-14)">│</text><text class="breeze-release-management-tag-providers-r4" x="24.4" y="361.6" textLength="109.8" clip-path="url(#breeze-release-management-tag-providers-line-14)">--verbose</text><text class="breeze-release-management-tag-providers-r9" x="158.6" y="361.6" textLength="24.4" clip-path="url(#breeze-release-management-tag-pr [...]
+</text><text class="breeze-release-management-tag-providers-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-15)">│</text><text class="breeze-release-management-tag-providers-r4" x="24.4" y="386" textLength="73.2" clip-path="url(#breeze-release-management-tag-providers-line-15)">--help</text><text class="breeze-release-management-tag-providers-r9" x="158.6" y="386" textLength="24.4" clip-path="url(#breeze-release-management-tag-providers-li [...]
+</text><text class="breeze-release-management-tag-providers-r5" x="0" y="410.4" textLength="1464" clip-path="url(#breeze-release-management-tag-providers-line-16)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-tag-providers-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-tag-providers-line-16)">
</text>
</g>
</g>
diff --git a/dev/breeze/doc/images/output_release-management_tag-providers.txt b/dev/breeze/doc/images/output_release-management_tag-providers.txt
index eb987987e51..3b892e2f68d 100644
--- a/dev/breeze/doc/images/output_release-management_tag-providers.txt
+++ b/dev/breeze/doc/images/output_release-management_tag-providers.txt
@@ -1 +1 @@
-403dae670f839e37c83baa15ac65af9a
+c9affbadf2d92903409f2c73cba6bfd2
diff --git a/dev/breeze/doc/images/output_release-management_update-providers-next-version.svg b/dev/breeze/doc/images/output_release-management_update-providers-next-version.svg
new file mode 100644
index 00000000000..bd1a673193a
--- /dev/null
+++ b/dev/breeze/doc/images/output_release-management_update-providers-next-version.svg
@@ -0,0 +1,95 @@
+<svg class="rich-terminal" viewBox="0 0 1482 269.6" xmlns="http://www.w3.org/2000/svg">
+ <!-- Generated with Rich https://www.textualize.io -->
+ <style>
+
+ @font-face {
+ font-family: "Fira Code";
+ src: local("FiraCode-Regular"),
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
+ font-style: normal;
+ font-weight: 400;
+ }
+ @font-face {
+ font-family: "Fira Code";
+ src: local("FiraCode-Bold"),
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
+ font-style: bold;
+ font-weight: 700;
+ }
+
+ .breeze-release-management-update-providers-next-version-matrix {
+ font-family: Fira Code, monospace;
+ font-size: 20px;
+ line-height: 24.4px;
+ font-variant-east-asian: full-width;
+ }
+
+ .breeze-release-management-update-providers-next-version-title {
+ font-size: 18px;
+ font-weight: bold;
+ font-family: arial;
+ }
+
+ .breeze-release-management-update-providers-next-version-r1 { fill: #c5c8c6 }
+.breeze-release-management-update-providers-next-version-r2 { fill: #d0b344 }
+.breeze-release-management-update-providers-next-version-r3 { fill: #c5c8c6;font-weight: bold }
+.breeze-release-management-update-providers-next-version-r4 { fill: #68a0b3;font-weight: bold }
+.breeze-release-management-update-providers-next-version-r5 { fill: #868887 }
+.breeze-release-management-update-providers-next-version-r6 { fill: #98a84b;font-weight: bold }
+ </style>
+
+ <defs>
+ <clipPath id="breeze-release-management-update-providers-next-version-clip-terminal">
+ <rect x="0" y="0" width="1463.0" height="218.6" />
+ </clipPath>
+ <clipPath id="breeze-release-management-update-providers-next-version-line-0">
+ <rect x="0" y="1.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-update-providers-next-version-line-1">
+ <rect x="0" y="25.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-update-providers-next-version-line-2">
+ <rect x="0" y="50.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-update-providers-next-version-line-3">
+ <rect x="0" y="74.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-update-providers-next-version-line-4">
+ <rect x="0" y="99.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-update-providers-next-version-line-5">
+ <rect x="0" y="123.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-update-providers-next-version-line-6">
+ <rect x="0" y="147.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-update-providers-next-version-line-7">
+ <rect x="0" y="172.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="267.6" rx="8"/><text class="breeze-release-management-update-providers-next-version-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: release-management update-providers-next-version</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-update-providers-next-version-clip-terminal)">
+
+ <g class="breeze-release-management-update-providers-next-version-matrix">
+ <text class="breeze-release-management-update-providers-next-version-r1" x="1464" y="20" textLength="12.2" clip-path="url(#breeze-release-management-update-providers-next-version-line-0)">
+</text><text class="breeze-release-management-update-providers-next-version-r2" x="12.2" y="44.4" textLength="73.2" clip-path="url(#breeze-release-management-update-providers-next-version-line-1)">Usage:</text><text class="breeze-release-management-update-providers-next-version-r3" x="97.6" y="44.4" textLength="671" clip-path="url(#breeze-release-management-update-providers-next-version-line-1)">breeze release-management update-providers-next-version</text><text class="breeze-r [...]
+</text><text class="breeze-release-management-update-providers-next-version-r1" x="1464" y="68.8" textLength="12.2" clip-path="url(#breeze-release-management-update-providers-next-version-line-2)">
+</text><text class="breeze-release-management-update-providers-next-version-r1" x="12.2" y="93.2" textLength="805.2" clip-path="url(#breeze-release-management-update-providers-next-version-line-3)">Update provider versions marked with '# use next version' comment.</text><text class="breeze-release-management-update-providers-next-version-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-release-management-update-provider [...]
+</text><text class="breeze-release-management-update-providers-next-version-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-release-management-update-providers-next-version-line-4)">
+</text><text class="breeze-release-management-update-providers-next-version-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-release-management-update-providers-next-version-line-5)">╭─</text><text class="breeze-release-management-update-providers-next-version-r5" x="24.4" y="142" textLength="195.2" clip-path="url(#breeze-release-management-update-providers-next-version-line-5)"> Common options </text><text class="breeze-release-management-update-providers-next-v [...]
+</text><text class="breeze-release-management-update-providers-next-version-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-update-providers-next-version-line-6)">│</text><text class="breeze-release-management-update-providers-next-version-r4" x="24.4" y="166.4" textLength="109.8" clip-path="url(#breeze-release-management-update-providers-next-version-line-6)">--verbose</text><text class="breeze-release-management-update-providers-next-version-r6" x="158.6 [...]
+</text><text class="breeze-release-management-update-providers-next-version-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-update-providers-next-version-line-7)">│</text><text class="breeze-release-management-update-providers-next-version-r4" x="24.4" y="190.8" textLength="73.2" clip-path="url(#breeze-release-management-update-providers-next-version-line-7)">--help</text><text class="breeze-release-management-update-providers-next-version-r6" x="158.6" y= [...]
+</text><text class="breeze-release-management-update-providers-next-version-r5" x="0" y="215.2" textLength="1464" clip-path="url(#breeze-release-management-update-providers-next-version-line-8)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-update-providers-next-version-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-update-providers-n [...]
+</text>
+ </g>
+ </g>
+</svg>
diff --git a/dev/breeze/doc/images/output_release-management_update-providers-next-version.txt b/dev/breeze/doc/images/output_release-management_update-providers-next-version.txt
new file mode 100644
index 00000000000..63b432b93ad
--- /dev/null
+++ b/dev/breeze/doc/images/output_release-management_update-providers-next-version.txt
@@ -0,0 +1 @@
+91c2333cf1da8fb531655e616dce32d7
diff --git a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg
index 2c57f9ff605..4f5646195dd 100644
--- a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg
+++ b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg
@@ -218,16 +218,16 @@
</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-26)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="654.4" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-26)">release-management:publish-docs-to-s3 | release-management:release-prod-images |           [...]
</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-27)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="678.8" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-27)">release-management:start-rc-process | release-management:start-release |             [...]
</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-28)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="703.2" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-28)">release-management:tag-providers | release-management:update-constraints |            [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-29)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="727.6" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-29)">release-management:verify-provider-distributions | run | sbom | sbom:build-all-airflow-images |      [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-30)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="752" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-30)">sbom:export-dependency-information | sbom:generate-providers-requirements |            & [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-31)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="776.4" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-31)">sbom:update-sbom-information | setup | setup:autocomplete | setup:check-all-params-in-groups |      [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-32)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="800.8" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-32)">setup:config | setup:regenerate-command-images | setup:self-upgrade | setup:synchronize-local-mounts | </text><text cla [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-33)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="825.2" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-33)">setup:version | shell | start-airflow | testing | testing:airflow-ctl-integration-tests |    & [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-34)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="849.6" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-34)">testing:airflow-ctl-tests | testing:core-integration-tests | testing:core-tests |          [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-35)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="874" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-35)">testing:docker-compose-tests | testing:helm-tests | testing:providers-integration-tests |        & [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-36)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="898.4" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-36)">testing:providers-tests | testing:python-api-client-tests | testing:system-tests |         [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-37)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="922.8" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-37)">testing:task-sdk-integration-tests | testing:task-sdk-tests | ui | ui:check-translation-completeness | </text><text cla [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-38)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="947.2" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-38)">workflow-run | workflow-run:publish-docs)                   [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-29)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="727.6" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-29)">release-management:update-providers-next-version | release-management:verify-provider-distributions |  </text><text class="breeze-setu [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-30)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="752" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-30)">run | sbom | sbom:build-all-airflow-images | sbom:export-dependency-information |         [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-31)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="776.4" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-31)">sbom:generate-providers-requirements | sbom:update-sbom-information | setup | setup:autocomplete |    &# [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-32)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="800.8" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-32)">setup:check-all-params-in-groups | setup:config | setup:regenerate-command-images | setup:self-upgrade </text><text class="b [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-33)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="825.2" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-33)">| setup:synchronize-local-mounts | setup:version | shell | start-airflow | testing |    & [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-34)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="849.6" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-34)">testing:airflow-ctl-integration-tests | testing:airflow-ctl-tests | testing:core-integration-tests |   </text><text cla [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-35)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="874" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-35)">testing:core-tests | testing:docker-compose-tests | testing:helm-tests |            [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-36)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="898.4" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-36)">testing:providers-integration-tests | testing:providers-tests | testing:python-api-client-tests |      < [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-37)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="922.8" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-37)">testing:system-tests | testing:task-sdk-integration-tests | testing:task-sdk-tests | ui |       [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-38)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="947.2" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-38)">ui:check-translation-completeness | workflow-run | workflow-run:publish-docs)          &# [...]
</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="971.6" textLength="1464" clip-path="url(#breeze-setup-check-all-params-in-groups-line-39)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-39)">
</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="996" textLength="24.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-40)">╭─</text><text class="breeze-setup-check-all-params-in-groups-r5" x="24.4" y="996" textLength="195.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-40)"> Common options </text><text class="breeze-setup-check-all-params-in-groups-r5" x="219.6" y="996" textLength="1220" clip-path="url(#breeze-setup-ch [...]
</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-41)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="1020.4" textLength="109.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-41)">--verbose</text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="1020.4" textLength="24.4" clip-path="url(#breeze-setup-check-all-params [...]
diff --git a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
index 9c86645f47d..23a4fa47aa0 100644
--- a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
+++ b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
@@ -1 +1 @@
-81b3b38b66743f04103a0fb006418090
+3f7b11d4d7cd31e43d1bb5734e664771
diff --git a/dev/breeze/doc/images/output_setup_regenerate-command-images.svg b/dev/breeze/doc/images/output_setup_regenerate-command-images.svg
index 3ff56e77b57..feae43a75c1 100644
--- a/dev/breeze/doc/images/output_setup_regenerate-command-images.svg
+++ b/dev/breeze/doc/images/output_setup_regenerate-command-images.svg
@@ -235,17 +235,17 @@
</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-28)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="703.2" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-28)">release-management:publish-docs | release-management:publish-docs-to-s3 |             [...]
</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-29)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="727.6" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-29)">release-management:release-prod-images | release-management:start-rc-process |            [...]
</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-30)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="752" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-30)">release-management:start-release | release-management:tag-providers |               [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-31)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="776.4" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-31)">release-management:update-constraints | release-management:verify-provider-distributions | run |    </text><text class [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-32)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="800.8" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-32)">sbom | sbom:build-all-airflow-images | sbom:export-dependency-information |           [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-33)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="825.2" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-33)">sbom:generate-providers-requirements | sbom:update-sbom-information | setup | setup:autocomplete |  </text><text class [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-34)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="849.6" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-34)">setup:check-all-params-in-groups | setup:config | setup:regenerate-command-images |         & [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-35)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="874" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-35)">setup:self-upgrade | setup:synchronize-local-mounts | setup:version | shell | start-airflow |      [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-36)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="898.4" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-36)">testing | testing:airflow-ctl-integration-tests | testing:airflow-ctl-tests |          & [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-37)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="922.8" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-37)">testing:core-integration-tests | testing:core-tests | testing:docker-compose-tests |          [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-38)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="947.2" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-38)">testing:helm-tests | testing:providers-integration-tests | testing:providers-tests |          [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-39)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="971.6" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-39)">testing:python-api-client-tests | testing:system-tests | testing:task-sdk-integration-tests |       </t [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-40)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="996" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-40)">testing:task-sdk-tests | ui | ui:check-translation-completeness | workflow-run |         [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-41)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="1020.4" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-41)">workflow-run:publish-docs)                       [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-31)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="776.4" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-31)">release-management:update-constraints | release-management:update-providers-next-version |          [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-32)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="800.8" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-32)">release-management:verify-provider-distributions | run | sbom | sbom:build-all-airflow-images |     </t [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-33)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="825.2" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-33)">sbom:export-dependency-information | sbom:generate-providers-requirements |            & [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-34)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="849.6" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-34)">sbom:update-sbom-information | setup | setup:autocomplete | setup:check-all-params-in-groups |      [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-35)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="874" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-35)">setup:config | setup:regenerate-command-images | setup:self-upgrade | setup:synchronize-local-mounts</text><text class="breeze-setup-rege [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-36)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="898.4" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-36)">| setup:version | shell | start-airflow | testing | testing:airflow-ctl-integration-tests |    [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-37)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="922.8" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-37)">testing:airflow-ctl-tests | testing:core-integration-tests | testing:core-tests |          [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-38)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="947.2" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-38)">testing:docker-compose-tests | testing:helm-tests | testing:providers-integration-tests |        & [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-39)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="971.6" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-39)">testing:providers-tests | testing:python-api-client-tests | testing:system-tests |         &# [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-40)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="996" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-40)">testing:task-sdk-integration-tests | testing:task-sdk-tests | ui | ui:check-translation-completeness</text><text class="breeze-setup-rege [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-41)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="1020.4" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-41)">| workflow-run | workflow-run:publish-docs)                 & [...]
</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-42)">│</text><text class="breeze-setup-regenerate-command-images-r4" x="24.4" y="1044.8" textLength="146.4" clip-path="url(#breeze-setup-regenerate-command-images-line-42)">--check-only</text><text class="breeze-setup-regenerate-command-images-r1" x="219.6" y="1044.8" textLength="1220" clip-path="url(#breeze-setup-regenerate-command [...]
</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-43)">│</text><text class="breeze-setup-regenerate-command-images-r1" x="219.6" y="1069.2" textLength="170.8" clip-path="url(#breeze-setup-regenerate-command-images-line-43)">together with </text><text class="breeze-setup-regenerate-command-images-r4" x="390.4" y="1069.2" textLength="109.8" clip-path="url(#breeze-setup-rege [...]
</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1093.6" textLength="1464" clip-path="url(#breeze-setup-regenerate-command-images-line-44)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-regenerate-command-images-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-44)">
diff --git a/dev/breeze/doc/images/output_setup_regenerate-command-images.txt b/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
index 67e7c83308b..cadee85beb4 100644
--- a/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
+++ b/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
@@ -1 +1 @@
-556b9ff80fe6f6f542c869c2f97fa14e
+fd114d5228eb9c7faef40e79e62dacf3
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 08086dbf0da..1347125d13a 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -17,7 +17,6 @@
from __future__ import annotations
import ast
-import contextlib
import glob
import operator
import os
@@ -119,6 +118,7 @@ from airflow_breeze.utils.add_back_references import (
start_generating_back_references,
)
from airflow_breeze.utils.ci_group import ci_group
+from airflow_breeze.utils.click_validators import validate_release_date
from airflow_breeze.utils.confirm import Answer, user_confirm
from airflow_breeze.utils.console import MessageType, Output, get_console
from airflow_breeze.utils.constraints_version_check import constraints_version_check
@@ -157,6 +157,7 @@ from airflow_breeze.utils.path_utils import (
AIRFLOW_CTL_ROOT_PATH,
AIRFLOW_CTL_SOURCES_PATH,
AIRFLOW_DIST_PATH,
+ AIRFLOW_PROVIDERS_LAST_RELEASE_DATE_PATH,
AIRFLOW_ROOT_PATH,
OUT_PATH,
PROVIDER_METADATA_JSON_PATH,
@@ -177,7 +178,7 @@ from airflow_breeze.utils.reproducible import get_source_date_epoch, repack_dete
from airflow_breeze.utils.run_utils import (
run_command,
)
-from airflow_breeze.utils.shared_options import get_dry_run, get_verbose
+from airflow_breeze.utils.shared_options import get_dry_run, get_verbose, set_forced_answer
from airflow_breeze.utils.version_utils import (
is_local_package_version,
)
@@ -236,6 +237,13 @@ PR_PATTERN = re.compile(r".*\(#([0-9]+)\)")
ISSUE_MATCH_IN_BODY = re.compile(r" #([0-9]+)[^0-9]")
+def remove_code_blocks(text: str) -> str:
+ """Remove content within code blocks (```...``` and `...`) from text."""
+ text = re.sub(r"```.*?```", "", text, flags=re.DOTALL)
+ text = re.sub(r"`[^`]+`", "", text)
+ return text
+
+
class VersionedFile(NamedTuple):
base: str
version: str
@@ -258,7 +266,7 @@ PYYAML_VERSION = "6.0.3"
AIRFLOW_BUILD_DOCKERFILE = f"""
# syntax=docker/dockerfile:1.4
FROM python:{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}-slim-{ALLOWED_DEBIAN_VERSIONS[0]}
-RUN apt-get update && apt-get install -y --no-install-recommends git curl
+RUN apt-get update && apt-get install -y --no-install-recommends libatomic1 git curl
RUN pip install uv=={UV_VERSION}
RUN --mount=type=cache,id=cache-airflow-build-dockerfile-installation,target=/root/.cache/ \
uv pip install --system ignore pip=={AIRFLOW_PIP_VERSION} hatch=={HATCH_VERSION} \
@@ -775,7 +783,6 @@ def provider_action_summary(description: str, message_type: MessageType, package
help="Base branch to use as diff for documentation generation (used for releasing from old branch)",
)
@option_github_repository
-@argument_provider_distributions
@option_include_not_ready_providers
@option_include_removed_providers
@click.option(
@@ -800,11 +807,25 @@ def provider_action_summary(description: str, message_type: MessageType, package
is_flag=True,
help="Skip changelog generation. This is used in prek that updates build-files only.",
)
+@click.option(
+ "--incremental-update",
+ is_flag=True,
+ help="Runs incremental update only after rebase of earlier branch to check if there are no changes.",
+)
@click.option(
"--skip-readme",
is_flag=True,
help="Skip readme generation. This is used in prek that updates build-files only.",
)
+@click.option(
+ "--release-date",
+ type=str,
+ callback=validate_release_date,
+ envvar="RELEASE_DATE",
+ help="Planned release date for the providers release in format "
+ "YYYY-MM-DD[_NN] (e.g., 2025-11-16 or 2025-11-16_01).",
+)
+@argument_provider_distributions
@option_verbose
@option_answer
@option_dry_run
@@ -820,6 +841,8 @@ def prepare_provider_documentation(
skip_git_fetch: bool,
skip_changelog: bool,
skip_readme: bool,
+ incremental_update: bool,
+ release_date: str | None,
):
from airflow_breeze.prepare_providers.provider_documentation import (
PrepareReleaseDocsChangesOnlyException,
@@ -832,9 +855,15 @@ def prepare_provider_documentation(
update_release_notes,
)
+ if not release_date and not only_min_version_update:
+ get_console().print("[error]Release date is required unless --only-min-version-update is used![/]")
+ sys.exit(1)
+
perform_environment_checks()
fix_ownership_using_docker()
cleanup_python_generated_files()
+ if incremental_update:
+ set_forced_answer("yes")
if not provider_distributions:
provider_distributions = get_available_distributions(
include_removed=include_removed_providers, include_not_ready=include_not_ready_providers
@@ -938,6 +967,24 @@ def prepare_provider_documentation(
get_console().print(
"\n[info]Please review the updated files, classify the changelog entries and commit the changes.\n"
)
+ if release_date:
+ AIRFLOW_PROVIDERS_LAST_RELEASE_DATE_PATH.write_text(release_date + "\n")
+ if incremental_update:
+ get_console().print(r"\[warning] Generated changes:")
+ run_command(["git", "diff"])
+ get_console().print("\n")
+ get_console().print("[warning]Important")
+ get_console().print(
+ " * Please review manually the changes in changelogs above and move the new changelog "
+ "entries to the right sections."
+ )
+ get_console().print(
+ "* Remove the `Please review ...` comments from the changelogs after moving changeslogs"
+ )
+ get_console().print(
+ "* Update both changelog.rst AND provider.yaml in case the new changes require "
+ "different classification of the upgrade (patchlevel/minor/major)"
+ )
def basic_provider_checks(provider_id: str) -> dict[str, Any]:
@@ -969,11 +1016,21 @@ def _build_provider_distributions(
distribution_format: str,
skip_tag_check: bool,
skip_deleting_generated_files: bool,
-):
+) -> bool:
+ """
+ Builds provider distribution.
+
+ :param provider_id: id of the provider package
+ :param package_version_suffix: suffix to append to the package version
+ :param distribution_format: format of the distribution to build (wheel or sdist)
+ :param skip_tag_check: whether to skip tag check
+ :param skip_deleting_generated_files: whether to skip deleting generated files
+ :return: True if package was built, False if it was skipped.
+ """
if not skip_tag_check:
should_skip, package_version_suffix = should_skip_the_package(provider_id, package_version_suffix)
if should_skip:
- return
+ return False
get_console().print()
with ci_group(f"Preparing provider package [special]{provider_id}"):
get_console().print()
@@ -996,6 +1053,7 @@ def _build_provider_distributions(
skip_cleanup=skip_deleting_generated_files,
delete_only_build_and_dist_folders=True,
)
+ return True
@release_management_group.command(
@@ -1033,7 +1091,7 @@ def _build_provider_distributions(
"--distributions-list",
envvar="DISTRIBUTIONS_LIST",
type=str,
- help="Optional, contains comma-separated list of package ids that are processed for documentation "
+ help="Optional, contains space separated list of package ids that are processed for documentation "
"building, and document publishing. It is an easier alternative to adding individual packages as"
" arguments to every command. This overrides the packages passed as arguments.",
)
@@ -1065,7 +1123,7 @@ def prepare_provider_distributions(
f"\n[info]Populating provider list from DISTRIBUTIONS_LIST env as {distributions_list}"
)
# Override provider_distributions with values from DISTRIBUTIONS_LIST
- distributions_list_as_tuple = tuple(distributions_list.split(","))
+ distributions_list_as_tuple = tuple(distributions_list.split(" "))
if provider_distributions and distributions_list_as_tuple:
get_console().print(
f"[warning]Both package arguments and --distributions-list / DISTRIBUTIONS_LIST passed. "
@@ -1094,7 +1152,7 @@ def prepare_provider_distributions(
for provider_id in packages_list:
try:
basic_provider_checks(provider_id)
- _build_provider_distributions(
+ created = _build_provider_distributions(
provider_id,
version_suffix,
distribution_format,
@@ -1111,12 +1169,15 @@ def prepare_provider_distributions(
suspended_packages.append(provider_id)
else:
get_console().print(f"\n[success]Generated package [special]{provider_id}")
- success_packages.append(provider_id)
+ if created:
+ success_packages.append(provider_id)
+ else:
+ skipped_as_already_released_packages.append(provider_id)
get_console().print()
get_console().print("\n[info]Summary of prepared packages:\n")
provider_action_summary("Success", MessageType.SUCCESS, success_packages)
provider_action_summary(
- "Skipped as already released", MessageType.SUCCESS, skipped_as_already_released_packages
+ "Skipped as already released", MessageType.INFO, skipped_as_already_released_packages
)
provider_action_summary("Suspended", MessageType.WARNING, suspended_packages)
provider_action_summary("Wrong setup generated", MessageType.ERROR, wrong_setup_packages)
@@ -1220,18 +1281,26 @@ def run_generate_constraints_in_parallel(
help="Generates tags for airflow provider releases.",
)
@click.option(
- "--clean-local-tags/--no-clean-local-tags",
+ "--clean-tags/--no-clean-tags",
default=True,
is_flag=True,
- envvar="CLEAN_LOCAL_TAGS",
- help="Delete local tags that are created due to github connectivity issues to avoid errors. "
- "The default behaviour would be to clean such local tags.",
+ envvar="CLEAN_TAGS",
+ help="Delete tags (both local and remote) that are created due to github connectivity "
+ "issues to avoid errors. The default behaviour would be to clean both local and remote tags.",
show_default=True,
)
+@click.option(
+ "--release-date",
+ type=str,
+ help="Date of the release in YYYY-MM-DD format.",
+ required=True,
+ envvar="RELEASE_DATE",
+)
@option_dry_run
@option_verbose
def tag_providers(
- clean_local_tags: bool,
+ clean_tags: bool,
+ release_date: str,
):
found_remote = None
remotes = ["origin", "apache"]
@@ -1249,57 +1318,32 @@ def tag_providers(
except subprocess.CalledProcessError:
pass
- release_date = datetime.now().strftime("%Y-%m-%d")
-
if found_remote is None:
- raise ValueError("Could not find remote configured to push to apache/airflow")
+ raise ValueError("Could not find the remote configured to push to apache/airflow")
+ extra_flags = []
tags = []
+ if clean_tags:
+ extra_flags.append("--force")
for file in os.listdir(os.path.join(SOURCE_DIR_PATH, "dist")):
if file.endswith(".whl"):
match = re.match(r".*airflow_providers_(.*)-(.*)-py3.*", file)
if match:
provider = f"providers-{match.group(1).replace('_', '-')}"
tag = f"{provider}/{match.group(2)}"
- try:
- get_console().print(f"[info]Creating tag: {tag}")
- run_command(
- ["git", "tag", tag, "-m", f"Release {release_date} of providers"],
- check=True,
- )
- tags.append(tag)
- except subprocess.CalledProcessError as e:
- get_console().print(f"[warning]Failed to create {tag}: {e}")
- pass
- providers_date_tag = f"providers/{release_date}"
+ get_console().print(f"[info]Creating tag: {tag}")
+ run_command(
+ ["git", "tag", tag, *extra_flags, "-m", f"Release {release_date} of providers"],
+ check=True,
+ )
+ tags.append(tag)
if tags:
- run_command(
- ["git", "tag", providers_date_tag, "-m", f"Release {release_date} of providers"],
+ push_result = run_command(
+ ["git", "push", found_remote, *extra_flags, *tags],
check=True,
)
- get_console().print()
- get_console().print("\n[info]The providers release have been tagged with:[/]")
- get_console().print(providers_date_tag)
- get_console().print()
- tags.append(providers_date_tag)
- try:
- push_result = run_command(
- ["git", "push", found_remote, *tags],
- check=False,
- )
- if push_result.returncode == 0:
- get_console().print("\n[success]Tags pushed successfully.[/]")
- except subprocess.CalledProcessError:
- get_console().print("\n[error]Failed to push tags, probably a connectivity issue to GitHub.[/]")
- if clean_local_tags:
- for tag in tags:
- with contextlib.suppress(subprocess.CalledProcessError):
- run_command(["git", "tag", "-d", tag], check=True)
- get_console().print("\n[success]Cleaning up local tags...[/]")
- else:
- get_console().print(
- "\n[success]Local tags are not cleaned up, unset CLEAN_LOCAL_TAGS or set to true.[/]"
- )
+ if push_result.returncode == 0:
+ get_console().print("\n[success]Tags pushed successfully.[/]")
@release_management_group.command(
@@ -1799,7 +1843,7 @@ def run_publish_docs_in_parallel(
"--distributions-list",
envvar="DISTRIBUTIONS_LIST",
type=str,
- help="Optional, contains comma-separated list of package ids that are processed for documentation "
+ help="Optional, contains space separated list of package ids that are processed for documentation "
"building, and document publishing. It is an easier alternative to adding individual packages as"
" arguments to every command. This overrides the packages passed as arguments.",
)
@@ -1830,7 +1874,7 @@ def publish_docs(
f"\n[info]Populating provider list from DISTRIBUTIONS_LIST env as {distributions_list}"
)
# Override doc_packages with values from DISTRIBUTIONS_LIST
- packages_list_as_tuple = tuple(distributions_list.split(","))
+ packages_list_as_tuple = tuple(distributions_list.split(" "))
if doc_packages and packages_list_as_tuple:
get_console().print(
f"[warning]Both package arguments and --distributions-list / DISTRIBUTIONS_LIST passed. "
@@ -2327,11 +2371,11 @@ VERSION_MATCH = re.compile(r"([0-9]+)\.([0-9]+)\.([0-9]+)(.*)")
def get_suffix_from_package_in_dist(dist_files: list[str], package: str) -> str | None:
"""Get suffix from package prepared in dist folder."""
- for file in dist_files:
- if file.startswith(f"apache_airflow_providers_{package.replace('.', '_')}") and file.endswith(
+ for filename in dist_files:
+ if filename.startswith(f"apache_airflow_providers_{package.replace('.', '_')}") and filename.endswith(
".tar.gz"
):
- file = file[: -len(".tar.gz")]
+ file = filename[: -len(".tar.gz")]
version = file.split("-")[-1]
match = VERSION_MATCH.match(version)
if match:
@@ -2389,6 +2433,56 @@ def create_github_issue_url(title: str, body: str, labels: Iterable[str]) -> str
)
+def get_commented_out_prs_from_provider_changelogs() -> list[int]:
+ """
+ Returns list of PRs that are commented out in the changelog.
+ :return: list of PR numbers that appear only in comments in changelog.rst files in "providers" dir
+ """
+ pr_matcher = re.compile(r".*\(#([0-9]+)\).*")
+ commented_prs = set()
+
+ # Get all provider distributions
+ provider_distributions_metadata = get_provider_distributions_metadata()
+
+ for provider_id in provider_distributions_metadata.keys():
+ provider_details = get_provider_details(provider_id)
+ changelog_path = provider_details.changelog_path
+ print(f"[info]Checking changelog {changelog_path} for PRs to be excluded automatically.")
+ if not changelog_path.exists():
+ continue
+
+ changelog_lines = changelog_path.read_text().splitlines()
+ in_excluded_section = False
+
+ for line in changelog_lines:
+ # Check if we're entering an excluded/commented section
+ if line.strip().startswith(
+ ".. Below changes are excluded from the changelog"
+ ) or line.strip().startswith(".. Review and move the new changes"):
+ in_excluded_section = True
+ continue
+ # Check if we're exiting the excluded section (new version header or regular content)
+ # Version headers are lines that contain only dots (like "4.10.1" followed by "......")
+ # Or lines that start with actual content sections like "Misc", "Features", etc.
+ if (
+ in_excluded_section
+ and line
+ and not line.strip().startswith("..")
+ and not line.strip().startswith("*")
+ ):
+ # end excluded section with empty line
+ if line.strip() == "":
+ in_excluded_section = False
+
+ # Extract PRs from excluded sections
+ if in_excluded_section and line.strip().startswith("*"):
+ match_result = pr_matcher.search(line)
+ if match_result:
+ commented_prs.add(int(match_result.group(1)))
+
+ return sorted(commented_prs)
+
+
@release_management_group.command(
name="generate-issue-content-providers", help="Generates content for issue to test the release."
)
@@ -2410,20 +2504,12 @@ def create_github_issue_url(title: str, body: str, labels: Iterable[str]) -> str
is_flag=True,
help="Only consider package ids with packages prepared in the dist folder",
)
-@click.option(
- "--no-include-browser-link",
- "include_browser_link",
- flag_value=False,
- default=True,
- help="Do not include browser link to prefill GitHub issue",
-)
@argument_provider_distributions
def generate_issue_content_providers(
disable_progress: bool,
excluded_pr_list: str,
github_token: str,
only_available_in_dist: bool,
- include_browser_link: bool,
provider_distributions: list[str],
):
import jinja2
@@ -2443,10 +2529,15 @@ def generate_issue_content_providers(
excluded_prs = [int(pr) for pr in excluded_pr_list.split(",")]
else:
excluded_prs = []
+ commented_prs = get_commented_out_prs_from_provider_changelogs()
+ get_console().print(
+ "[info]Automatically excluding {len(commented_prs)} PRs that are only commented out in changelog:"
+ )
+ excluded_prs.extend(commented_prs)
all_prs: set[int] = set()
+ all_retrieved_prs: set[int] = set()
provider_prs: dict[str, list[int]] = {}
- if only_available_in_dist:
- files_in_dist = os.listdir(str(AIRFLOW_DIST_PATH))
+ files_in_dist = os.listdir(str(AIRFLOW_DIST_PATH)) if only_available_in_dist else []
prepared_package_ids = []
for provider_id in provider_distributions:
if not only_available_in_dist or is_package_in_dist(files_in_dist, provider_id):
@@ -2464,15 +2555,35 @@ def generate_issue_content_providers(
"The changelog file doesn't contain any PRs for the release.\n"
)
continue
+ all_prs.update(prs)
provider_prs[provider_id] = [pr for pr in prs if pr not in excluded_prs]
- all_prs.update(provider_prs[provider_id])
+ all_retrieved_prs.update(provider_prs[provider_id])
+ if not github_token:
+ # Get GitHub token from gh CLI and set it in environment copy
+ gh_token_result = run_command(
+ ["gh", "auth", "token"],
+ capture_output=True,
+ text=True,
+ check=False,
+ )
+ if gh_token_result.returncode == 0:
+ github_token = gh_token_result.stdout.strip()
g = Github(github_token)
repo = g.get_repo("apache/airflow")
pull_requests: dict[int, PullRequest.PullRequest | Issue.Issue] = {}
linked_issues: dict[int, list[Issue.Issue]] = {}
+ all_prs_len = len(all_prs)
+ all_retrieved_prs_len = len(all_retrieved_prs)
+ get_console().print(
+ f"[info] Found {all_prs_len} PRs in the providers. "
+ f"Retrieving {all_retrieved_prs_len} (excluded {all_prs_len - all_retrieved_prs_len})"
+ )
+ get_console().print(f"Retrieved PRs: {all_retrieved_prs}")
+ excluded_prs = sorted(set(all_prs) - set(all_retrieved_prs))
+ get_console().print(f"Excluded PRs: {excluded_prs}")
with Progress(console=get_console(), disable=disable_progress) as progress:
- task = progress.add_task(f"Retrieving {len(all_prs)} PRs ", total=len(all_prs))
- for pr_number in all_prs:
+ task = progress.add_task(f"Retrieving {all_retrieved_prs_len} PRs ", total=all_retrieved_prs_len)
+ for pr_number in all_retrieved_prs:
progress.console.print(
f"Retrieving PR#{pr_number}: https://github.com/apache/airflow/pull/{pr_number}"
)
@@ -2528,7 +2639,10 @@ def generate_issue_content_providers(
pull_request_list = [pull_requests[pr] for pr in provider_prs[provider_id] if pr in pull_requests]
provider_yaml_dict = get_provider_distributions_metadata().get(provider_id)
if pull_request_list:
- package_suffix = get_suffix_from_package_in_dist(files_in_dist, provider_id)
+ if only_available_in_dist:
+ package_suffix = get_suffix_from_package_in_dist(files_in_dist, provider_id)
+ else:
+ package_suffix = ""
providers[provider_id] = ProviderPRInfo(
version=provider_yaml_dict["versions"][0],
provider_id=provider_id,
@@ -2561,18 +2675,29 @@ def generate_issue_content_providers(
issue_content += f"All users involved in the PRs:\n{' '.join(users)}"
syntax = Syntax(issue_content, "markdown", theme="ansi_dark")
get_console().print(syntax)
- url_to_create_the_issue = create_github_issue_url(
- title=f"Status of testing Providers that were prepared on {datetime.now():%B %d, %Y}",
- body=issue_content,
- labels=["testing status", "kind:meta"],
- )
- if include_browser_link:
- get_console().print()
- get_console().print(
- "[info]You can prefill the issue by copy&pasting this link to browser "
- "(or Cmd+Click if your terminal supports it):\n"
+ create_issue = user_confirm("Should I create the issue?")
+ if create_issue == Answer.YES:
+ res = run_command(
+ [
+ "gh",
+ "issue",
+ "create",
+ "-t",
+ f"Status of testing Providers that were prepared on {datetime.now():%B %d, %Y}",
+ "-b",
+ issue_content,
+ "-l",
+ "testing status,kind:meta",
+ "-w",
+ ],
+ check=False,
)
- print(url_to_create_the_issue)
+ if res.returncode != 0:
+ get_console().print(
+ "Failed to create issue. If the error is about 'too long URL' you have "
+ "to create the issue manually by copy&pasting the above output"
+ )
+ sys.exit(1)
def get_git_log_command(
@@ -2891,6 +3016,39 @@ def generate_providers_metadata(
PROVIDER_METADATA_JSON_PATH.write_text(json.dumps(metadata_dict, indent=4) + "\n")
+@release_management_group.command(
+ name="update-providers-next-version",
+ help="Update provider versions marked with '# use next version' comment.",
+)
+@option_verbose
+def update_providers_next_version():
+ """
+ Scan all provider pyproject.toml files for dependencies with "# use next version" comment
+ and update them to use the current version from the referenced provider's pyproject.toml.
+ """
+ from airflow_breeze.utils.packages import update_providers_with_next_version_comment
+
+ get_console().print("\n[info]Scanning for providers with '# use next version' comments...\n")
+
+ updates_made = update_providers_with_next_version_comment()
+
+ if updates_made:
+ get_console().print("\n[success]Summary of updates:[/]")
+ for provider_id, dependencies in updates_made.items():
+ get_console().print(f"\n[info]Provider: {provider_id}[/]")
+ for dep_name, dep_info in dependencies.items():
+ get_console().print(f" • {dep_name}: {dep_info['old_version']} → {dep_info['new_version']}")
+ get_console().print(
+ f"\n[success]Updated {len(updates_made)} provider(s) with "
+ f"{sum(len(deps) for deps in updates_made.values())} dependency change(s).[/]"
+ )
+ else:
+ get_console().print(
+ "\n[info]No updates needed. All providers with '# use next version' "
+ "comments are already using the latest versions.[/]"
+ )
+
+
def fetch_remote(constraints_repo: Path, remote_name: str) -> None:
run_command(["git", "fetch", remote_name], cwd=constraints_repo)
@@ -3630,6 +3788,18 @@ def prepare_helm_chart_tarball(
values_content = yaml.safe_load(VALUES_YAML_FILE.read_text())
airflow_version_in_values = values_content["airflowVersion"]
default_airflow_tag_in_values = values_content["defaultAirflowTag"]
+
+ # Check if this is an RC version and replace documentation links with staging URLs
+ is_rc_version = version_suffix and "rc" in version_suffix.lower()
+ if is_rc_version:
+ get_console().print(
+ f"[info]RC version detected ({version_suffix}). Replacing documentation links with staging URLs.[/]"
+ )
+ # Replace production URLs with staging URLs for RC versions
+ chart_yaml_file_content = chart_yaml_file_content.replace(
+ "https://airflow.apache.org/", "https://airflow.staged.apache.org/"
+ )
+ get_console().print("[success]Documentation links updated to staging environment for RC version.[/]")
if ignore_version_check:
if not version:
version = version_in_chart
@@ -3761,9 +3931,15 @@ def prepare_helm_chart_tarball(
envvar="SIGN_EMAIL",
default="",
)
+@click.option(
+ "--version-suffix",
+ help="Version suffix used to determine if RC version. For RC versions, documentation links will be replaced with staging URLs.",
+ default="",
+ envvar="VERSION_SUFFIX",
+)
@option_dry_run
@option_verbose
-def prepare_helm_chart_package(sign_email: str):
+def prepare_helm_chart_package(sign_email: str, version_suffix: str):
import yaml
from airflow_breeze.utils.kubernetes_utils import (
@@ -3772,71 +3948,96 @@ def prepare_helm_chart_package(sign_email: str):
sync_virtualenv,
)
- chart_yaml_dict = yaml.safe_load(CHART_YAML_FILE.read_text())
- version = chart_yaml_dict["version"]
- result = sync_virtualenv(force_venv_setup=False)
- if result.returncode != 0:
- sys.exit(result.returncode)
- make_sure_helm_installed()
- get_console().print(f"[info]Packaging the chart for Helm Chart {version}[/]")
- k8s_env = os.environ.copy()
- k8s_env["PATH"] = str(K8S_BIN_BASE_PATH) + os.pathsep + k8s_env["PATH"]
- # Tar on modern unix options requires --wildcards parameter to work with globs
- # See https://github.com/technosophos/helm-gpg/issues/1
- k8s_env["TAR_OPTIONS"] = "--wildcards"
- archive_name = f"airflow-{version}.tgz"
- OUT_PATH.mkdir(parents=True, exist_ok=True)
- result = run_command(
- cmd=["helm", "package", "chart", "--dependency-update", "--destination", OUT_PATH.as_posix()],
- env=k8s_env,
- check=False,
- )
- if result.returncode != 0:
- get_console().print("[error]Error packaging the chart[/]")
- sys.exit(result.returncode)
- AIRFLOW_DIST_PATH.mkdir(parents=True, exist_ok=True)
- final_archive = AIRFLOW_DIST_PATH / archive_name
- final_archive.unlink(missing_ok=True)
- source_archive = OUT_PATH / archive_name
- result = repack_deterministically(
- source_archive=source_archive,
- dest_archive=final_archive,
- prepend_path=None,
- timestamp=get_source_date_epoch(CHART_DIR),
- )
- if result.returncode != 0:
+ # Check if this is an RC version and temporarily replace documentation links
+ chart_yaml_backup = None
+ is_rc_version = version_suffix and "rc" in version_suffix.lower()
+
+ if is_rc_version:
get_console().print(
- f"[error]Error repackaging package for Helm Chart from {source_archive} to {final_archive}[/]"
+ f"[info]RC version detected ({version_suffix}). Temporarily replacing documentation links with staging URLs for packaging.[/]"
)
- sys.exit(result.returncode)
- else:
- get_console().print(f"[success]Package created in {final_archive}[/]")
- if sign_email:
- get_console().print(f"[info]Signing the package with {sign_email}[/]")
- prov_file = final_archive.with_suffix(".tgz.prov")
- if prov_file.exists():
- get_console().print(f"[warning]Removing existing {prov_file}[/]")
- prov_file.unlink()
- result = run_command(
- cmd=["helm", "gpg", "sign", "-u", sign_email, archive_name],
- cwd=AIRFLOW_DIST_PATH.as_posix(),
- env=k8s_env,
- check=False,
+ # Backup original content
+ chart_yaml_backup = CHART_YAML_FILE.read_text()
+ # Replace production URLs with staging URLs for RC versions
+ chart_yaml_content = chart_yaml_backup.replace(
+ "https://airflow.apache.org/", "https://airflow.staged.apache.org/"
+ )
+ CHART_YAML_FILE.write_text(chart_yaml_content)
+ get_console().print(
+ "[success]Documentation links temporarily updated to staging environment for RC version packaging.[/]"
)
+
+ try:
+ chart_yaml_dict = yaml.safe_load(CHART_YAML_FILE.read_text())
+ version = chart_yaml_dict["version"]
+ result = sync_virtualenv(force_venv_setup=False)
if result.returncode != 0:
- get_console().print("[error]Error signing the chart[/]")
sys.exit(result.returncode)
+ make_sure_helm_installed()
+ get_console().print(f"[info]Packaging the chart for Helm Chart {version}[/]")
+ k8s_env = os.environ.copy()
+ k8s_env["PATH"] = str(K8S_BIN_BASE_PATH) + os.pathsep + k8s_env["PATH"]
+ # Tar on modern unix options requires --wildcards parameter to work with globs
+ # See https://github.com/technosophos/helm-gpg/issues/1
+ k8s_env["TAR_OPTIONS"] = "--wildcards"
+ archive_name = f"airflow-{version}.tgz"
+ OUT_PATH.mkdir(parents=True, exist_ok=True)
result = run_command(
- cmd=["helm", "gpg", "verify", archive_name],
- cwd=AIRFLOW_DIST_PATH.as_posix(),
+ cmd=["helm", "package", "chart", "--dependency-update", "--destination", OUT_PATH.as_posix()],
env=k8s_env,
check=False,
)
if result.returncode != 0:
- get_console().print("[error]Error signing the chart[/]")
+ get_console().print("[error]Error packaging the chart[/]")
+ sys.exit(result.returncode)
+ AIRFLOW_DIST_PATH.mkdir(parents=True, exist_ok=True)
+ final_archive = AIRFLOW_DIST_PATH / archive_name
+ final_archive.unlink(missing_ok=True)
+ source_archive = OUT_PATH / archive_name
+ result = repack_deterministically(
+ source_archive=source_archive,
+ dest_archive=final_archive,
+ prepend_path=None,
+ timestamp=get_source_date_epoch(CHART_DIR),
+ )
+ if result.returncode != 0:
+ get_console().print(
+ f"[error]Error repackaging package for Helm Chart from {source_archive} to {final_archive}[/]"
+ )
sys.exit(result.returncode)
else:
- get_console().print(f"[success]Chart signed - the {prov_file} file created.[/]")
+ get_console().print(f"[success]Package created in {final_archive}[/]")
+ if sign_email:
+ get_console().print(f"[info]Signing the package with {sign_email}[/]")
+ prov_file = final_archive.with_suffix(".tgz.prov")
+ if prov_file.exists():
+ get_console().print(f"[warning]Removing existing {prov_file}[/]")
+ prov_file.unlink()
+ result = run_command(
+ cmd=["helm", "gpg", "sign", "-u", sign_email, archive_name],
+ cwd=AIRFLOW_DIST_PATH.as_posix(),
+ env=k8s_env,
+ check=False,
+ )
+ if result.returncode != 0:
+ get_console().print("[error]Error signing the chart[/]")
+ sys.exit(result.returncode)
+ result = run_command(
+ cmd=["helm", "gpg", "verify", archive_name],
+ cwd=AIRFLOW_DIST_PATH.as_posix(),
+ env=k8s_env,
+ check=False,
+ )
+ if result.returncode != 0:
+ get_console().print("[error]Error signing the chart[/]")
+ sys.exit(result.returncode)
+ else:
+ get_console().print(f"[success]Chart signed - the {prov_file} file created.[/]")
+ finally:
+ # Restore original Chart.yaml content if it was modified for RC version
+ if is_rc_version and chart_yaml_backup:
+ CHART_YAML_FILE.write_text(chart_yaml_backup)
+ get_console().print("[info]Restored original Chart.yaml content after packaging.[/]")
def generate_issue_content(
@@ -3917,8 +4118,10 @@ def generate_issue_content(
# Relate so we can find those from the body
if pr.body:
body = " ".join(pr.body.splitlines())
+ body_without_code_blocks = remove_code_blocks(body)
linked_issue_numbers = {
- int(issue_match.group(1)) for issue_match in ISSUE_MATCH_IN_BODY.finditer(body)
+ int(issue_match.group(1))
+ for issue_match in ISSUE_MATCH_IN_BODY.finditer(body_without_code_blocks)
}
for linked_issue_number in linked_issue_numbers:
progress.console.print(
@@ -4128,7 +4331,7 @@ def version_check(
@option_verbose
@option_dry_run
def check_release_files(
- path: Path,
+ path_to_airflow_svn: Path,
version: str | None,
release_date: str | None,
packages_file: Path | None,
@@ -4167,7 +4370,7 @@ def check_release_files(
if not release_date:
console.print("[error]--release-date is required for providers[/]")
sys.exit(1)
- directory = path / "providers" / release_date
+ directory = path_to_airflow_svn / "providers" / release_date
else:
if not version:
console.print(f"[error]--version is required for {release_type}[/]")
@@ -4175,13 +4378,13 @@ def check_release_files(
# Determine directory based on release type
if release_type == "airflow":
- directory = path / version
+ directory = path_to_airflow_svn / version
elif release_type == "task-sdk":
- directory = path / version
+ directory = path_to_airflow_svn / "task-sdk" / version
elif release_type == "airflow-ctl":
- directory = path / "airflow-ctl" / version
+ directory = path_to_airflow_svn / "airflow-ctl" / version
elif release_type == "python-client":
- directory = path / "clients" / "python" / version
+ directory = path_to_airflow_svn / "clients" / "python" / version
else:
console.print(f"[error]Unknown release type: {release_type}[/]")
sys.exit(1)
@@ -4209,10 +4412,14 @@ def check_release_files(
)
elif release_type == "airflow":
missing_files = check_airflow_release(files, version)
- create_docker(AIRFLOW_DOCKER.format(version), dockerfile_path)
+ create_docker(AIRFLOW_DOCKER.format(version, version), dockerfile_path)
elif release_type == "task-sdk":
missing_files = check_task_sdk_release(files, version)
- create_docker(TASK_SDK_DOCKER.format(version), dockerfile_path)
+ airflow_version = version.replace("1", "3", 1)
+ create_docker(
+ TASK_SDK_DOCKER.format(version, airflow_version, airflow_version, airflow_version),
+ dockerfile_path,
+ )
elif release_type == "airflow-ctl":
missing_files = check_airflow_ctl_release(files, version)
create_docker(AIRFLOW_CTL_DOCKER.format(version), dockerfile_path)
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 44810eeb64c..5e00c23b866 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
@@ -42,6 +42,7 @@ RELEASE_PROVIDERS_COMMANDS: dict[str, str | list[str]] = {
"name": "Providers release commands",
"commands": [
"prepare-provider-documentation",
+ "update-providers-next-version",
"prepare-provider-distributions",
"install-provider-distributions",
"verify-provider-distributions",
@@ -75,6 +76,7 @@ RELEASE_OTHER_COMMANDS: dict[str, str | list[str]] = {
"generate-constraints",
"update-constraints",
"publish-docs-to-s3",
+ "validate-rc-by-pmc",
"check-release-files",
],
}
@@ -134,6 +136,7 @@ RELEASE_MANAGEMENT_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
"name": "Package flags",
"options": [
"--sign-email",
+ "--version-suffix",
],
}
],
@@ -240,27 +243,46 @@ RELEASE_MANAGEMENT_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
{
"name": "Add tags to providers",
"options": [
- "--clean-local-tags",
+ "--clean-tags",
+ "--release-date",
],
},
],
"breeze release-management prepare-provider-documentation": [
{
- "name": "Provider documentation preparation flags",
+ "name": "Documentation generation mode",
"options": [
- "--base-branch",
- "--github-repository",
- "--include-not-ready-providers",
- "--include-removed-providers",
- "--non-interactive",
+ "--release-date",
+ "--incremental-update",
"--only-min-version-update",
"--reapply-templates-only",
+ "--non-interactive",
+ ],
+ },
+ {
+ "name": "Select non-regular providers",
+ "options": [
+ "--include-not-ready-providers",
+ "--include-removed-providers",
+ ],
+ },
+ {
+ "name": "Skip steps",
+ "options": [
"--skip-git-fetch",
"--skip-changelog",
"--skip-readme",
],
- }
+ },
+ {
+ "name": "Advanced options",
+ "options": [
+ "--base-branch",
+ "--github-repository",
+ ],
+ },
],
+ "breeze release-management update-providers-next-version": [],
"breeze release-management prepare-python-client": [
{
"name": "Python client preparation flags",
@@ -392,7 +414,6 @@ RELEASE_MANAGEMENT_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
"--excluded-pr-list",
"--github-token",
"--only-available-in-dist",
- "--no-include-browser-link",
],
}
],
@@ -504,6 +525,18 @@ RELEASE_MANAGEMENT_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
],
},
],
+ "breeze release-management validate-rc-by-pmc": [
+ {
+ "name": "Validation options",
+ "options": [
+ "--distribution",
+ "--version",
+ "--task-sdk-version",
+ "--path-to-airflow-svn",
+ "--checks",
+ ],
+ },
+ ],
"breeze release-management check-release-files": [
{
"name": "Check release files flags",
diff --git a/dev/breeze/src/airflow_breeze/utils/check_release_files.py b/dev/breeze/src/airflow_breeze/utils/check_release_files.py
index e5143e64b0e..8c64a413763 100644
--- a/dev/breeze/src/airflow_breeze/utils/check_release_files.py
+++ b/dev/breeze/src/airflow_breeze/utils/check_release_files.py
@@ -33,16 +33,16 @@ RUN cd airflow-core; uv sync --no-sources
AIRFLOW_DOCKER = """\
FROM python:3.10
-# Upgrade
-RUN pip install "apache-airflow=={}"
+RUN pip install "apache-airflow=={}" \
+ --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-{}/constraints-3.10.txt"
"""
TASK_SDK_DOCKER = """\
FROM python:3.10
-# Upgrade
-RUN pip install "apache-airflow-task-sdk=={}"
+RUN pip install "apache-airflow-task-sdk=={}" "apache-airflow-core=={}" "apache-airflow=={}"\
+ --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-{}/constraints-3.10.txt"
"""
diff --git a/dev/breeze/src/airflow_breeze/utils/click_validators.py b/dev/breeze/src/airflow_breeze/utils/click_validators.py
new file mode 100644
index 00000000000..25f9c0f4f46
--- /dev/null
+++ b/dev/breeze/src/airflow_breeze/utils/click_validators.py
@@ -0,0 +1,52 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import re
+from datetime import datetime
+
+import click
+
+
+def validate_release_date(ctx: click.core.Context, param: click.core.Option, value: str) -> str:
+ """
+ Validate that the date follows YYYY-MM-DD[_NN] format.
+
+ :param ctx: Click context
+ :param param: Click parameter
+ :param value: The value to validate
+ :return: The validated value
+ :raises click.BadParameter: If the value doesn't match the required format
+ """
+ if not value:
+ return value
+
+ # Check if the format matches YYYY-MM-DD or YYYY-MM-DD_NN
+ pattern = r"^\d{4}-\d{2}-\d{2}(_\d{2})?$"
+ if not re.match(pattern, value):
+ raise click.BadParameter(
+ "Date must be in YYYY-MM-DD or YYYY-MM-DD_NN format (e.g., 2025-11-16 or 2025-11-16_01)"
+ )
+
+ # Validate that the date part (YYYY-MM-DD) is a valid date
+ date_part = value.split("_")[0]
+ try:
+ datetime.strptime(date_part, "%Y-%m-%d")
+ except ValueError:
+ raise click.BadParameter(f"Invalid date: {date_part}. Please provide a valid date.")
+
+ return value
diff --git a/dev/breeze/src/airflow_breeze/utils/path_utils.py b/dev/breeze/src/airflow_breeze/utils/path_utils.py
index 098d7776e20..6ee4863a093 100644
--- a/dev/breeze/src/airflow_breeze/utils/path_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/path_utils.py
@@ -249,6 +249,7 @@ AIRFLOW_UI_DIR = AIRFLOW_CORE_SOURCES_PATH / "airflow" / "ui"
# Do not delete it - it is used for old commit retrieval from providers
AIRFLOW_ORIGINAL_PROVIDERS_DIR = AIRFLOW_ROOT_PATH / "airflow" / "providers"
AIRFLOW_PROVIDERS_ROOT_PATH = AIRFLOW_ROOT_PATH / "providers"
+AIRFLOW_PROVIDERS_LAST_RELEASE_DATE_PATH = AIRFLOW_PROVIDERS_ROOT_PATH / ".last_release_date.txt"
AIRFLOW_DIST_PATH = AIRFLOW_ROOT_PATH / "dist"
TASK_SDK_ROOT_PATH = AIRFLOW_ROOT_PATH / "task-sdk"
@@ -279,8 +280,18 @@ UI_ASSET_COMPILE_LOCK = UI_CACHE_PATH / ".asset_compile.lock"
UI_ASSET_OUT_FILE = UI_CACHE_PATH / "asset_compile.out"
UI_ASSET_OUT_DEV_MODE_FILE = UI_CACHE_PATH / "asset_compile_dev_mode.out"
UI_ASSET_HASH_PATH = AIRFLOW_ROOT_PATH / ".build" / "ui" / "hash.txt"
+
UI_NODE_MODULES_PATH = AIRFLOW_CORE_SOURCES_PATH / "airflow" / "ui" / "node_modules"
UI_DIST_PATH = AIRFLOW_CORE_SOURCES_PATH / "airflow" / "ui" / "dist"
+UI_VITE_MANIFEST_PATH = UI_DIST_PATH / ".vite" / "manifest.json"
+FAST_API_SIMPLE_AUTH_MANAGER_PATH = (
+ AIRFLOW_CORE_SOURCES_PATH / "airflow" / "api_fastapi" / "auth" / "managers" / "simple"
+)
+FAST_API_SIMPLE_AUTH_MANAGER_NODE_MODULES_PATH = FAST_API_SIMPLE_AUTH_MANAGER_PATH / "ui" / "node_modules"
+FAST_API_SIMPLE_AUTH_MANAGER_DIST_PATH = FAST_API_SIMPLE_AUTH_MANAGER_PATH / "ui" / "dist"
+FAST_API_SIMPLE_AUTH_MANAGER_VITE_MANIFEST_PATH = (
+ FAST_API_SIMPLE_AUTH_MANAGER_DIST_PATH / ".vite" / "manifest.json"
+)
DAGS_PATH = AIRFLOW_ROOT_PATH / "dags"
FILES_PATH = AIRFLOW_ROOT_PATH / "files"