You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by ra...@apache.org on 2026/10/12 13:06:05 UTC
(airflow) branch main updated: Add start-beta-process command to cut beta pre-releases (#74464)
This is an automated email from the ASF dual-hosted git repository.
vatsrahul1001 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new fac3157a735 Add start-beta-process command to cut beta pre-releases (#74464)
fac3157a735 is described below
commit fac3157a735fec7522ac2e7e2c260e7e46561559
Author: Rahul Vats <43...@users.noreply.github.com>
AuthorDate: Mon Oct 12 18:35:53 2026 +0530
Add start-beta-process command to cut beta pre-releases (#74464)
Betas are cut from vX-Y-test only: there is no vX-Y-stable branch yet and
no sync PR (a sync PR exists only to carry changes from vX-Y-test into
vX-Y-stable for an rc or final), and there is no vote. start-rc-process
requires the stable branch and a sync branch, so a beta had to be cut by
hand. A dedicated command keeps start-rc-process untouched and models the
real beta flow: tag the vX-Y-test tip (the version-bump and release-notes
commits are pushed there beforehand through normal PRs) and resolve the
constraints through the release-constraints workflow from vX-Y-test, the
same way an rc does. The workflow is taught to accept beta versions and
treat them as pre-releases: provider rc waves are allowed and the result
lands on its own constraints-X.Y.0bN branch and tag, leaving the shared
constraints-X-Y branch untouched (only a final moves it).
---
.github/workflows/release-constraints.yml | 21 ++--
dev/README_RELEASE_AIRFLOW.md | 24 ++++
dev/breeze/doc/09_release_management_tasks.rst | 14 +++
.../doc/images/output_release-management.svg | 120 +++++++++---------
.../doc/images/output_release-management.txt | 2 +-
...utput_release-management_start-beta-process.svg | 138 ++++++++++++++++++++
...utput_release-management_start-beta-process.txt | 1 +
.../output_setup_check-all-params-in-groups.svg | 48 +++----
.../output_setup_check-all-params-in-groups.txt | 2 +-
.../output_setup_regenerate-command-images.svg | 56 +++++----
.../output_setup_regenerate-command-images.txt | 2 +-
.../commands/release_candidate_command.py | 140 ++++++++++++++++++++-
.../commands/release_management_commands_config.py | 11 ++
.../airflow_breeze/utils/release_constraints.py | 10 +-
dev/breeze/tests/test_release_candidate_command.py | 88 ++++++++++++-
dev/breeze/tests/test_release_constraints.py | 1 +
16 files changed, 555 insertions(+), 123 deletions(-)
diff --git a/.github/workflows/release-constraints.yml b/.github/workflows/release-constraints.yml
index d815251380f..9c10f291f86 100644
--- a/.github/workflows/release-constraints.yml
+++ b/.github/workflows/release-constraints.yml
@@ -20,15 +20,15 @@
#
# The stage is derived from the version, so the two cannot be mismatched by hand:
#
-# * a candidate (`3.3.1rc1`) pins the providers at the versions PyPI holds - the wave being
-# voted on exists there only as rc versions - and lands on a branch of its own, so a candidate
-# never moves the branch every other build reads. Re-running it for the same candidate
-# replaces that branch and its tag, so the two always describe the run that produced them;
+# * a pre-release - beta (`3.4.0b1`) or candidate (`3.3.1rc1`) - pins the providers at the versions
+# PyPI holds (rc provider waves included) and lands on a branch of its own, so it never moves the
+# branch every other build reads. Re-running it for the same pre-release replaces that branch and
+# its tag, so the two always describe the run that produced them;
# * a final (`3.3.1`) pins the providers at their released versions, ignoring any candidate, and
# commits onto `constraints-X-Y` itself, which is what makes the released constraints the
# baseline everything downstream reads.
#
-# A final therefore cannot be produced by retagging a candidate: a released version must never
+# A final therefore cannot be produced by retagging a pre-release: a released version must never
# pin an rc.
---
name: Release constraints
@@ -36,7 +36,7 @@ on: # yamllint disable-line rule:truthy
workflow_dispatch:
inputs:
version:
- description: "Version the constraints belong to, e.g. 3.3.1rc1 or 3.3.1"
+ description: "Version the constraints belong to, e.g. 3.4.0b1, 3.3.1rc1 or 3.3.1"
required: true
type: string
ref:
@@ -109,15 +109,18 @@ jobs:
env:
VERSION: ${{ inputs.version }}
run: |
- if [[ ! "${VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+(rc[0-9]+)?$ ]]; then
- echo "'${VERSION}' is not a release version - expected X.Y.Z or X.Y.ZrcN." >&2
+ if [[ ! "${VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+((b|rc)[0-9]+)?$ ]]; then
+ echo "'${VERSION}' is not a release version - expected X.Y.Z, X.Y.ZbN or X.Y.ZrcN." >&2
exit 1
fi
major="$(echo "${VERSION}" | cut -d. -f1)"
minor="$(echo "${VERSION}" | cut -d. -f2)"
constraints_branch="constraints-${major}-${minor}"
echo "constraints-branch=${constraints_branch}" >> "${GITHUB_OUTPUT}"
- if [[ "${VERSION}" == *rc* ]]; then
+ # A pre-release - beta or rc - pins the providers at the versions PyPI holds (rc provider
+ # waves included) and lands on a branch and tag of its own, so it never moves the shared
+ # constraints-X-Y branch. A final pins released providers and commits onto the shared branch.
+ if [[ "${VERSION}" =~ (b|rc)[0-9]+$ ]]; then
echo "allow-pre-releases=true" >> "${GITHUB_OUTPUT}"
echo "target-branch=constraints-${VERSION}" >> "${GITHUB_OUTPUT}"
else
diff --git a/dev/README_RELEASE_AIRFLOW.md b/dev/README_RELEASE_AIRFLOW.md
index d29de1bbe39..c7dd2f54855 100644
--- a/dev/README_RELEASE_AIRFLOW.md
+++ b/dev/README_RELEASE_AIRFLOW.md
@@ -114,6 +114,30 @@ moves `vX-Y-test` forward to the current `main` - only the branch-specific commi
`Update default branches for X.Y`) are kept on top of `main`. Each beta is cut from the branch
in that state, so everything merged to `main` lands in the next beta.
+### Cutting a beta
+
+A beta is cut with `breeze release-management start-beta-process`, not `start-rc-process`. A beta is
+released from `vX-Y-test` only: there is no `vX-Y-stable` branch yet and therefore no sync PR (a sync
+PR exists only to carry changes from `vX-Y-test` into `vX-Y-stable` for an `rc`/final), and there is
+no vote.
+
+1. Push the version-bump and release-notes commits to `vX-Y-test` through normal PRs, so the tip of
+ `vX-Y-test` is exactly what the beta should ship.
+2. Run:
+
+ ```shell script
+ breeze release-management start-beta-process \
+ --version ${VERSION} \
+ --task-sdk-version ${TASK_SDK_VERSION}
+ ```
+
+ It validates that `vX-Y-test` exists, checks out its tip, tags the beta there, builds and signs
+ the artifacts, resolves constraints through the `release-constraints` workflow from `vX-Y-test`
+ (exactly like an `rc`: provider rc waves are allowed and the result lands on its own
+ `constraints-X.Y.0bN` branch and tag, leaving the shared `constraints-X-Y` untouched), uploads to
+ SVN dev and PyPI, and pushes the tags. Everything downstream of the tag is the same as an `rc`;
+ only the branch/sync/vote handling differs.
+
During this phase, all automation that would add commits directly to `vX-Y-test` must be paused -
any such commit makes `vX-Y-test` diverge from `main` and breaks the next fast-forward. Upgrades and
fixes land on `main` only and reach `vX-Y-test` with the next fast-forward. When you add the new
diff --git a/dev/breeze/doc/09_release_management_tasks.rst b/dev/breeze/doc/09_release_management_tasks.rst
index 346836f4650..25caf147ac8 100644
--- a/dev/breeze/doc/09_release_management_tasks.rst
+++ b/dev/breeze/doc/09_release_management_tasks.rst
@@ -176,6 +176,20 @@ automates it.
:alt: Breeze release-management create-minor-branch
+Start beta process
+""""""""""""""""""
+
+When we prepare a beta pre-release, we automate some of the steps we need to do.
+
+.. code-block:: bash
+
+ breeze release-management start-beta-process
+
+.. image:: ./images/output_release-management_start-beta-process.svg
+ :target: https://raw.githubusercontent.com/apache/airflow/main/dev/breeze/doc/images/output_release-management_start-beta-process.svg
+ :width: 100%
+ :alt: Breeze release-management start-beta-process
+
Start release candidate process
"""""""""""""""""""""""""""""""
diff --git a/dev/breeze/doc/images/output_release-management.svg b/dev/breeze/doc/images/output_release-management.svg
index 01900bf07f6..ed3cab0d811 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 1684.8" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1709.1999999999998" 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="1633.8" />
+ <rect x="0" y="0" width="1463.0" height="1658.1999999999998" />
</clipPath>
<clipPath id="breeze-release-management-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -242,9 +242,12 @@
<clipPath id="breeze-release-management-line-65">
<rect x="0" y="1587.5" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="breeze-release-management-line-66">
+ <rect x="0" y="1611.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="1682.8" 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="1707.2" 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"/>
@@ -266,61 +269,62 @@
</text><text class="breeze-release-management-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-line-9)">│</text><text class="breeze-release-management-r4" x="24.4" y="239.6" textLength="414.8" clip-path="url(#breeze-release-management-line-9)">create-minor-branch               </text><text class="breeze-release-management-r1" x="463.6" y="239.6" textLength="976" clip-path="url(#breez [...]
</text><text class="breeze-release-management-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-line-10)">│</text><text class="breeze-release-management-r4" x="24.4" y="264" textLength="414.8" clip-path="url(#breeze-release-management-line-10)">prepare-airflow-distributions     </text><text class="breeze-release-management-r1" x="463.6" y="264" textLength="976" clip-path="url(#breeze-release-management-line-10)">Prepare sdist/whl& [...]
</text><text class="breeze-release-management-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-line-11)">│</text><text class="breeze-release-management-r4" x="24.4" y="288.4" textLength="414.8" clip-path="url(#breeze-release-management-line-11)">prepare-tarball                   </text><text class="breeze-release-management-r1" x="463.6" y="288.4" textLength="976" [...]
-</text><text class="breeze-release-management-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-line-12)">│</text><text class="breeze-release-management-r4" x="24.4" y="312.8" textLength="414.8" clip-path="url(#breeze-release-management-line-12)">start-rc-process                  </text><text class="breeze-release-management-r1" x="463.6" y="312.8" textLength="976" clip [...]
-</text><text class="breeze-release-management-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-line-13)">│</text><text class="breeze-release-management-r4" x="24.4" y="337.2" textLength="414.8" clip-path="url(#breeze-release-management-line-13)">start-release                     </text><text class="breeze-release-management-r1" x="463.6" y="337.2" textLe [...]
-</text><text class="breeze-release-management-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-line-14)">│</text><text class="breeze-release-management-r4" x="24.4" y="361.6" textLength="414.8" clip-path="url(#breeze-release-management-line-14)">release-prod-images               </text><text class="breeze-release-management-r1" x="463.6" y="361.6" textLength="976" clip-path="url(#bre [...]
-</text><text class="breeze-release-management-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-line-15)">│</text><text class="breeze-release-management-r4" x="24.4" y="386" textLength="414.8" clip-path="url(#breeze-release-management-line-15)">generate-issue-content-core       </text><text class="breeze-release-management-r1" x="463.6" y="386" textLength="976" clip-path="url(#breeze-release-management-line-15)">Generates [...]
-</text><text class="breeze-release-management-r5" x="0" y="410.4" textLength="1464" clip-path="url(#breeze-release-management-line-16)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-line-16)">
-</text><text class="breeze-release-management-r5" x="0" y="434.8" textLength="24.4" clip-path="url(#breeze-release-management-line-17)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="434.8" textLength="280.6" clip-path="url(#breeze-release-management-line-17)"> Helm release commands </text><text class="breeze-release-management-r5" x="305" y="434.8" textLength="1134.6" clip-path="url(#breeze-release-management-line-17)">─────────────────────────────── [...]
-</text><text class="breeze-release-management-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-line-18)">│</text><text class="breeze-release-management-r4" x="24.4" y="459.2" textLength="500.2" clip-path="url(#breeze-release-management-line-18)">prepare-helm-chart-tarball               </text><text class="breeze-release-management-r1" x="549" y="459.2" textLength="890.6" clip-path="u [...]
-</text><text class="breeze-release-management-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-line-19)">│</text><text class="breeze-release-management-r4" x="24.4" y="483.6" textLength="500.2" clip-path="url(#breeze-release-management-line-19)">prepare-helm-chart-package               </text><text class="breeze-release-management-r1" x="549" y="483.6" textLength="890.6" clip-path="u [...]
-</text><text class="breeze-release-management-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-line-20)">│</text><text class="breeze-release-management-r4" x="24.4" y="508" textLength="500.2" clip-path="url(#breeze-release-management-line-20)">generate-issue-content-helm-chart        </text><text class="breeze-release-management-r1" x="549" y="508" textLength="890.6" clip-path="url(#breeze-release-management-line-20)">G [...]
-</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="390.4" clip-path="url(#breeze-release-management-line-23)">prepare-provider-documentation  </text><text class="breeze-release-management-r1" x="439.2" y="581.2" textLength="1000.4" clip-path="url(#breeze-release-management-line-23)">Prepare CHANGELOG, RE [...]
-</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="390.4" clip-path="url(#breeze-release-management-line-24)">classify-provider-changes       </text><text class="breeze-release-management-r1" x="439.2" y="605.6" textLength="1000.4" clip-path="url(#breeze-release-management-line-24)">Classi [...]
-</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-r1" x="439.2" y="630" textLength="1000.4" clip-path="url(#breeze-release-management-line-25)">rules, flagging ambiguous commits as 'needs_llm' for an agent/skill to assess.    </text><text class="breeze-release-management-r5" x="14 [...]
-</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-r1" x="439.2" y="654.4" textLength="707.6" clip-path="url(#breeze-release-management-line-26)">Outputs JSON - a deterministic alternative to the random '</text><text class="breeze-release-management-r4" x="1146.8" y="654.4" textLength="207.4" clip-path="url(# [...]
-</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-r1" x="439.2" y="678.8" textLength="1000.4" clip-path="url(#breeze-release-management-line-27)">used purely for discovery.                             [...]
-</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="390.4" clip-path="url(#breeze-release-management-line-28)">update-providers-next-version   </text><text class="breeze-release-management-r1" x="439.2" y="703.2" textLength="1000.4" clip-path="url(#breeze-release-management-line-28)">Update provider  [...]
-</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="390.4" clip-path="url(#breeze-release-management-line-29)">prepare-provider-distributions  </text><text class="breeze-release-management-r1" x="439.2" y="727.6" textLength="1000.4" clip-path="url(#breeze-release-management-line-29)">Prepare sdist/whl dis [...]
-</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-r1" x="439.2" y="752" textLength="268.4" clip-path="url(#breeze-release-management-line-30)">wiped with `git clean </text><text class="breeze-release-management-r6" x="707.6" y="752" textLength="48.8" clip-path="url(#breeze-release-management-line-30)">-fdx</text><text class="breeze-release [...]
-</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-r1" x="439.2" y="776.4" textLength="1000.4" clip-path="url(#breeze-release-management-line-31)">keep in-tree generated files out of the artifact. See dev/breeze                 &# [...]
-</text><text class="breeze-release-management-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-line-32)">│</text><text class="breeze-release-management-r1" x="439.2" y="800.8" textLength="1000.4" clip-path="url(#breeze-release-management-line-32)">release-management docs.                               [...]
-</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="390.4" clip-path="url(#breeze-release-management-line-33)">install-provider-distributions  </text><text class="breeze-release-management-r1" x="439.2" y="825.2" textLength="1000.4" clip-path="url(#breeze-release-management-line-33)">Installs provider dis [...]
-</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="390.4" clip-path="url(#breeze-release-management-line-34)">verify-provider-distributions   </text><text class="breeze-release-management-r1" x="439.2" y="849.6" textLength="1000.4" clip-path="url(#breeze-release-management-line-34)">Verifies if all& [...]
-</text><text class="breeze-release-management-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-release-management-line-35)">│</text><text class="breeze-release-management-r4" x="24.4" y="874" textLength="390.4" clip-path="url(#breeze-release-management-line-35)">generate-providers-metadata     </text><text class="breeze-release-management-r1" x="439.2" y="874" textLength="1000.4" clip-path="url(#breeze-release-management-line-35)">Generates metadat [...]
-</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="390.4" clip-path="url(#breeze-release-management-line-36)">generate-issue-content-providers</text><text class="breeze-release-management-r1" x="439.2" y="898.4" textLength="1000.4" clip-path="url(#breeze-release-management-line-36)">Generates content for issu [...]
-</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="390.4" clip-path="url(#breeze-release-management-line-37)">clean-old-provider-artifacts    </text><text class="breeze-release-management-r1" x="439.2" y="922.8" textLength="1000.4" clip-path="url(#breeze-release-management-line-37)">Cleans the  [...]
-</text><text class="breeze-release-management-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-line-38)">│</text><text class="breeze-release-management-r4" x="24.4" y="947.2" textLength="390.4" clip-path="url(#breeze-release-management-line-38)">tag-providers                   </text><text class="breeze-release-management-r1" x="439.2" y="947.2" textLength="1000.4 [...]
-</text><text class="breeze-release-management-r5" x="0" y="971.6" textLength="1464" clip-path="url(#breeze-release-management-line-39)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-line-39)">
-</text><text class="breeze-release-management-r5" x="0" y="996" textLength="24.4" clip-path="url(#breeze-release-management-line-40)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="996" textLength="427" clip-path="url(#breeze-release-management-line-40)"> Airflow Task SDK release commands </text><text class="breeze-release-management-r5" x="451.4" y="996" textLength="988.2" clip-path="url(#breeze-release-management-line-40)">──────────────── [...]
-</text><text class="breeze-release-management-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-line-41)">│</text><text class="breeze-release-management-r4" x="24.4" y="1020.4" textLength="512.4" clip-path="url(#breeze-release-management-line-41)">prepare-task-sdk-distributions            </text><text class="breeze-release-management-r1" x="561.2" y="1020.4" textLength="878.4" clip-path="url(#breez [...]
-</text><text class="breeze-release-management-r5" x="0" y="1044.8" textLength="1464" clip-path="url(#breeze-release-management-line-42)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-line-42)">
-</text><text class="breeze-release-management-r5" x="0" y="1069.2" textLength="24.4" clip-path="url(#breeze-release-management-line-43)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1069.2" textLength="353.8" clip-path="url(#breeze-release-management-line-43)"> airflowctl release commands </text><text class="breeze-release-management-r5" x="378.2" y="1069.2" textLength="1061.4" clip-path="url(#breeze-release-management-line-43)">──────────────────── [...]
-</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="414.8" clip-path="url(#breeze-release-management-line-44)">prepare-airflow-ctl-distributions </text><text class="breeze-release-management-r1" x="463.6" y="1093.6" textLength="976" clip-path="url(#breeze-release-management-line-44)">Prepare sdist/whl distri [...]
-</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="414.8" clip-path="url(#breeze-release-management-line-45)">generate-issue-content-airflow-ctl</text><text class="breeze-release-management-r1" x="463.6" y="1118" textLength="976" clip-path="url(#breeze-release-management-line-45)">Generates content for issue [...]
-</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="414.8" clip-path="url(#breeze-release-management-line-46)">generate-airflowctl-changelog     </text><text class="breeze-release-management-r1" x="463.6" y="1142.4" textLength="976" clip-path="url(#breeze-release-management-line-46)">Generates  [...]
-</text><text class="breeze-release-management-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-line-47)">│</text><text class="breeze-release-management-r1" x="463.6" y="1166.8" textLength="976" clip-path="url(#breeze-release-management-line-47)">RELEASE_NOTES.rst.                                 [...]
-</text><text class="breeze-release-management-r5" x="0" y="1191.2" textLength="1464" clip-path="url(#breeze-release-management-line-48)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-line-48)">
-</text><text class="breeze-release-management-r5" x="0" y="1215.6" textLength="24.4" clip-path="url(#breeze-release-management-line-49)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1215.6" textLength="463.6" clip-path="url(#breeze-release-management-line-49)"> Apache Airflow Mypy release commands </text><text class="breeze-release-management-r5" x="488" y="1215.6" textLength="951.6" clip-path="url(#breeze-release-management-line-49)">──── [...]
-</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="451.4" clip-path="url(#breeze-release-management-line-50)">prepare-mypy-distributions           </text><text class="breeze-release-management-r1" x="500.2" y="1240" textLength="939.4" clip-path="url(#breeze-release-manage [...]
-</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><text class="breeze-release-management-r5" x="0" y="1288.8" textLength="24.4" clip-path="url(#breeze-release-management-line-52)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1288.8" textLength="292.8" clip-path="url(#breeze-release-management-line-52)"> Other release commands </text><text class="breeze-release-management-r5" x="317.2" y="1288.8" textLength="1122.4" clip-path="url(#breeze-release-management-line-52)">───────────────────────── [...]
-</text><text class="breeze-release-management-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-release-management-line-53)">│</text><text class="breeze-release-management-r4" x="24.4" y="1313.2" textLength="292.8" clip-path="url(#breeze-release-management-line-53)">add-back-references     </text><text class="breeze-release-management-r1" x="341.6" y="1313.2" textLength="1098" clip-path="url(#breeze-release-management-line-53)">Command to ad [...]
-</text><text class="breeze-release-management-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-line-54)">│</text><text class="breeze-release-management-r4" x="24.4" y="1337.6" textLength="292.8" clip-path="url(#breeze-release-management-line-54)">prepare-python-client   </text><text class="breeze-release-management-r1" x="341.6" y="1337.6" textLength="1098" clip-path="url(#breeze-release-management-line-54)">Prepares python client& [...]
-</text><text class="breeze-release-management-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-line-55)">│</text><text class="breeze-release-management-r4" x="24.4" y="1362" textLength="292.8" clip-path="url(#breeze-release-management-line-55)">publish-docs            </text><text class="breeze-release-management-r1" x="341.6" y="1362" textLength="1098" clip-path="url(#breeze-release-management-line [...]
-</text><text class="breeze-release-management-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-line-56)">│</text><text class="breeze-release-management-r4" x="24.4" y="1386.4" textLength="292.8" clip-path="url(#breeze-release-management-line-56)">generate-constraints    </text><text class="breeze-release-management-r1" x="341.6" y="1386.4" textLength="1098" clip-path="url(#breeze-release-management-line-56)">Generates pinned c [...]
-</text><text class="breeze-release-management-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-line-57)">│</text><text class="breeze-release-management-r4" x="24.4" y="1410.8" textLength="292.8" clip-path="url(#breeze-release-management-line-57)">update-constraints      </text><text class="breeze-release-management-r1" x="341.6" y="1410.8" textLength="1098" clip-path="url(#breeze-release-management-line-57)">Update releas [...]
-</text><text class="breeze-release-management-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-line-58)">│</text><text class="breeze-release-management-r4" x="24.4" y="1435.2" textLength="292.8" clip-path="url(#breeze-release-management-line-58)">publish-docs-to-s3      </text><text class="breeze-release-management-r1" x="341.6" y="1435.2" textLength="1098" clip-path="url(#breeze-release-management-line-58)">Publishes doc [...]
-</text><text class="breeze-release-management-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-line-59)">│</text><text class="breeze-release-management-r4" x="24.4" y="1459.6" textLength="292.8" clip-path="url(#breeze-release-management-line-59)">publish-schemas-to-s3   </text><text class="breeze-release-management-r1" x="341.6" y="1459.6" textLength="1098" clip-path="url(#breeze-release-management-line-59)">Publishes generated JSO [...]
-</text><text class="breeze-release-management-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-line-60)">│</text><text class="breeze-release-management-r4" x="24.4" y="1484" textLength="292.8" clip-path="url(#breeze-release-management-line-60)">verify-rc-by-pmc        </text><text class="breeze-release-management-r1" x="341.6" y="1484" textLength="1098" clip-path="url(#breeze-release-management-line-60)">[EXPERIMENTAL] [...]
-</text><text class="breeze-release-management-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-release-management-line-61)">│</text><text class="breeze-release-management-r4" x="24.4" y="1508.4" textLength="292.8" clip-path="url(#breeze-release-management-line-61)">check-release-files     </text><text class="breeze-release-management-r1" x="341.6" y="1508.4" textLength="1098" clip-path="url(#breeze-release-management-line-61)">Verify that a [...]
-</text><text class="breeze-release-management-r5" x="0" y="1532.8" textLength="1464" clip-path="url(#breeze-release-management-line-62)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-release-management-line-62)">
-</text><text class="breeze-release-management-r5" x="0" y="1557.2" textLength="24.4" clip-path="url(#breeze-release-management-line-63)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1557.2" textLength="122" clip-path="url(#breeze-release-management-line-63)"> Commands </text><text class="breeze-release-management-r5" x="146.4" y="1557.2" textLength="1293.2" clip-path="url(#breeze-release-management-line-63)">─────────────────────────────────────────────────── [...]
-</text><text class="breeze-release-management-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-release-management-line-64)">│</text><text class="breeze-release-management-r4" x="24.4" y="1581.6" textLength="305" clip-path="url(#breeze-release-management-line-64)">constraints-version-check</text><text class="breeze-release-management-r1" x="353.8" y="1581.6" textLength="1085.8" clip-path="url(#breeze-release-management-line-64)">Check constraints against releas [...]
-</text><text class="breeze-release-management-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-release-management-line-65)">│</text><text class="breeze-release-management-r4" x="24.4" y="1606" textLength="305" clip-path="url(#breeze-release-management-line-65)">merge-prod-images        </text><text class="breeze-release-management-r1" x="353.8" y="1606" textLength="1085.8" clip-path="url(#breeze-release-management-line-65)">Merge pr [...]
-</text><text class="breeze-release-management-r5" x="0" y="1630.4" textLength="1464" clip-path="url(#breeze-release-management-line-66)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-release-management-line-66)">
+</text><text class="breeze-release-management-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-line-12)">│</text><text class="breeze-release-management-r4" x="24.4" y="312.8" textLength="414.8" clip-path="url(#breeze-release-management-line-12)">start-beta-process                </text><text class="breeze-release-management-r1" x="463.6" y="312.8" textLength="976" clip-path="url [...]
+</text><text class="breeze-release-management-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-line-13)">│</text><text class="breeze-release-management-r4" x="24.4" y="337.2" textLength="414.8" clip-path="url(#breeze-release-management-line-13)">start-rc-process                  </text><text class="breeze-release-management-r1" x="463.6" y="337.2" textLength="976" clip [...]
+</text><text class="breeze-release-management-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-line-14)">│</text><text class="breeze-release-management-r4" x="24.4" y="361.6" textLength="414.8" clip-path="url(#breeze-release-management-line-14)">start-release                     </text><text class="breeze-release-management-r1" x="463.6" y="361.6" textLe [...]
+</text><text class="breeze-release-management-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-line-15)">│</text><text class="breeze-release-management-r4" x="24.4" y="386" textLength="414.8" clip-path="url(#breeze-release-management-line-15)">release-prod-images               </text><text class="breeze-release-management-r1" x="463.6" y="386" textLength="976" clip-path="url(#breeze-re [...]
+</text><text class="breeze-release-management-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-line-16)">│</text><text class="breeze-release-management-r4" x="24.4" y="410.4" textLength="414.8" clip-path="url(#breeze-release-management-line-16)">generate-issue-content-core       </text><text class="breeze-release-management-r1" x="463.6" y="410.4" textLength="976" clip-path="url(#breeze-release-management-line-16)">Generat [...]
+</text><text class="breeze-release-management-r5" x="0" y="434.8" textLength="1464" clip-path="url(#breeze-release-management-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-line-17)">
+</text><text class="breeze-release-management-r5" x="0" y="459.2" textLength="24.4" clip-path="url(#breeze-release-management-line-18)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="459.2" textLength="280.6" clip-path="url(#breeze-release-management-line-18)"> Helm release commands </text><text class="breeze-release-management-r5" x="305" y="459.2" textLength="1134.6" clip-path="url(#breeze-release-management-line-18)">─────────────────────────────── [...]
+</text><text class="breeze-release-management-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-line-19)">│</text><text class="breeze-release-management-r4" x="24.4" y="483.6" textLength="500.2" clip-path="url(#breeze-release-management-line-19)">prepare-helm-chart-tarball               </text><text class="breeze-release-management-r1" x="549" y="483.6" textLength="890.6" clip-path="u [...]
+</text><text class="breeze-release-management-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-line-20)">│</text><text class="breeze-release-management-r4" x="24.4" y="508" textLength="500.2" clip-path="url(#breeze-release-management-line-20)">prepare-helm-chart-package               </text><text class="breeze-release-management-r1" x="549" y="508" textLength="890.6" clip-path="url(#br [...]
+</text><text class="breeze-release-management-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-line-21)">│</text><text class="breeze-release-management-r4" x="24.4" y="532.4" textLength="500.2" clip-path="url(#breeze-release-management-line-21)">generate-issue-content-helm-chart        </text><text class="breeze-release-management-r1" x="549" y="532.4" textLength="890.6" clip-path="url(#breeze-release-management-line- [...]
+</text><text class="breeze-release-management-r5" x="0" y="556.8" textLength="1464" clip-path="url(#breeze-release-management-line-22)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-line-22)">
+</text><text class="breeze-release-management-r5" x="0" y="581.2" textLength="24.4" clip-path="url(#breeze-release-management-line-23)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="581.2" textLength="341.6" clip-path="url(#breeze-release-management-line-23)"> Providers release commands </text><text class="breeze-release-management-r5" x="366" y="581.2" textLength="1073.6" clip-path="url(#breeze-release-management-line-23)">────────────────────────── [...]
+</text><text class="breeze-release-management-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-line-24)">│</text><text class="breeze-release-management-r4" x="24.4" y="605.6" textLength="390.4" clip-path="url(#breeze-release-management-line-24)">prepare-provider-documentation  </text><text class="breeze-release-management-r1" x="439.2" y="605.6" textLength="1000.4" clip-path="url(#breeze-release-management-line-24)">Prepare CHANGELOG, RE [...]
+</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="390.4" clip-path="url(#breeze-release-management-line-25)">classify-provider-changes       </text><text class="breeze-release-management-r1" x="439.2" y="630" textLength="1000.4" clip-path="url(#breeze-release-management-line-25)">Classify [...]
+</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-r1" x="439.2" y="654.4" textLength="1000.4" clip-path="url(#breeze-release-management-line-26)">rules, flagging ambiguous commits as 'needs_llm' for an agent/skill to assess.    </text><text class="breeze-release-management-r5" x [...]
+</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-r1" x="439.2" y="678.8" textLength="707.6" clip-path="url(#breeze-release-management-line-27)">Outputs JSON - a deterministic alternative to the random '</text><text class="breeze-release-management-r4" x="1146.8" y="678.8" textLength="207.4" clip-path="url(# [...]
+</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-r1" x="439.2" y="703.2" textLength="1000.4" clip-path="url(#breeze-release-management-line-28)">used purely for discovery.                             [...]
+</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="390.4" clip-path="url(#breeze-release-management-line-29)">update-providers-next-version   </text><text class="breeze-release-management-r1" x="439.2" y="727.6" textLength="1000.4" clip-path="url(#breeze-release-management-line-29)">Update provider  [...]
+</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="390.4" clip-path="url(#breeze-release-management-line-30)">prepare-provider-distributions  </text><text class="breeze-release-management-r1" x="439.2" y="752" textLength="1000.4" clip-path="url(#breeze-release-management-line-30)">Prepare sdist/whl distribut [...]
+</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-r1" x="439.2" y="776.4" textLength="268.4" clip-path="url(#breeze-release-management-line-31)">wiped with `git clean </text><text class="breeze-release-management-r6" x="707.6" y="776.4" textLength="48.8" clip-path="url(#breeze-release-management-line-31)">-fdx</text><text class="breeze-r [...]
+</text><text class="breeze-release-management-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-line-32)">│</text><text class="breeze-release-management-r1" x="439.2" y="800.8" textLength="1000.4" clip-path="url(#breeze-release-management-line-32)">keep in-tree generated files out of the artifact. See dev/breeze                 &# [...]
+</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-r1" x="439.2" y="825.2" textLength="1000.4" clip-path="url(#breeze-release-management-line-33)">release-management docs.                               [...]
+</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="390.4" clip-path="url(#breeze-release-management-line-34)">install-provider-distributions  </text><text class="breeze-release-management-r1" x="439.2" y="849.6" textLength="1000.4" clip-path="url(#breeze-release-management-line-34)">Installs provider dis [...]
+</text><text class="breeze-release-management-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-release-management-line-35)">│</text><text class="breeze-release-management-r4" x="24.4" y="874" textLength="390.4" clip-path="url(#breeze-release-management-line-35)">verify-provider-distributions   </text><text class="breeze-release-management-r1" x="439.2" y="874" textLength="1000.4" clip-path="url(#breeze-release-management-line-35)">Verifies if all p [...]
+</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="390.4" clip-path="url(#breeze-release-management-line-36)">generate-providers-metadata     </text><text class="breeze-release-management-r1" x="439.2" y="898.4" textLength="1000.4" clip-path="url(#breeze-release-management-line-36)">Generates m [...]
+</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="390.4" clip-path="url(#breeze-release-management-line-37)">generate-issue-content-providers</text><text class="breeze-release-management-r1" x="439.2" y="922.8" textLength="1000.4" clip-path="url(#breeze-release-management-line-37)">Generates content for issu [...]
+</text><text class="breeze-release-management-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-line-38)">│</text><text class="breeze-release-management-r4" x="24.4" y="947.2" textLength="390.4" clip-path="url(#breeze-release-management-line-38)">clean-old-provider-artifacts    </text><text class="breeze-release-management-r1" x="439.2" y="947.2" textLength="1000.4" clip-path="url(#breeze-release-management-line-38)">Cleans the  [...]
+</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="390.4" clip-path="url(#breeze-release-management-line-39)">tag-providers                   </text><text class="breeze-release-management-r1" x="439.2" y="971.6" textLength="1000.4 [...]
+</text><text class="breeze-release-management-r5" x="0" y="996" textLength="1464" clip-path="url(#breeze-release-management-line-40)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-release-management-line-40)">
+</text><text class="breeze-release-management-r5" x="0" y="1020.4" textLength="24.4" clip-path="url(#breeze-release-management-line-41)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1020.4" textLength="427" clip-path="url(#breeze-release-management-line-41)"> Airflow Task SDK release commands </text><text class="breeze-release-management-r5" x="451.4" y="1020.4" textLength="988.2" clip-path="url(#breeze-release-management-line-41)">─────── [...]
+</text><text class="breeze-release-management-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-line-42)">│</text><text class="breeze-release-management-r4" x="24.4" y="1044.8" textLength="512.4" clip-path="url(#breeze-release-management-line-42)">prepare-task-sdk-distributions            </text><text class="breeze-release-management-r1" x="561.2" y="1044.8" textLength="878.4" clip-path="url(#breez [...]
+</text><text class="breeze-release-management-r5" x="0" y="1069.2" textLength="1464" clip-path="url(#breeze-release-management-line-43)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-line-43)">
+</text><text class="breeze-release-management-r5" x="0" y="1093.6" textLength="24.4" clip-path="url(#breeze-release-management-line-44)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1093.6" textLength="353.8" clip-path="url(#breeze-release-management-line-44)"> airflowctl release commands </text><text class="breeze-release-management-r5" x="378.2" y="1093.6" textLength="1061.4" clip-path="url(#breeze-release-management-line-44)">──────────────────── [...]
+</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="414.8" clip-path="url(#breeze-release-management-line-45)">prepare-airflow-ctl-distributions </text><text class="breeze-release-management-r1" x="463.6" y="1118" textLength="976" clip-path="url(#breeze-release-management-line-45)">Prepare sdist/whl distribution [...]
+</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="414.8" clip-path="url(#breeze-release-management-line-46)">generate-issue-content-airflow-ctl</text><text class="breeze-release-management-r1" x="463.6" y="1142.4" textLength="976" clip-path="url(#breeze-release-management-line-46)">Generates content for is [...]
+</text><text class="breeze-release-management-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-line-47)">│</text><text class="breeze-release-management-r4" x="24.4" y="1166.8" textLength="414.8" clip-path="url(#breeze-release-management-line-47)">generate-airflowctl-changelog     </text><text class="breeze-release-management-r1" x="463.6" y="1166.8" textLength="976" clip-path="url(#breeze-release-management-line-47)">Generates  [...]
+</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-r1" x="463.6" y="1191.2" textLength="976" clip-path="url(#breeze-release-management-line-48)">RELEASE_NOTES.rst.                                 [...]
+</text><text class="breeze-release-management-r5" x="0" y="1215.6" textLength="1464" clip-path="url(#breeze-release-management-line-49)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-line-49)">
+</text><text class="breeze-release-management-r5" x="0" y="1240" textLength="24.4" clip-path="url(#breeze-release-management-line-50)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1240" textLength="463.6" clip-path="url(#breeze-release-management-line-50)"> Apache Airflow Mypy release commands </text><text class="breeze-release-management-r5" x="488" y="1240" textLength="951.6" clip-path="url(#breeze-release-management-line-50)">────────── [...]
+</text><text class="breeze-release-management-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-line-51)">│</text><text class="breeze-release-management-r4" x="24.4" y="1264.4" textLength="451.4" clip-path="url(#breeze-release-management-line-51)">prepare-mypy-distributions           </text><text class="breeze-release-management-r1" x="500.2" y="1264.4" textLength="939.4" clip-path="url(#breeze-release- [...]
+</text><text class="breeze-release-management-r5" x="0" y="1288.8" textLength="1464" clip-path="url(#breeze-release-management-line-52)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-release-management-line-52)">
+</text><text class="breeze-release-management-r5" x="0" y="1313.2" textLength="24.4" clip-path="url(#breeze-release-management-line-53)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1313.2" textLength="292.8" clip-path="url(#breeze-release-management-line-53)"> Other release commands </text><text class="breeze-release-management-r5" x="317.2" y="1313.2" textLength="1122.4" clip-path="url(#breeze-release-management-line-53)">───────────────────────── [...]
+</text><text class="breeze-release-management-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-line-54)">│</text><text class="breeze-release-management-r4" x="24.4" y="1337.6" textLength="292.8" clip-path="url(#breeze-release-management-line-54)">add-back-references     </text><text class="breeze-release-management-r1" x="341.6" y="1337.6" textLength="1098" clip-path="url(#breeze-release-management-line-54)">Command to ad [...]
+</text><text class="breeze-release-management-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-line-55)">│</text><text class="breeze-release-management-r4" x="24.4" y="1362" textLength="292.8" clip-path="url(#breeze-release-management-line-55)">prepare-python-client   </text><text class="breeze-release-management-r1" x="341.6" y="1362" textLength="1098" clip-path="url(#breeze-release-management-line-55)">Prepares python client p [...]
+</text><text class="breeze-release-management-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-line-56)">│</text><text class="breeze-release-management-r4" x="24.4" y="1386.4" textLength="292.8" clip-path="url(#breeze-release-management-line-56)">publish-docs            </text><text class="breeze-release-management-r1" x="341.6" y="1386.4" textLength="1098" clip-path="url(#breeze-release-managemen [...]
+</text><text class="breeze-release-management-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-line-57)">│</text><text class="breeze-release-management-r4" x="24.4" y="1410.8" textLength="292.8" clip-path="url(#breeze-release-management-line-57)">generate-constraints    </text><text class="breeze-release-management-r1" x="341.6" y="1410.8" textLength="1098" clip-path="url(#breeze-release-management-line-57)">Generates pinned c [...]
+</text><text class="breeze-release-management-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-line-58)">│</text><text class="breeze-release-management-r4" x="24.4" y="1435.2" textLength="292.8" clip-path="url(#breeze-release-management-line-58)">update-constraints      </text><text class="breeze-release-management-r1" x="341.6" y="1435.2" textLength="1098" clip-path="url(#breeze-release-management-line-58)">Update releas [...]
+</text><text class="breeze-release-management-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-line-59)">│</text><text class="breeze-release-management-r4" x="24.4" y="1459.6" textLength="292.8" clip-path="url(#breeze-release-management-line-59)">publish-docs-to-s3      </text><text class="breeze-release-management-r1" x="341.6" y="1459.6" textLength="1098" clip-path="url(#breeze-release-management-line-59)">Publishes doc [...]
+</text><text class="breeze-release-management-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-line-60)">│</text><text class="breeze-release-management-r4" x="24.4" y="1484" textLength="292.8" clip-path="url(#breeze-release-management-line-60)">publish-schemas-to-s3   </text><text class="breeze-release-management-r1" x="341.6" y="1484" textLength="1098" clip-path="url(#breeze-release-management-line-60)">Publishes generated JSON  [...]
+</text><text class="breeze-release-management-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-release-management-line-61)">│</text><text class="breeze-release-management-r4" x="24.4" y="1508.4" textLength="292.8" clip-path="url(#breeze-release-management-line-61)">verify-rc-by-pmc        </text><text class="breeze-release-management-r1" x="341.6" y="1508.4" textLength="1098" clip-path="url(#breeze-release-management-line-61)">[EXPERIM [...]
+</text><text class="breeze-release-management-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-release-management-line-62)">│</text><text class="breeze-release-management-r4" x="24.4" y="1532.8" textLength="292.8" clip-path="url(#breeze-release-management-line-62)">check-release-files     </text><text class="breeze-release-management-r1" x="341.6" y="1532.8" textLength="1098" clip-path="url(#breeze-release-management-line-62)">Verify that a [...]
+</text><text class="breeze-release-management-r5" x="0" y="1557.2" textLength="1464" clip-path="url(#breeze-release-management-line-63)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-release-management-line-63)">
+</text><text class="breeze-release-management-r5" x="0" y="1581.6" textLength="24.4" clip-path="url(#breeze-release-management-line-64)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1581.6" textLength="122" clip-path="url(#breeze-release-management-line-64)"> Commands </text><text class="breeze-release-management-r5" x="146.4" y="1581.6" textLength="1293.2" clip-path="url(#breeze-release-management-line-64)">─────────────────────────────────────────────────── [...]
+</text><text class="breeze-release-management-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-release-management-line-65)">│</text><text class="breeze-release-management-r4" x="24.4" y="1606" textLength="305" clip-path="url(#breeze-release-management-line-65)">constraints-version-check</text><text class="breeze-release-management-r1" x="353.8" y="1606" textLength="1085.8" clip-path="url(#breeze-release-management-line-65)">Check constraints against released [...]
+</text><text class="breeze-release-management-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-release-management-line-66)">│</text><text class="breeze-release-management-r4" x="24.4" y="1630.4" textLength="305" clip-path="url(#breeze-release-management-line-66)">merge-prod-images        </text><text class="breeze-release-management-r1" x="353.8" y="1630.4" textLength="1085.8" clip-path="url(#breeze-release-management-line-66)">Merge&# [...]
+</text><text class="breeze-release-management-r5" x="0" y="1654.8" textLength="1464" clip-path="url(#breeze-release-management-line-67)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-release-management-line-67)">
</text>
</g>
</g>
diff --git a/dev/breeze/doc/images/output_release-management.txt b/dev/breeze/doc/images/output_release-management.txt
index bed6316d48f..1a2955706e0 100644
--- a/dev/breeze/doc/images/output_release-management.txt
+++ b/dev/breeze/doc/images/output_release-management.txt
@@ -1 +1 @@
-016eb82c476bc36ac2bcb754d3e87919
+186f43f8d9e9e522daa2e16d537a46d3
diff --git a/dev/breeze/doc/images/output_release-management_start-beta-process.svg b/dev/breeze/doc/images/output_release-management_start-beta-process.svg
new file mode 100644
index 00000000000..769f330a19c
--- /dev/null
+++ b/dev/breeze/doc/images/output_release-management_start-beta-process.svg
@@ -0,0 +1,138 @@
+<svg class="rich-terminal" viewBox="0 0 1482 513.5999999999999" xmlns="http://www.w3.org/2000/svg">
+ <!-- Generated with Rich https://www.textualize.io -->
+ <style>
+
+ @font-face {
+ font-family: "Fira Code";
+ src: local("FiraCode-Regular"),
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
+ font-style: normal;
+ font-weight: 400;
+ }
+ @font-face {
+ font-family: "Fira Code";
+ src: local("FiraCode-Bold"),
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
+ font-style: bold;
+ font-weight: 700;
+ }
+
+ .breeze-release-management-start-beta-process-matrix {
+ font-family: Fira Code, monospace;
+ font-size: 20px;
+ line-height: 24.4px;
+ font-variant-east-asian: full-width;
+ }
+
+ .breeze-release-management-start-beta-process-title {
+ font-size: 18px;
+ font-weight: bold;
+ font-family: arial;
+ }
+
+ .breeze-release-management-start-beta-process-r1 { fill: #c5c8c6 }
+.breeze-release-management-start-beta-process-r2 { fill: #d0b344 }
+.breeze-release-management-start-beta-process-r3 { fill: #c5c8c6;font-weight: bold }
+.breeze-release-management-start-beta-process-r4 { fill: #68a0b3;font-weight: bold }
+.breeze-release-management-start-beta-process-r5 { fill: #868887 }
+.breeze-release-management-start-beta-process-r6 { fill: #cc555a }
+.breeze-release-management-start-beta-process-r7 { fill: #8a4346 }
+.breeze-release-management-start-beta-process-r8 { fill: #8d7b39 }
+.breeze-release-management-start-beta-process-r9 { fill: #98a84b;font-weight: bold }
+ </style>
+
+ <defs>
+ <clipPath id="breeze-release-management-start-beta-process-clip-terminal">
+ <rect x="0" y="0" width="1463.0" height="462.59999999999997" />
+ </clipPath>
+ <clipPath id="breeze-release-management-start-beta-process-line-0">
+ <rect x="0" y="1.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-1">
+ <rect x="0" y="25.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-2">
+ <rect x="0" y="50.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-3">
+ <rect x="0" y="74.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-4">
+ <rect x="0" y="99.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-5">
+ <rect x="0" y="123.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-6">
+ <rect x="0" y="147.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-7">
+ <rect x="0" y="172.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-8">
+ <rect x="0" y="196.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-9">
+ <rect x="0" y="221.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-10">
+ <rect x="0" y="245.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-11">
+ <rect x="0" y="269.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-12">
+ <rect x="0" y="294.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-13">
+ <rect x="0" y="318.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-14">
+ <rect x="0" y="343.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-15">
+ <rect x="0" y="367.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-16">
+ <rect x="0" y="391.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-17">
+ <rect x="0" y="416.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="511.6" rx="8"/><text class="breeze-release-management-start-beta-process-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: release-management start-beta-process</text>
+ <g transform="translate(26,22)">
+ <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
+ <circle cx="22" cy="0" r="7" fill="#febc2e"/>
+ <circle cx="44" cy="0" r="7" fill="#28c840"/>
+ </g>
+
+ <g transform="translate(9, 41)" clip-path="url(#breeze-release-management-start-beta-process-clip-terminal)">
+
+ <g class="breeze-release-management-start-beta-process-matrix">
+ <text class="breeze-release-management-start-beta-process-r1" x="1464" y="20" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-0)">
+</text><text class="breeze-release-management-start-beta-process-r2" x="12.2" y="44.4" textLength="73.2" clip-path="url(#breeze-release-management-start-beta-process-line-1)">Usage:</text><text class="breeze-release-management-start-beta-process-r3" x="97.6" y="44.4" textLength="536.8" clip-path="url(#breeze-release-management-start-beta-process-line-1)">breeze release-management start-beta-process</text><text class="breeze-release-management-start-beta-process-r1" x="646.6" y= [...]
+</text><text class="breeze-release-management-start-beta-process-r1" x="1464" y="68.8" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-2)">
+</text><text class="breeze-release-management-start-beta-process-r1" x="12.2" y="93.2" textLength="671" clip-path="url(#breeze-release-management-start-beta-process-line-3)">Start the process for releasing a new beta pre-release.</text><text class="breeze-release-management-start-beta-process-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-3)">
+</text><text class="breeze-release-management-start-beta-process-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-4)">
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-release-management-start-beta-process-line-5)">╭─</text><text class="breeze-release-management-start-beta-process-r5" x="24.4" y="142" textLength="317.2" clip-path="url(#breeze-release-management-start-beta-process-line-5)"> Start beta process flags </text><text class="breeze-release-management-start-beta-process-r5" x="341.6" y="142" textLe [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-6)">│</text><text class="breeze-release-management-start-beta-process-r6" x="24.4" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-6)">*</text><text class="breeze-release-management-start-beta-process-r4" x="61" y="166.4" textLength="219.6" clip-path="url(#breeze-release-manag [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-7)">│</text><text class="breeze-release-management-start-beta-process-r6" x="24.4" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-7)">*</text><text class="breeze-release-management-start-beta-process-r4" x="61" y="190.8" textLength="219.6" clip-path="url(#breeze-release-manag [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-8)">│</text><text class="breeze-release-management-start-beta-process-r4" x="61" y="215.2" textLength="219.6" clip-path="url(#breeze-release-management-start-beta-process-line-8)">--remote-name     </text><text class="breeze-release-management-start-beta-process-r1" x="305" y="215.2" textLength="1 [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-9)">│</text><text class="breeze-release-management-start-beta-process-r1" x="305" y="239.6" textLength="1134.6" clip-path="url(#breeze-release-management-start-beta-process-line-9)">(default: 'upstream' per the standard remote naming convention — see    [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-10)">│</text><text class="breeze-release-management-start-beta-process-r1" x="305" y="264" textLength="1134.6" clip-path="url(#breeze-release-management-start-beta-process-line-10)">contributing-docs/10_working_with_git.rst). Override if your release clone uses a different   [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-11)">│</text><text class="breeze-release-management-start-beta-process-r1" x="305" y="288.4" textLength="829.6" clip-path="url(#breeze-release-management-start-beta-process-line-11)">name (for example 'origin' when you clone apache/airflow directly). </text><text clas [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="312.8" textLength="1464" clip-path="url(#breeze-release-management-start-beta-process-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-start-beta-process-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-12)">
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="337.2" textLength="24.4" clip-path="url(#breeze-release-management-start-beta-process-line-13)">╭─</text><text class="breeze-release-management-start-beta-process-r5" x="24.4" y="337.2" textLength="195.2" clip-path="url(#breeze-release-management-start-beta-process-line-13)"> Common options </text><text class="breeze-release-management-start-beta-process-r5" x="219.6" y="337.2" textLength="1220" [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-14)">│</text><text class="breeze-release-management-start-beta-process-r4" x="24.4" y="361.6" textLength="109.8" clip-path="url(#breeze-release-management-start-beta-process-line-14)">--answer </text><text class="breeze-release-management-start-beta-process-r9" x="158.6" y="361.6" textLength="24.4" clip-path="url(#br [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-15)">│</text><text class="breeze-release-management-start-beta-process-r4" x="24.4" y="386" textLength="109.8" clip-path="url(#breeze-release-management-start-beta-process-line-15)">--dry-run</text><text class="breeze-release-management-start-beta-process-r9" x="158.6" y="386" textLength="24.4" clip-path="url(#breeze-releas [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-16)">│</text><text class="breeze-release-management-start-beta-process-r4" x="24.4" y="410.4" textLength="109.8" clip-path="url(#breeze-release-management-start-beta-process-line-16)">--verbose</text><text class="breeze-release-management-start-beta-process-r9" x="158.6" y="410.4" textLength="24.4" clip-path="url(#breeze- [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-17)">│</text><text class="breeze-release-management-start-beta-process-r4" x="24.4" y="434.8" textLength="109.8" clip-path="url(#breeze-release-management-start-beta-process-line-17)">--help   </text><text class="breeze-release-management-start-beta-process-r9" x="158.6" y="434.8" textLength="24.4" clip-pat [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="459.2" textLength="1464" clip-path="url(#breeze-release-management-start-beta-process-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-start-beta-process-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-18)">
+</text>
+ </g>
+ </g>
+</svg>
diff --git a/dev/breeze/doc/images/output_release-management_start-beta-process.txt b/dev/breeze/doc/images/output_release-management_start-beta-process.txt
new file mode 100644
index 00000000000..a7adfd4275d
--- /dev/null
+++ b/dev/breeze/doc/images/output_release-management_start-beta-process.txt
@@ -0,0 +1 @@
+2e2b12e37332f5104bcb33c01a092d7a
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 a3da27c3903..ed6be314547 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
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1270.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1294.3999999999999" xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@@ -43,7 +43,7 @@
<defs>
<clipPath id="breeze-setup-check-all-params-in-groups-clip-terminal">
- <rect x="0" y="0" width="1463.0" height="1219.0" />
+ <rect x="0" y="0" width="1463.0" height="1243.3999999999999" />
</clipPath>
<clipPath id="breeze-setup-check-all-params-in-groups-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -192,9 +192,12 @@
<clipPath id="breeze-setup-check-all-params-in-groups-line-48">
<rect x="0" y="1172.7" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="breeze-setup-check-all-params-in-groups-line-49">
+ <rect x="0" y="1197.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="1268" rx="8"/><text class="breeze-setup-check-all-params-in-groups-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: setup check-all-params-in-groups</text>
+ <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-setup-check-all-params-in-groups-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: setup check-all-params-in-groups</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -235,25 +238,26 @@
</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="158.6" y="703.2" textLength="1085.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-28)">release-management:prepare-tarball | release-management:prepare-task-sdk-distributions | </text><text class="breeze-setup-check-all-param [...]
</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="158.6" y="727.6" textLength="902.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-29)">release-management:publish-docs | release-management:publish-docs-to-s3 | </text><text class="breeze-setup-check-all-params-in-groups-r5" [...]
</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="158.6" y="752" textLength="1024.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-30)">release-management:publish-schemas-to-s3 | release-management:release-prod-images | </text><text class="breeze-setup-check-all-params-in-grou [...]
-</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="158.6" y="776.4" textLength="1281" clip-path="url(#breeze-setup-check-all-params-in-groups-line-31)">release-management:start-rc-process | release-management:start-release | release-management:tag-providers</text><text class="breeze-setup-c [...]
-</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="158.6" y="800.8" textLength="1134.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-32)">| release-management:update-constraints | release-management:update-providers-next-version | </text><text class="breeze-setup-check- [...]
-</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="158.6" y="825.2" textLength="1244.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-33)">release-management:verify-provider-distributions | release-management:verify-rc-by-pmc | run | sbom | </text><text cl [...]
-</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="158.6" y="849.6" textLength="1281" clip-path="url(#breeze-setup-check-all-params-in-groups-line-34)">sbom:build-all-airflow-images | sbom:export-dependency-information | sbom:generate-providers-requirements</text><text class="breeze-setup-c [...]
-</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="158.6" y="874" textLength="1183.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-35)">| sbom:update-sbom-information | setup | setup:autocomplete | setup:check-all-params-in-groups | </text><text class= [...]
-</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="158.6" y="898.4" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-36)">setup:config | setup:regenerate-command-images | setup:self-upgrade | setup:synchronize-local-mounts | </text><text c [...]
-</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="158.6" y="922.8" textLength="1098" clip-path="url(#breeze-setup-check-all-params-in-groups-line-37)">setup:version | shell | start-airflow | testing | testing:airflow-ctl-integration-tests | </text><text class= [...]
-</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="158.6" y="947.2" textLength="1085.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-38)">testing:airflow-ctl-tests | testing:airflow-e2e-tests | testing:core-integration-tests | </text><text class="breeze-setup-check [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" 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-r6" x="158.6" y="971.6" textLength="890.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-39)">testing:core-tests | testing:docker-compose-tests | testing:helm-tests | </text><text class="breeze-setup-check-all-params-in-gr [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-40)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="996" textLength="1195.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-40)">testing:providers-integration-tests | testing:providers-tests | testing:python-api-client-tests | </text><text class="breeze-setup- [...]
-</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-r6" x="158.6" y="1020.4" textLength="1281" clip-path="url(#breeze-setup-check-all-params-in-groups-line-41)">testing:system-tests | testing:task-sdk-integration-tests | testing:task-sdk-tests | testing:ui-e2e-tests</text><text class="br [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-42)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="1044.8" textLength="1061.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-42)">| ui | ui:check-translation-completeness | ui:compile-assets | verify | workflow-run | </text><text [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-43)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="1069.2" textLength="1183.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-43)">workflow-run:publish-docs | workflow-run:release-constraints | workflow-run:sync-staging-to-main)</text><text class="breeze-setup-check [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1093.6" textLength="1464" clip-path="url(#breeze-setup-check-all-params-in-groups-line-44)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-44)">
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1118" textLength="24.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-45)">╭─</text><text class="breeze-setup-check-all-params-in-groups-r5" x="24.4" y="1118" textLength="195.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-45)"> Common options </text><text class="breeze-setup-check-all-params-in-groups-r5" x="219.6" y="1118" textLength="1220" clip-path="url(#breeze-setup [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-46)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="1142.4" textLength="109.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-46)">--verbose</text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="1142.4" textLength="24.4" clip-path="url(#breeze-setup-check-all-params [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-47)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="1166.8" textLength="109.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-47)">--dry-run</text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="1166.8" textLength="24.4" clip-path="url(#breeze-setup-check-all-params [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-48)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="1191.2" textLength="109.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-48)">--help   </text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="1191.2" textLength="24.4" clip-path="url(#breeze-setup-c [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1215.6" textLength="1464" clip-path="url(#breeze-setup-check-all-params-in-groups-line-49)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-49)">
+</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="158.6" y="776.4" textLength="951.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-31)">release-management:start-beta-process | release-management:start-rc-process | </text><text class="breeze-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="158.6" y="800.8" textLength="854" clip-path="url(#breeze-setup-check-all-params-in-groups-line-32)">release-management:start-release | release-management:tag-providers | </text><text class="breeze-setup-check-all-params-in-groups-r5" x="145 [...]
+</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="158.6" y="825.2" textLength="1110.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-33)">release-management:update-constraints | release-management:update-providers-next-version | </text><text class="breeze-setup-check-all-par [...]
+</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="158.6" y="849.6" textLength="1244.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-34)">release-management:verify-provider-distributions | release-management:verify-rc-by-pmc | run | sbom | </text><text cl [...]
+</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="158.6" y="874" textLength="1281" clip-path="url(#breeze-setup-check-all-params-in-groups-line-35)">sbom:build-all-airflow-images | sbom:export-dependency-information | sbom:generate-providers-requirements</text><text class="breeze-setup-check [...]
+</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="158.6" y="898.4" textLength="1183.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-36)">| sbom:update-sbom-information | setup | setup:autocomplete | setup:check-all-params-in-groups | </text><text cl [...]
+</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="158.6" y="922.8" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-37)">setup:config | setup:regenerate-command-images | setup:self-upgrade | setup:synchronize-local-mounts | </text><text c [...]
+</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="158.6" y="947.2" textLength="1098" clip-path="url(#breeze-setup-check-all-params-in-groups-line-38)">setup:version | shell | start-airflow | testing | testing:airflow-ctl-integration-tests | </text><text class= [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" 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-r6" x="158.6" y="971.6" textLength="1085.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-39)">testing:airflow-ctl-tests | testing:airflow-e2e-tests | testing:core-integration-tests | </text><text class="breeze-setup-check [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-40)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="996" textLength="890.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-40)">testing:core-tests | testing:docker-compose-tests | testing:helm-tests | </text><text class="breeze-setup-check-all-params-in-groups [...]
+</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-r6" x="158.6" y="1020.4" textLength="1195.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-41)">testing:providers-integration-tests | testing:providers-tests | testing:python-api-client-tests | </text><text class="breeze- [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-42)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="1044.8" textLength="1281" clip-path="url(#breeze-setup-check-all-params-in-groups-line-42)">testing:system-tests | testing:task-sdk-integration-tests | testing:task-sdk-tests | testing:ui-e2e-tests</text><text class="br [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-43)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="1069.2" textLength="1061.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-43)">| ui | ui:check-translation-completeness | ui:compile-assets | verify | workflow-run | </text><text [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-44)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="1093.6" textLength="1183.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-44)">workflow-run:publish-docs | workflow-run:release-constraints | workflow-run:sync-staging-to-main)</text><text class="breeze-setup-check [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1118" textLength="1464" clip-path="url(#breeze-setup-check-all-params-in-groups-line-45)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-45)">
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1142.4" textLength="24.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-46)">╭─</text><text class="breeze-setup-check-all-params-in-groups-r5" x="24.4" y="1142.4" textLength="195.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-46)"> Common options </text><text class="breeze-setup-check-all-params-in-groups-r5" x="219.6" y="1142.4" textLength="1220" clip-path="url(#breeze [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-47)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="1166.8" textLength="109.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-47)">--verbose</text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="1166.8" textLength="24.4" clip-path="url(#breeze-setup-check-all-params [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-48)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="1191.2" textLength="109.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-48)">--dry-run</text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="1191.2" textLength="24.4" clip-path="url(#breeze-setup-check-all-params [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-49)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="1215.6" textLength="109.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-49)">--help   </text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="1215.6" textLength="24.4" clip-path="url(#breeze-setup-c [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1240" textLength="1464" clip-path="url(#breeze-setup-check-all-params-in-groups-line-50)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-50)">
</text>
</g>
</g>
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 e906db0e840..9d053954e72 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 @@
-071569892714c5561156e19cdaa04041
+cd743de2ac920faaec5a33b506ede093
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 8d98810ae3a..a1ef0efe0d8 100644
--- a/dev/breeze/doc/images/output_setup_regenerate-command-images.svg
+++ b/dev/breeze/doc/images/output_setup_regenerate-command-images.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1392.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1416.3999999999999" xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@@ -43,7 +43,7 @@
<defs>
<clipPath id="breeze-setup-regenerate-command-images-clip-terminal">
- <rect x="0" y="0" width="1463.0" height="1341.0" />
+ <rect x="0" y="0" width="1463.0" height="1365.3999999999999" />
</clipPath>
<clipPath id="breeze-setup-regenerate-command-images-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -207,9 +207,12 @@
<clipPath id="breeze-setup-regenerate-command-images-line-53">
<rect x="0" y="1294.7" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="breeze-setup-regenerate-command-images-line-54">
+ <rect x="0" y="1319.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="1390" rx="8"/><text class="breeze-setup-regenerate-command-images-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: setup regenerate-command-images</text>
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1414.4" rx="8"/><text class="breeze-setup-regenerate-command-images-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: setup regenerate-command-images</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -251,29 +254,30 @@
</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="195.2" y="727.6" textLength="1000.4" clip-path="url(#breeze-setup-regenerate-command-images-line-29)">| release-management:prepare-python-client | release-management:prepare-tarball | </text><text class="breeze-setup-regenerate-command-im [...]
</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="195.2" y="752" textLength="1049.2" clip-path="url(#breeze-setup-regenerate-command-images-line-30)">release-management:prepare-task-sdk-distributions | release-management:publish-docs | </text><text class="breeze-setup-regenerate-command-images- [...]
</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="195.2" y="776.4" textLength="1012.6" clip-path="url(#breeze-setup-regenerate-command-images-line-31)">release-management:publish-docs-to-s3 | release-management:publish-schemas-to-s3 | </text><text class="breeze-setup-regenerate-command-images [...]
-</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="195.2" y="800.8" textLength="963.8" clip-path="url(#breeze-setup-regenerate-command-images-line-32)">release-management:release-prod-images | release-management:start-rc-process | </text><text class="breeze-setup-regenerate-command-images-r5" [...]
-</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="195.2" y="825.2" textLength="854" clip-path="url(#breeze-setup-regenerate-command-images-line-33)">release-management:start-release | release-management:tag-providers | </text><text class="breeze-setup-regenerate-command-images-r5" x="1451.8" [...]
-</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="195.2" y="849.6" textLength="1110.2" clip-path="url(#breeze-setup-regenerate-command-images-line-34)">release-management:update-constraints | release-management:update-providers-next-version | </text><text class="breeze-setup-regenerate-comman [...]
-</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="195.2" y="874" textLength="1244.4" clip-path="url(#breeze-setup-regenerate-command-images-line-35)">release-management:verify-provider-distributions | release-management:verify-rc-by-pmc | run | sbom | </text><text class="bre [...]
-</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="195.2" y="898.4" textLength="841.8" clip-path="url(#breeze-setup-regenerate-command-images-line-36)">sbom:build-all-airflow-images | sbom:export-dependency-information | </text><text class="breeze-setup-regenerate-command-images-r5" x="1451.8" [...]
-</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="195.2" y="922.8" textLength="1207.8" clip-path="url(#breeze-setup-regenerate-command-images-line-37)">sbom:generate-providers-requirements | sbom:update-sbom-information | setup | setup:autocomplete | </text><text class="br [...]
-</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="195.2" y="947.2" textLength="1244.4" clip-path="url(#breeze-setup-regenerate-command-images-line-38)">setup:check-all-params-in-groups | setup:config | setup:regenerate-command-images | setup:self-upgrade</text><text class="breeze-se [...]
-</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="195.2" y="971.6" textLength="1037" clip-path="url(#breeze-setup-regenerate-command-images-line-39)">| setup:synchronize-local-mounts | setup:version | shell | start-airflow | testing | </text><text class="bre [...]
-</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="195.2" y="996" textLength="1171.2" clip-path="url(#breeze-setup-regenerate-command-images-line-40)">testing:airflow-ctl-integration-tests | testing:airflow-ctl-tests | testing:airflow-e2e-tests | </text><text class="breeze-setup-regene [...]
-</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="195.2" y="1020.4" textLength="1037" clip-path="url(#breeze-setup-regenerate-command-images-line-41)">testing:core-integration-tests | testing:core-tests | testing:docker-compose-tests | </text><text class="breeze-setup-regenerate-co [...]
-</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-r6" x="195.2" y="1044.8" textLength="1037" clip-path="url(#breeze-setup-regenerate-command-images-line-42)">testing:helm-tests | testing:providers-integration-tests | testing:providers-tests | </text><text class="breeze-setup-regenerate-co [...]
-</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-r6" x="195.2" y="1069.2" textLength="1146.8" clip-path="url(#breeze-setup-regenerate-command-images-line-43)">testing:python-api-client-tests | testing:system-tests | testing:task-sdk-integration-tests | </text><text class="breeze-setup-re [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-44)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1093.6" textLength="1085.8" clip-path="url(#breeze-setup-regenerate-command-images-line-44)">testing:task-sdk-tests | testing:ui-e2e-tests | ui | ui:check-translation-completeness | </text><text class="breeze-set [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-45)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1118" textLength="878.4" clip-path="url(#breeze-setup-regenerate-command-images-line-45)">ui:compile-assets | verify | workflow-run | workflow-run:publish-docs | </text><text class="breeze-setup-regenerate-command- [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-46)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1142.4" textLength="841.8" clip-path="url(#breeze-setup-regenerate-command-images-line-46)">workflow-run:release-constraints | workflow-run:sync-staging-to-main)</text><text class="breeze-setup-regenerate-command-images-r5" x="1451.8" y="1142 [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-47)">│</text><text class="breeze-setup-regenerate-command-images-r4" x="24.4" y="1166.8" textLength="146.4" clip-path="url(#breeze-setup-regenerate-command-images-line-47)">--check-only</text><text class="breeze-setup-regenerate-command-images-r1" x="195.2" y="1166.8" textLength="1244.4" clip-path="url(#breeze-setup-regenerate-comma [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-48)">│</text><text class="breeze-setup-regenerate-command-images-r1" x="195.2" y="1191.2" textLength="170.8" clip-path="url(#breeze-setup-regenerate-command-images-line-48)">together with </text><text class="breeze-setup-regenerate-command-images-r4" x="366" y="1191.2" textLength="109.8" clip-path="url(#breeze-setup-regene [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1215.6" textLength="1464" clip-path="url(#breeze-setup-regenerate-command-images-line-49)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-regenerate-command-images-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-49)">
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1240" textLength="24.4" clip-path="url(#breeze-setup-regenerate-command-images-line-50)">╭─</text><text class="breeze-setup-regenerate-command-images-r5" x="24.4" y="1240" textLength="195.2" clip-path="url(#breeze-setup-regenerate-command-images-line-50)"> Common options </text><text class="breeze-setup-regenerate-command-images-r5" x="219.6" y="1240" textLength="1220" clip-path="url(#breeze-setup-rege [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-51)">│</text><text class="breeze-setup-regenerate-command-images-r4" x="24.4" y="1264.4" textLength="109.8" clip-path="url(#breeze-setup-regenerate-command-images-line-51)">--verbose</text><text class="breeze-setup-regenerate-command-images-r7" x="158.6" y="1264.4" textLength="24.4" clip-path="url(#breeze-setup-regenerate-command-im [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-52)">│</text><text class="breeze-setup-regenerate-command-images-r4" x="24.4" y="1288.8" textLength="109.8" clip-path="url(#breeze-setup-regenerate-command-images-line-52)">--dry-run</text><text class="breeze-setup-regenerate-command-images-r7" x="158.6" y="1288.8" textLength="24.4" clip-path="url(#breeze-setup-regenerate-command-im [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-53)">│</text><text class="breeze-setup-regenerate-command-images-r4" x="24.4" y="1313.2" textLength="109.8" clip-path="url(#breeze-setup-regenerate-command-images-line-53)">--help   </text><text class="breeze-setup-regenerate-command-images-r7" x="158.6" y="1313.2" textLength="24.4" clip-path="url(#breeze-setup-regene [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1337.6" textLength="1464" clip-path="url(#breeze-setup-regenerate-command-images-line-54)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-regenerate-command-images-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-54)">
+</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="195.2" y="800.8" textLength="988.2" clip-path="url(#breeze-setup-regenerate-command-images-line-32)">release-management:release-prod-images | release-management:start-beta-process | </text><text class="breeze-setup-regenerate-command-images-r5 [...]
+</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="195.2" y="825.2" textLength="890.6" clip-path="url(#breeze-setup-regenerate-command-images-line-33)">release-management:start-rc-process | release-management:start-release | </text><text class="breeze-setup-regenerate-command-images-r5" x="145 [...]
+</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="195.2" y="849.6" textLength="915" clip-path="url(#breeze-setup-regenerate-command-images-line-34)">release-management:tag-providers | release-management:update-constraints | </text><text class="breeze-setup-regenerate-command-images-r5" x="145 [...]
+</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="195.2" y="874" textLength="1244.4" clip-path="url(#breeze-setup-regenerate-command-images-line-35)">release-management:update-providers-next-version | release-management:verify-provider-distributions | </text><text class="breeze-setup-regenerate [...]
+</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="195.2" y="898.4" textLength="1012.6" clip-path="url(#breeze-setup-regenerate-command-images-line-36)">release-management:verify-rc-by-pmc | run | sbom | sbom:build-all-airflow-images | </text><text class="breeze-setup-regen [...]
+</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="195.2" y="922.8" textLength="927.2" clip-path="url(#breeze-setup-regenerate-command-images-line-37)">sbom:export-dependency-information | sbom:generate-providers-requirements | </text><text class="breeze-setup-regenerate-command-images-r5" x=" [...]
+</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="195.2" y="947.2" textLength="1159" clip-path="url(#breeze-setup-regenerate-command-images-line-38)">sbom:update-sbom-information | setup | setup:autocomplete | setup:check-all-params-in-groups | </text><text class="breeze-s [...]
+</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="195.2" y="971.6" textLength="1244.4" clip-path="url(#breeze-setup-regenerate-command-images-line-39)">setup:config | setup:regenerate-command-images | setup:self-upgrade | setup:synchronize-local-mounts |</text><text class="bree [...]
+</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="195.2" y="996" textLength="1098" clip-path="url(#breeze-setup-regenerate-command-images-line-40)">setup:version | shell | start-airflow | testing | testing:airflow-ctl-integration-tests | </text><text class="breeze- [...]
+</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="195.2" y="1020.4" textLength="1085.8" clip-path="url(#breeze-setup-regenerate-command-images-line-41)">testing:airflow-ctl-tests | testing:airflow-e2e-tests | testing:core-integration-tests | </text><text class="breeze-setup-regener [...]
+</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-r6" x="195.2" y="1044.8" textLength="890.6" clip-path="url(#breeze-setup-regenerate-command-images-line-42)">testing:core-tests | testing:docker-compose-tests | testing:helm-tests | </text><text class="breeze-setup-regenerate-command-image [...]
+</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-r6" x="195.2" y="1069.2" textLength="1195.6" clip-path="url(#breeze-setup-regenerate-command-images-line-43)">testing:providers-integration-tests | testing:providers-tests | testing:python-api-client-tests | </text><text class="breeze-setu [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-44)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1093.6" textLength="1037" clip-path="url(#breeze-setup-regenerate-command-images-line-44)">testing:system-tests | testing:task-sdk-integration-tests | testing:task-sdk-tests | </text><text class="breeze-setup-regenerate-co [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-45)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1118" textLength="1134.6" clip-path="url(#breeze-setup-regenerate-command-images-line-45)">testing:ui-e2e-tests | ui | ui:check-translation-completeness | ui:compile-assets | verify | </text><text class=" [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-46)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1142.4" textLength="951.6" clip-path="url(#breeze-setup-regenerate-command-images-line-46)">workflow-run | workflow-run:publish-docs | workflow-run:release-constraints | </text><text class="breeze-setup-regenerate-command- [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-47)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1166.8" textLength="414.8" clip-path="url(#breeze-setup-regenerate-command-images-line-47)">workflow-run:sync-staging-to-main)</text><text class="breeze-setup-regenerate-command-images-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze- [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-48)">│</text><text class="breeze-setup-regenerate-command-images-r4" x="24.4" y="1191.2" textLength="146.4" clip-path="url(#breeze-setup-regenerate-command-images-line-48)">--check-only</text><text class="breeze-setup-regenerate-command-images-r1" x="195.2" y="1191.2" textLength="1244.4" clip-path="url(#breeze-setup-regenerate-comma [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-49)">│</text><text class="breeze-setup-regenerate-command-images-r1" x="195.2" y="1215.6" textLength="170.8" clip-path="url(#breeze-setup-regenerate-command-images-line-49)">together with </text><text class="breeze-setup-regenerate-command-images-r4" x="366" y="1215.6" textLength="109.8" clip-path="url(#breeze-setup-regene [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1240" textLength="1464" clip-path="url(#breeze-setup-regenerate-command-images-line-50)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-regenerate-command-images-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-50)">
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1264.4" textLength="24.4" clip-path="url(#breeze-setup-regenerate-command-images-line-51)">╭─</text><text class="breeze-setup-regenerate-command-images-r5" x="24.4" y="1264.4" textLength="195.2" clip-path="url(#breeze-setup-regenerate-command-images-line-51)"> Common options </text><text class="breeze-setup-regenerate-command-images-r5" x="219.6" y="1264.4" textLength="1220" clip-path="url(#breeze-setu [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-52)">│</text><text class="breeze-setup-regenerate-command-images-r4" x="24.4" y="1288.8" textLength="109.8" clip-path="url(#breeze-setup-regenerate-command-images-line-52)">--verbose</text><text class="breeze-setup-regenerate-command-images-r7" x="158.6" y="1288.8" textLength="24.4" clip-path="url(#breeze-setup-regenerate-command-im [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-53)">│</text><text class="breeze-setup-regenerate-command-images-r4" x="24.4" y="1313.2" textLength="109.8" clip-path="url(#breeze-setup-regenerate-command-images-line-53)">--dry-run</text><text class="breeze-setup-regenerate-command-images-r7" x="158.6" y="1313.2" textLength="24.4" clip-path="url(#breeze-setup-regenerate-command-im [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-54)">│</text><text class="breeze-setup-regenerate-command-images-r4" x="24.4" y="1337.6" textLength="109.8" clip-path="url(#breeze-setup-regenerate-command-images-line-54)">--help   </text><text class="breeze-setup-regenerate-command-images-r7" x="158.6" y="1337.6" textLength="24.4" clip-path="url(#breeze-setup-regene [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1362" textLength="1464" clip-path="url(#breeze-setup-regenerate-command-images-line-55)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-regenerate-command-images-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-55)">
</text>
</g>
</g>
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 d5eb31a16b7..c925b44aa64 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 @@
-57d31722815e46eeb1cdf1b92d5a87b1
+b34bcd0ca3348d1279d48f96682a25e5
diff --git a/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py b/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
index f6ac278bb35..ec86ecc46a0 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
@@ -54,7 +54,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
-RC_PATTERN = re.compile(r"^(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)rc(?P<rc>\d+)$")
+PRE_RELEASE_PATTERN = re.compile(r"^(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(?:b|rc)(?P<pre>\d+)$")
SVN_NUM_TRIES = 3
SVN_OPERATION_RETRY_DELAY = 5
@@ -449,6 +449,32 @@ def generate_and_push_constraints(version, version_branch):
publish_constraints(version=version, ref=f"v{version_branch}-stable")
+def validate_test_branch_exists(version_branch, remote_name):
+ """A beta is cut from vX-Y-test; the stable branch does not exist yet during the beta phase."""
+ console_print(f"[info]Validating test branch exists for {version_branch}...")
+ test_branch = f"v{version_branch}-test"
+ run_command(["git", "fetch", remote_name], check=True)
+ result = run_command(["git", "branch", "-r"], check=True, capture_output=True, text=True)
+ if f"{remote_name}/{test_branch}" not in result.stdout:
+ console_print(f"[error]Test branch '{remote_name}/{test_branch}' does not exist!")
+ console_print("Available remote branches:")
+ run_command(["git", "branch", "-r"])
+ exit(1)
+ console_print(f"[success]Test branch '{remote_name}/{test_branch}' exists")
+
+
+def checkout_test_branch_tip(version_branch, remote_name):
+ """Check out the vX-Y-test tip so the beta is tagged from exactly what was pushed to the branch.
+
+ The version-bump and release-notes commits are pushed to vX-Y-test before the beta is cut, so the
+ beta tag is just the branch tip - no sync PR and no merge.
+ """
+ test_branch = f"v{version_branch}-test"
+ run_command(["git", "checkout", test_branch], check=True)
+ run_command(["git", "reset", "--hard", f"{remote_name}/{test_branch}"], check=True)
+ console_print(f"[success]Checked out {remote_name}/{test_branch} tip for tagging")
+
+
def clone_asf_repo(version, repo_root):
if confirm_action("Do you want to clone asf repo?"):
os.chdir(repo_root)
@@ -647,7 +673,7 @@ def remove_old_releases(version, task_sdk_version, repo_root):
if entry.name == version:
# Don't remove the current RC
continue
- if entry.is_dir() and RC_PATTERN.match(entry.name):
+ if entry.is_dir() and PRE_RELEASE_PATTERN.match(entry.name):
old_releases.append(entry.name)
old_releases.sort()
console_print(f"The following old Airflow releases should be removed: {old_releases}")
@@ -669,7 +695,7 @@ def remove_old_releases(version, task_sdk_version, repo_root):
if entry.name == task_sdk_version:
# Don't remove the current RC
continue
- if entry.is_dir() and RC_PATTERN.match(entry.name):
+ if entry.is_dir() and PRE_RELEASE_PATTERN.match(entry.name):
old_task_sdk_releases.append(entry.name)
old_task_sdk_releases.sort()
console_print(f"The following old Task SDK releases should be removed: {old_task_sdk_releases}")
@@ -859,3 +885,111 @@ def publish_release_candidate(
console_print()
console_print("Done!")
+
+
+@release_management_group.command(
+ name="start-beta-process",
+ short_help="Start beta process",
+ help="Start the process for releasing a new beta pre-release.",
+)
+@click.option("--version", required=True, help="The beta version e.g. 3.4.0b1")
+@click.option("--task-sdk-version", required=True, help="The task SDK version e.g. 1.5.0b1.")
+@click.option(
+ "--remote-name",
+ default="upstream",
+ help=(
+ "Git remote name that tracks apache/airflow and receives release tags / branch pushes "
+ "(default: 'upstream' per the standard remote naming convention — "
+ "see contributing-docs/10_working_with_git.rst). Override if your release clone uses a "
+ "different name (for example 'origin' when you clone apache/airflow directly)."
+ ),
+)
+@option_answer
+@option_dry_run
+@option_verbose
+def publish_beta(version, task_sdk_version, remote_name):
+ """Cut a beta pre-release from vX-Y-test.
+
+ A beta is released from vX-Y-test only - there is no vX-Y-stable branch yet and no sync PR. The
+ version-bump and release-notes commits are pushed to vX-Y-test beforehand (via normal PRs); this
+ command tags the vX-Y-test tip and resolves the constraints through the release-constraints
+ workflow from vX-Y-test, the same way an rc does.
+ """
+ from packaging.version import Version
+
+ airflow_version = Version(version)
+ if not airflow_version.is_prerelease or airflow_version.pre is None or airflow_version.pre[0] != "b":
+ exit("--version value must be a beta pre-release, e.g. 3.4.0b1")
+
+ version_suffix = airflow_version.pre[0] + str(airflow_version.pre[1])
+ version_branch = str(airflow_version.release[0]) + "-" + str(airflow_version.release[1])
+ version_without_beta = airflow_version.base_version
+
+ task_sdk_version_obj = Version(task_sdk_version)
+ task_sdk_version_without_beta = task_sdk_version_obj.base_version
+
+ os.chdir(AIRFLOW_ROOT_PATH)
+ airflow_repo_root = os.getcwd()
+
+ if not get_dry_run():
+ validate_remote_tracks_apache_airflow(remote_name)
+ validate_git_status()
+ validate_test_branch_exists(version_branch, remote_name)
+ validate_tag_does_not_exist(version, remote_name)
+ validate_tag_does_not_exist(f"task-sdk/{task_sdk_version}", remote_name)
+
+ console_print()
+ console_print(f"Airflow version: {version}")
+ console_print(f"Task SDK version: {task_sdk_version}")
+ console_print(f"version_suffix: {version_suffix}")
+ console_print(f"version_branch: {version_branch}")
+ console_print(f"version_without_beta: {version_without_beta}")
+ console_print(f"task_sdk_version_without_beta: {task_sdk_version_without_beta}")
+ console_print(f"airflow_repo_root: {airflow_repo_root}")
+ console_print(f"remote_name: {remote_name}")
+ console_print()
+ console_print(f"Below are your git remotes. We will push to {remote_name}:")
+ run_command(["git", "remote", "-v"])
+ console_print()
+ confirm_action("Verify that the above information is correct. Do you want to continue?", abort=True)
+
+ # Tag the vX-Y-test tip directly - no sync PR, no merge.
+ if not get_dry_run():
+ checkout_test_branch_tip(version_branch, remote_name)
+ git_tag(version, f"Apache Airflow {version}")
+ git_tag(f"task-sdk/{task_sdk_version}", f"Airflow Task SDK {task_sdk_version}")
+ git_clean()
+ source_date_epoch = get_source_date_epoch(AIRFLOW_ROOT_PATH)
+ shutil.rmtree(AIRFLOW_DIST_PATH, ignore_errors=True)
+ if confirm_action("Use docker to create artifacts?"):
+ create_artifacts_with_docker()
+ elif confirm_action("Use hatch to create artifacts?"):
+ create_artifacts_with_hatch(source_date_epoch)
+ if confirm_action("Create tarball?"):
+ tarball_release(
+ version=version_without_beta,
+ source_date_epoch=source_date_epoch,
+ tarball_type=TarBallType.AIRFLOW,
+ tag=version,
+ )
+ test_airflow()
+ sign_the_release(airflow_repo_root)
+ # Resolve and tag the constraints via the release-constraints workflow from the vX-Y-test sources
+ # the beta is cut from. Like an rc, it allows the provider rc wave and lands on its own
+ # constraints-X.Y.0bN branch/tag without moving the shared constraints-X-Y branch.
+ publish_constraints(version=version, ref=f"v{version_branch}-test")
+ clone_asf_repo(version, airflow_repo_root)
+ move_artifacts_to_svn(
+ version, version_without_beta, task_sdk_version, task_sdk_version_without_beta, airflow_repo_root
+ )
+ push_artifacts_to_asf_repo(version, task_sdk_version, airflow_repo_root)
+ remove_old_releases(version, task_sdk_version, airflow_repo_root)
+ delete_asf_repo(airflow_repo_root)
+ prepare_pypi_packages(version, version_suffix, airflow_repo_root)
+ push_packages_to_pypi(version)
+ push_release_candidate_tag_to_github(version, remote_name)
+ push_release_candidate_tag_to_github(f"task-sdk/{task_sdk_version}", remote_name)
+ os.chdir(airflow_repo_root)
+
+ console_print()
+ console_print("Done!")
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 4c6175d5949..3cf90f73dc3 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
@@ -22,6 +22,7 @@ RELEASE_AIRFLOW_COMMANDS: dict[str, str | list[str]] = {
"create-minor-branch",
"prepare-airflow-distributions",
"prepare-tarball",
+ "start-beta-process",
"start-rc-process",
"start-release",
"release-prod-images",
@@ -500,6 +501,16 @@ RELEASE_MANAGEMENT_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
"options": ["--provider-id", "--provider-version"],
},
],
+ "breeze release-management start-beta-process": [
+ {
+ "name": "Start beta process flags",
+ "options": [
+ "--version",
+ "--task-sdk-version",
+ "--remote-name",
+ ],
+ }
+ ],
"breeze release-management start-rc-process": [
{
"name": "Start RC process flags",
diff --git a/dev/breeze/src/airflow_breeze/utils/release_constraints.py b/dev/breeze/src/airflow_breeze/utils/release_constraints.py
index 103f45e750b..2565e430608 100644
--- a/dev/breeze/src/airflow_breeze/utils/release_constraints.py
+++ b/dev/breeze/src/airflow_breeze/utils/release_constraints.py
@@ -46,7 +46,15 @@ def publish_constraints(*, version: str, ref: str, workflow_branch: str = "main"
(``3.3.1``) resolves against the published releases and commits onto ``constraints-X-Y``, which
is what makes the released constraints the baseline everything downstream reads.
"""
- stage = "candidate" if "rc" in version else "final"
+ from packaging.version import Version
+
+ parsed = Version(version)
+ if not parsed.is_prerelease:
+ stage = "final"
+ elif parsed.pre and parsed.pre[0] == "b":
+ stage = "beta"
+ else:
+ stage = "candidate"
if not confirm_action(
f"Trigger the release-constraints workflow for the {stage} {version} (resolved from {ref})?"
):
diff --git a/dev/breeze/tests/test_release_candidate_command.py b/dev/breeze/tests/test_release_candidate_command.py
index 8f50ab526bb..1877590a2d4 100644
--- a/dev/breeze/tests/test_release_candidate_command.py
+++ b/dev/breeze/tests/test_release_candidate_command.py
@@ -148,7 +148,7 @@ def test_remove_old_releases_only_collects_rc_directories(monkeypatch, rc_cmd):
# Act
rc_cmd.remove_old_releases(version=version, task_sdk_version=task_sdk_version, repo_root=repo_root)
- # Assert: only directory entries matching RC_PATTERN, excluding current version, and sorted.
+ # Assert: only directory entries matching PRE_RELEASE_PATTERN, excluding current version, and sorted.
assert f"{repo_root}/asf-dist/dev/airflow" in chdir_calls
assert repo_root in chdir_calls
assert (
@@ -728,3 +728,89 @@ def test_push_artifacts_to_asf_repo_completes_successfully(monkeypatch, rc_cmd):
"Verify that the files are available here: https://dist.apache.org/repos/dist/dev/airflow/"
in console_messages
)
+
+
+# --- start-beta-process ---------------------------------------------------------------------------
+
+
+@pytest.mark.parametrize(
+ ("name", "matches"),
+ [
+ pytest.param("3.4.0rc1", True, id="rc"),
+ pytest.param("3.4.0b1", True, id="beta"),
+ pytest.param("3.4.0b2", True, id="later-beta"),
+ pytest.param("3.4.0", False, id="final"),
+ pytest.param("3.4.0a1", False, id="alpha"),
+ pytest.param("not-a-release", False, id="garbage"),
+ ],
+)
+def test_pre_release_pattern_matches_rc_and_beta(rc_cmd, name, matches):
+ """Old-release cleanup collects rc and beta directories, not finals or anything else."""
+ assert bool(rc_cmd.PRE_RELEASE_PATTERN.match(name)) is matches
+
+
+def test_remove_old_releases_collects_beta_directories(monkeypatch, rc_cmd):
+ """A beta run offers to remove older beta directories, not only rc ones."""
+ version = "3.4.0b2"
+ task_sdk_version = "1.5.0b2"
+ repo_root = "/repo/root"
+
+ entries = [
+ FakeDirEntry(version, is_dir=True), # current beta: skipped
+ FakeDirEntry("3.4.0b1", is_dir=True), # old beta: collected
+ FakeDirEntry("3.4.0", is_dir=True), # final: excluded
+ ]
+ console_messages: list[str] = []
+
+ monkeypatch.setattr(rc_cmd.os, "chdir", lambda path: None)
+ monkeypatch.setattr(rc_cmd.os, "scandir", lambda: iter(entries))
+ monkeypatch.setattr(rc_cmd.os.path, "exists", lambda path: False)
+ monkeypatch.setattr(
+ rc_cmd, "confirm_action", lambda prompt, **k: prompt == "Do you want to look for old RCs to remove?"
+ )
+ monkeypatch.setattr(rc_cmd, "console_print", lambda msg="": console_messages.append(str(msg)))
+ monkeypatch.setattr(rc_cmd, "run_command", lambda *a, **k: None)
+
+ rc_cmd.remove_old_releases(version=version, task_sdk_version=task_sdk_version, repo_root=repo_root)
+
+ assert "The following old Airflow releases should be removed: ['3.4.0b1']" in console_messages
+
+
+@pytest.mark.parametrize(
+ ("remote_branches", "should_exit"),
+ [
+ pytest.param(" origin/v3-4-test\n", False, id="passes-with-test-branch"),
+ pytest.param(" origin/main\n", True, id="exits-without-test-branch"),
+ ],
+)
+def test_validate_test_branch_exists(monkeypatch, rc_cmd, remote_branches, should_exit):
+ """A beta needs only vX-Y-test; it must not require a stable branch."""
+ import types
+
+ def fake_run_command(cmd, **kwargs):
+ if cmd[:3] == ["git", "branch", "-r"] and kwargs.get("capture_output"):
+ return types.SimpleNamespace(stdout=remote_branches)
+ return None
+
+ monkeypatch.setattr(rc_cmd, "run_command", fake_run_command)
+ monkeypatch.setattr(rc_cmd, "console_print", lambda *a, **k: None)
+
+ if should_exit:
+ with pytest.raises(SystemExit):
+ rc_cmd.validate_test_branch_exists("3-4", "origin")
+ else:
+ rc_cmd.validate_test_branch_exists("3-4", "origin")
+
+
+def test_checkout_test_branch_tip_resets_to_remote_tip(monkeypatch, rc_cmd):
+ """The beta is tagged from exactly the pushed vX-Y-test tip (checkout + hard reset to remote)."""
+ run_command_calls: list[list[str]] = []
+ monkeypatch.setattr(rc_cmd, "console_print", lambda *a, **k: None)
+ monkeypatch.setattr(rc_cmd, "run_command", lambda cmd, **k: run_command_calls.append(cmd))
+
+ rc_cmd.checkout_test_branch_tip("3-4", "origin")
+
+ assert run_command_calls == [
+ ["git", "checkout", "v3-4-test"],
+ ["git", "reset", "--hard", "origin/v3-4-test"],
+ ]
diff --git a/dev/breeze/tests/test_release_constraints.py b/dev/breeze/tests/test_release_constraints.py
index db914d97722..84e6b2144a9 100644
--- a/dev/breeze/tests/test_release_constraints.py
+++ b/dev/breeze/tests/test_release_constraints.py
@@ -77,6 +77,7 @@ def test_nothing_is_dispatched_when_declined(monkeypatch, triggered):
("version", "expected_stage"),
[
pytest.param("3.1.3rc2", "candidate", id="rc-is-a-candidate"),
+ pytest.param("3.4.0b1", "beta", id="beta-is-a-beta"),
pytest.param("3.1.3", "final", id="plain-version-is-final"),
],
)