This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a commit to branch v3-1-test
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/v3-1-test by this push:
     new ab7d48fffea [v3-1-test] Further fixes for release preparation process 
for tarballs (#57996) (#57997)
ab7d48fffea is described below

commit ab7d48fffeacdea553f2b6a1be83ccf5e31c5512
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Nov 7 01:20:28 2025 +0100

    [v3-1-test] Further fixes for release preparation process for tarballs 
(#57996) (#57997)
    
    When preparing tarballs for airflow-ctl, airflow, even if we are
    preparing tarballs for "final" version we need to prepare them from
    a tag that has version suffix added. And we need to know the suffix.
    
    The prepare-tarball command has now --version-suffix added as well
    as the VERSION, VERSION_SUFFIX and VERSION_RC variables have been
    synchronized to be the same for airflow, airflowctl, helm-chart -
    previously we used VERSION to contain also RC and VERSION_WITHOUT_RC
    to be final version - this is now synchronized across all release
    instructions.
    (cherry picked from commit 102b262db40b9521b71811b39cf1cfb5aec08194)
    
    Co-authored-by: Jarek Potiuk <[email protected]>
---
 dev/README_RELEASE_AIRFLOW.md                      | 121 +++++++++++----------
 dev/README_RELEASE_AIRFLOWCTL.md                   |  49 ++++-----
 .../output_release-management_prepare-tarball.svg  |  44 +++++---
 .../output_release-management_prepare-tarball.txt  |   2 +-
 .../commands/release_candidate_command.py          |  22 +++-
 .../commands/release_management_commands_config.py |   2 +-
 6 files changed, 129 insertions(+), 111 deletions(-)

diff --git a/dev/README_RELEASE_AIRFLOW.md b/dev/README_RELEASE_AIRFLOW.md
index 296ea04b01f..c31e2b72c4c 100644
--- a/dev/README_RELEASE_AIRFLOW.md
+++ b/dev/README_RELEASE_AIRFLOW.md
@@ -272,13 +272,13 @@ The Release Candidate artifacts we vote upon should be 
the exact ones we vote ag
 export GPG_TTY=$(tty)
 
 # Set Version
-export VERSION=3.0.5rc1
+export VERSION=3.1.3
 export VERSION_SUFFIX=rc1
-export VERSION_BRANCH=2-1
-export VERSION_WITHOUT_RC=${VERSION/rc?/}
-export TASK_SDK_VERSION=1.0.5rc1
-export TASK_SDK_VERSION_WITHOUT_RC=${TASK_SDK_VERSION/rc?/}
-export PREVIOUS_VERSION=3.0.4
+export VERSION_RC=${VERSION}${VERSION_RC}
+export VERSION_BRANCH=3-1
+export TASK_SDK_VERSION=1.1.3
+export TASK_SDK_VERSION_RC=${TASK_SDK_VERSION}${VERSION_SUFFIX}
+export PREVIOUS_VERSION=3.1.2
 export SYNC_BRANCH=changes-3.1.2rc1 # sync branch, if different from the test 
branch
 
 # Set AIRFLOW_REPO_ROOT to the path of your git repo
@@ -319,13 +319,13 @@ uv tool install -e ./dev/breeze
   with minimum version for the next version of Airflow will be added in the 
future.
 - Check `Apache Airflow is tested with` (stable version) in `README.md` has 
the same tested versions as in the tip of
   the stable branch in `dev/breeze/src/airflow_breeze/global_constants.py`
-- Commit the above changes with the message `Update version to 
${VERSION_WITHOUT_RC}`.
+- Commit the above changes with the message `Update version to ${VERSION}`.
 - Build the release notes:
 
   Preview with:
 
     ```shell script
-    towncrier build --draft --version=${VERSION_WITHOUT_RC} --date=2021-12-15 
--dir . --config newsfragments/config.toml
+    towncrier build --draft --version=${VERSION} --date=2021-12-15 --dir . 
--config newsfragments/config.toml
     ```
 
 
@@ -364,9 +364,9 @@ uv tool install -e ./dev/breeze
     git checkout main
     git pull # Ensure that the script is up-to-date
     breeze release-management start-rc-process \
-        --version ${VERSION} \
+        --version ${VERSION_RC} \
         --previous-version ${PREVIOUS_VERSION} \
-        --task-sdk-version ${TASK_SDK_VERSION} \
+        --task-sdk-version ${TASK_SDK_VERSION_RC} \
         --sync-branch ${SYNC_BRANCH}
    ```
 
@@ -376,9 +376,9 @@ uv tool install -e ./dev/breeze
    ```shell script
    # Test with dry-run (shows what would be executed without doing it)
    breeze release-management start-rc-process \
-       --version ${VERSION} \
+       --version ${VERSION_RC} \
        --previous-version ${PREVIOUS_VERSION} \
-       --task-sdk-version ${TASK_SDK_VERSION} \
+       --task-sdk-version ${TASK_SDK_VERSION_RC} \
        --remote-name upstream \
        --dry-run
    ```
@@ -387,14 +387,14 @@ uv tool install -e ./dev/breeze
 
   ```shell script
   cat <<EOF
-  Status of testing of Apache Airflow ${VERSION}
+  Status of testing of Apache Airflow ${VERSION_RC}
   EOF
   ```
 
 - Generate the body of the issue using the below command:
 
   ```shell script
-    breeze release-management generate-issue-content-core --previous-release 
${PREVIOUS_VERSION} --current-release ${VERSION}
+    breeze release-management generate-issue-content-core --previous-release 
${PREVIOUS_VERSION} --current-release ${VERSION_RC}
     ```
 
 ## Publish release candidate documentation (staging)
@@ -421,7 +421,7 @@ The command does the following:
 breeze workflow-run publish-docs --ref <tag> --site-env <staging/live/auto> 
apache-airflow docker-stack task-sdk
 
 # Example for RC
-breeze workflow-run publish-docs --ref ${VERSION} --site-env staging 
apache-airflow docker-stack task-sdk
+breeze workflow-run publish-docs --ref ${VERSION_RC} --site-env staging 
apache-airflow docker-stack task-sdk
 ```
 
 The `--ref` parameter should be the tag of the release candidate you are 
publishing.
@@ -508,7 +508,7 @@ Subject:
 
 ```shell script
 cat <<EOF
-[VOTE] Release Airflow ${VERSION_WITHOUT_RC} from ${VERSION} & Task SDK 
${TASK_SDK_VERSION_WITHOUT_RC} from ${TASK_SDK_VERSION}
+[VOTE] Release Airflow ${VERSION} from ${VERSION_RC} & Task SDK 
${TASK_SDK_VERSION} from ${TASK_SDK_VERSION_RC}
 EOF
 ```
 
@@ -518,7 +518,7 @@ Body:
 cat <<EOF
 Hey fellow Airflowers,
 
-The release candidates for Apache Airflow ${VERSION} and Task SDK 
${TASK_SDK_VERSION} are now available for testing!
+The release candidates for Apache Airflow ${VERSION_RC} and Task SDK 
${TASK_SDK_VERSION_RC} are now available for testing!
 
 This email is calling for a vote on the release, which will last at least 72 
hours, from Friday, October 8, 2021 at 4:00 pm UTC
 until Monday, October 11, 2021 at 4:00 pm UTC, and until 3 binding +1 votes 
have been received.
@@ -529,24 +529,24 @@ Status of testing of the release is kept in 
TODO:URL_OF_THE_ISSUE_HERE
 
 Consider this my +1 binding vote.
 
-Airflow ${VERSION} is available at:
-https://dist.apache.org/repos/dist/dev/airflow/${VERSION}/
+Airflow ${VERSION_RC} is available at:
+https://dist.apache.org/repos/dist/dev/airflow/${VERSION_RC}/
 
 "apache-airflow" Meta package:
-- *apache-airflow-${VERSION_WITHOUT_RC}-source.tar.gz* is a source release 
that comes with INSTALL instructions.
-- *apache-airflow-${VERSION_WITHOUT_RC}.tar.gz* is the binary Python "sdist" 
release.
-- *apache_airflow-${VERSION_WITHOUT_RC}-py3-none-any.whl* is the binary Python 
wheel "binary" release.
+- *apache-airflow-${VERSION}-source.tar.gz* is a source release that comes 
with INSTALL instructions.
+- *apache-airflow-${VERSION}.tar.gz* is the binary Python "sdist" release.
+- *apache_airflow-${VERSION}-py3-none-any.whl* is the binary Python wheel 
"binary" release.
 
 "apache-airflow-core" package:
-- *apache_airflow_core-${VERSION_WITHOUT_RC}.tar.gz* is the binary Python 
"sdist" release.
-- *apache_airflow_core-${VERSION_WITHOUT_RC}-py3-none-any.whl* is the binary 
Python wheel "binary" release.
+- *apache_airflow_core-${VERSION}.tar.gz* is the binary Python "sdist" release.
+- *apache_airflow_core-${VERSION}-py3-none-any.whl* is the binary Python wheel 
"binary" release.
 
 Task SDK ${TASK_SDK_VERSION} is available at:
 https://dist.apache.org/repos/dist/dev/airflow/task-sdk/${TASK_SDK_VERSION}/
 
 "apache-airflow-task-sdk" package:
-- *apache_airflow_task_sdk-${TASK_SDK_VERSION_WITHOUT_RC}.tar.gz* is the 
binary Python "sdist" release.
-- *apache_airflow_task_sdk-${TASK_SDK_VERSION_WITHOUT_RC}-py3-none-any.whl* is 
the binary Python wheel "binary" release.
+- *apache_airflow_task_sdk-${TASK_SDK_VERSION}.tar.gz* is the binary Python 
"sdist" release.
+- *apache_airflow_task_sdk-${TASK_SDK_VERSION}-py3-none-any.whl* is the binary 
Python wheel "binary" release.
 
 Public keys are available at:
 https://dist.apache.org/repos/dist/release/airflow/KEYS
@@ -567,26 +567,26 @@ The test procedure for contributors and members of the 
community who would like
 
https://github.com/apache/airflow/blob/main/dev/README_RELEASE_AIRFLOW.md#verify-the-release-candidate-by-contributors
 
 Please note that the version number excludes the 'rcX' string, so it's now
-simply ${VERSION_WITHOUT_RC} for Airflow package and 
${TASK_SDK_VERSION_WITHOUT_RC} for Task SDK. This will allow us to rename the 
artifact without modifying
+simply ${VERSION} for Airflow package and ${TASK_SDK_VERSION} for Task SDK. 
This will allow us to rename the artifact without modifying
 the artifact checksums when we actually release.
 
 Docs (for preview):
-https://airflow.staged.apache.org/docs/apache-airflow/${VERSION_WITHOUT_RC}
+https://airflow.staged.apache.org/docs/apache-airflow/${VERSION}
 
 Release Notes:
-- https://github.com/apache/airflow/blob/${VERSION}/RELEASE_NOTES.rst
-- 
https://airflow.staged.apache.org/docs/apache-airflow/${VERSION_WITHOUT_RC}/release_notes.html
 (Rendered HTML)
+- https://github.com/apache/airflow/blob/${VERSION_RC}/RELEASE_NOTES.rst
+- 
https://airflow.staged.apache.org/docs/apache-airflow/${VERSION}/release_notes.html
 (Rendered HTML)
 
 Testing Instructions using PyPI:
 You can build a virtualenv that installs this and other required packages 
(e.g. task sdk), like this:
 
 uv venv
 uv pip install -U \\
-  apache-airflow==${VERSION} \\
-  apache-airflow-core==${VERSION} \\
-  apache-airflow-task-sdk==${TASK_SDK_VERSION}
+  apache-airflow==${VERSION_RC} \\
+  apache-airflow-core==${VERSION_RC} \\
+  apache-airflow-task-sdk==${TASK_SDK_VERSION_RC}
 
-Constraints files are at 
https://github.com/apache/airflow/tree/constraints-${VERSION}
+Constraints files are at 
https://github.com/apache/airflow/tree/constraints-${VERSION_RC}
 
 Cheers,
 <your name>
@@ -621,15 +621,18 @@ Checkout airflow sources and build packages in dist 
folder (replace X.Y.Zrc1 wit
 you are checking):
 
 ```shell script
-VERSION=X.Y.Zrc1
-TASK_SDK_VERSION=X.Y.Zrc1
+VERSION=X.Y.Z
+VERSION_SUFFIX=rc1
+VERSION_RC=${VERSION}${VERSION_SUFFIX}
+TASK_SDK_VERSION=X.Y.Z
+TASK_SDK_VERSION_RC=${TASK_SDK_VERSION}${VERSION_SUFFIX}
 git fetch apache --tags
-git checkout ${VERSION}
+git checkout ${VERSION_RC}
 export AIRFLOW_REPO_ROOT=$(pwd)
 rm -rf dist/*
-breeze release-management prepare-airflow-distributions --distribution-format 
both --tag ${VERSION}
+breeze release-management prepare-airflow-distributions --distribution-format 
both
 breeze release-management prepare-task-sdk-distributions --distribution-format 
both
-breeze release-management prepare-tarball --tarball-type apache_airflow 
--version ${VERSION}
+breeze release-management prepare-tarball --tarball-type apache_airflow 
--version ${VERSION} --version-suffix ${VERSION_SUFFIX}
 ```
 
 The `prepare-*-distributions` by default will use Dockerized approach and 
building of the packages
@@ -637,9 +640,9 @@ will be done in a docker container.  However, if you have  
`hatch` installed loc
 `--use-local-hatch` flag and it will build and use  docker image that has 
`hatch` installed.
 
 ```bash
-breeze release-management prepare-airflow-distributions --distribution-format 
both --use-local-hatch --tag ${VERSION}
+breeze release-management prepare-airflow-distributions --distribution-format 
both --use-local-hatch
 breeze release-management prepare-task-sdk-distributions --distribution-format 
both --use-local-hatch
-breeze release-management prepare-tarball --tarball-type apache_airflow 
--version ${VERSION}
+breeze release-management prepare-tarball --tarball-type apache_airflow 
--version ${VERSION} --version-suffix ${VERSION_SUFFIX}
 ```
 
 This is generally faster and requires less resources/network bandwidth. Note 
that you have to
@@ -660,13 +663,13 @@ cd ..
 svn update --set-depth=infinity asf-dist/dev/airflow
 
 # Then compare the packages
-cd asf-dist/dev/airflow/${VERSION}
+cd asf-dist/dev/airflow/${VERSION_RC}
 for i in *.whl *.tar.gz
 do
   echo "Checking if $(basename $i) is the same as 
${AIRFLOW_REPO_ROOT}/dist/$(basename $i)"
   diff "$(basename $i)" "${AIRFLOW_REPO_ROOT}/dist/$(basename $i)" && echo "OK"
 done
-cd ../task-sdk/${TASK_SDK_VERSION}
+cd ../task-sdk/${TASK_SDK_VERSION_RC}
 for i in *.whl *.tar.gz
 do
   echo "Checking if $(basename $i) is the same as 
${AIRFLOW_REPO_ROOT}/dist/$(basename $i)"
@@ -718,13 +721,13 @@ present in SVN. This script may help also with verifying 
installation of the pac
 
 ```shell script
 cd $AIRFLOW_REPO_ROOT/dev
-uv run check_files.py airflow -v ${VERSION} -p ${PATH_TO_SVN}
+uv run check_files.py airflow -v ${VERSION_RC} -p ${PATH_TO_SVN}
 ```
 
 
 ```shell script
 cd $AIRFLOW_REPO_ROOT/dev
-uv run check_files.py task-sdk -v ${TASK_SDK_VERSION} -p 
${PATH_TO_SVN}/task-sdk
+uv run check_files.py task-sdk -v ${TASK_SDK_VERSION_RC} -p 
${PATH_TO_SVN}/task-sdk
 ```
 
 ## Licence check
@@ -742,7 +745,7 @@ wget -qO- 
https://dlcdn.apache.org//creadur/apache-rat-0.17/apache-rat-0.17-bin.
 Unpack the release source archive (the `<package + version>-source.tar.gz` 
file) to a folder
 
 ```shell script
-rm -rf /tmp/apache/airflow-src && mkdir -p /tmp/apache-airflow-src && tar -xzf 
${PATH_TO_SVN}/${VERSION}/apache_airflow*-source.tar.gz --strip-components 1 -C 
/tmp/apache-airflow-src
+rm -rf /tmp/apache/airflow-src && mkdir -p /tmp/apache-airflow-src && tar -xzf 
${PATH_TO_SVN}/${VERSION_RC}/apache_airflow*-source.tar.gz --strip-components 1 
-C /tmp/apache-airflow-src
 ```
 
 Run the check:
@@ -900,7 +903,7 @@ Optionally it can be followed with constraints
 
 ```shell script
 pip install apache-airflow==<VERSION>rc<X> \
-  --constraint 
"https://raw.githubusercontent.com/apache/airflow/constraints-<VERSION>/constraints-3.10.txt"
+  --constraint 
"https://raw.githubusercontent.com/apache/airflow/constraints-<VERSION>rc<X>/constraints-3.10.txt"
 ```
 
 Note that the constraints contain python version that you are installing it 
with.
@@ -984,17 +987,19 @@ https://dist.apache.org/repos/dist/release/airflow/
 The best way of doing this is to svn cp between the two repos (this avoids 
having to upload the binaries again, and gives a clearer history in the svn 
commit logs):
 
 ```shell script
-export RC=3.0.5rc5
-export VERSION=${RC/rc?/}
-export TASK_SDK_RC=1.0.5rc1
-export PREVIOUS_RELEASE=3.0.4
+export VERSION=3.1.3
+export VERSION_SUFFIX=rc1
+export VERSION_RC=${VERSION}${VERSION_SUFFIX}
+export TASK_SDK_VERSION=1.1.3
+export TASK_SDK_VERSION_RC=${TASK_SDK_VERSION}${VERSION_SUFFIX}
+export PREVIOUS_RELEASE=3.1.2
 # cd to the airflow repo directory and set the environment variable below
 export AIRFLOW_REPO_ROOT=$(pwd)
 # start the release process by running the below command
 breeze release-management start-release \
-    --release-candidate ${RC} \
+    --release-candidate ${VERSION_RC} \
     --previous-release ${PREVIOUS_RELEASE} \
-    --task-sdk-release-candidate ${TASK_SDK_RC}
+    --task-sdk-release-candidate ${TASK_SDK_VERSION_RC}
 ```
 
 Note: The `--task-sdk-release-candidate` parameter is optional. If you are 
releasing Airflow without a corresponding Task SDK release, you can omit this 
parameter.
@@ -1033,11 +1038,11 @@ the older branches, you should set the "skip" field to 
true.
 ```shell script
 for PYTHON in 3.10 3.11 3.12 3.13
 do
-    docker pull apache/airflow:${VERSION}-python${PYTHON}
-    breeze prod-image verify --image-name 
apache/airflow:${VERSION}-python${PYTHON}
+    docker pull apache/airflow:${VERSION_RC}-python${PYTHON}
+    breeze prod-image verify --image-name 
apache/airflow:${VERSION_RC}-python${PYTHON}
 done
-docker pull apache/airflow:${VERSION}
-breeze prod-image verify --image-name apache/airflow:${VERSION}
+docker pull apache/airflow:${VERSION_RC}
+breeze prod-image verify --image-name apache/airflow:${VERSION_RC}
 ```
 
 ## Publish final documentation
@@ -1063,7 +1068,7 @@ The command does the following:
 
 ```shell script
 # Example for final release
-breeze workflow-run publish-docs --ref ${VERSION_WITHOUT_RC} --site-env live 
apache-airflow docker-stack task-sdk
+breeze workflow-run publish-docs --ref ${VERSION} --site-env live 
apache-airflow docker-stack task-sdk
 ```
 
 The `--ref` parameter should be the tag of the final version you are 
publishing.
diff --git a/dev/README_RELEASE_AIRFLOWCTL.md b/dev/README_RELEASE_AIRFLOWCTL.md
index db4ee7c8425..13f19e1812b 100644
--- a/dev/README_RELEASE_AIRFLOWCTL.md
+++ b/dev/README_RELEASE_AIRFLOWCTL.md
@@ -103,8 +103,9 @@ This caused a side effect where we won't be able to use 
following versions in fu
 Set version env variable
 
 ```shell script
-VERSION=1.0.0
-VERSION_RC=1.0.0rc1
+VERSION=0.1.0
+VERSION_SUFFIX=rc1
+VERSION_RC=${VERSION}${VERSION_SUFFIX}
 ```
 
 # Prepare Regular airflow-ctl distributions (RC)
@@ -153,8 +154,8 @@ git push apache --tags "airflow-ctl/${VERSION_RC}"
 * Release candidate packages:
 
 ```shell script
-breeze release-management prepare-airflow-ctl-distributions 
--distribution-format both --tag "airflow-ctl/${VERSION_RC}"
-breeze release-management prepare-tarball --tarball-type apache_airflow_ctl 
--version "${VERSION}"
+breeze release-management prepare-airflow-ctl-distributions 
--distribution-format both
+breeze release-management prepare-tarball --tarball-type apache_airflow_ctl 
--version "${VERSION}" --version-suffix "${VERSION_SUFFIX}"
 ```
 
 The `prepare-*-distributions` by default will use Dockerized approach and 
building of the packages
@@ -163,8 +164,8 @@ will be done in a docker container.  However, if you have  
`hatch` installed loc
 
 
 ```shell script
-breeze release-management prepare-airflow-ctl-distributions 
--distribution-format both --use-local-hatch --tag "airflow-ctl/${VERSION_RC}"
-breeze release-management prepare-tarball --tarball-type apache_airflow_ctl 
--version "${VERSION}"
+breeze release-management prepare-airflow-ctl-distributions 
--distribution-format both --use-local-hatch
+breeze release-management prepare-tarball --tarball-type apache_airflow_ctl 
--version "${VERSION}" --version-suffix "${VERSION_SUFFIX}"
 ```
 
 
@@ -471,10 +472,12 @@ it means that the build has a verified provenance.
 
 How to verify it:
 
-1) Change directory where your airflow sources are checked out
+1) Set variables and change directory where your airflow sources are checked 
out
 
 ```shell
-VERSION=1.0.0rc1
+VERSION=0.1.0
+VERSION_SUFFIX=rc1
+VERSION_RC=${VERSION}${VERSION_SUFFIX}
 cd "${AIRFLOW_REPO_ROOT}"
 ```
 
@@ -482,7 +485,7 @@ Choose the tag you used for release:
 
 ```shell
 git fetch apache --tags
-git checkout airflow-ctl/${VERSION}
+git checkout airflow-ctl/${VERSION_RC}
 ```
 
 3) Remove all the packages you have in dist folder
@@ -494,7 +497,7 @@ rm -rf dist/*
 4) Build the packages using checked out sources
 
 ```shell
-breeze release-management prepare-airflow-ctl-distributions 
--distribution-format both --tag ${VERSION}
+breeze release-management prepare-airflow-ctl-distributions 
--distribution-format both
 ```
 
 5) Switch to the folder where you checked out the SVN dev files
@@ -533,7 +536,7 @@ wget -qO- 
https://dlcdn.apache.org//creadur/apache-rat-0.17/apache-rat-0.17-bin.
 Unpack the release source archive (the `<package + version>-source.tar.gz` 
file) to a folder
 
 ```shell script
-rm -rf /tmp/apache/airflow-src && mkdir -p /tmp/apache-airflow-src && tar -xzf 
${PATH_TO_SVN}/${VERSION}/apache_airflow*-source.tar.gz --strip-components 1 -C 
/tmp/apache-airflow-src
+rm -rf /tmp/apache/airflow-src && mkdir -p /tmp/apache-airflow-src && tar -xzf 
${PATH_TO_SVN}/${VERSION_RC}/apache_airflow*-source.tar.gz --strip-components 1 
-C /tmp/apache-airflow-src
 ```
 
 Run the check:
@@ -687,10 +690,7 @@ Replace the DAYS_BACK with how many days ago you prepared 
the release.
 Normally it's 3 but in case it's longer change it. The output should match the 
prepare date.
 
 ```
-export DAYS_BACK=3
-export RELEASE_DATE=$(LANG=en_US.UTF-8 date -u -v-${DAYS_BACK}d "+%B %d, %Y")
-export RELEASE_MANAGER_NAME="Elad Kalif"
-echo "prepare release date is ${RELEASE_DATE}"
+export RELEASE_MANAGER_NAME="Buğra Öztürk"
 ```
 
 ## Summarize the voting for the Apache Airflow release
@@ -701,7 +701,7 @@ Email subject:
 
 ```
 cat <<EOF
-[RESULT][VOTE] Airflow Ctl - release ${VERSION}
+[RESULT][VOTE] Airflow Ctl - release ${VERSION} from ${VERSION_RC}
 EOF
 ```
 
@@ -711,7 +711,7 @@ Email content:
 cat <<EOF
 Hello,
 
-Apache Airflow Ctl prepared with version ${{ERSION} have been accepted.
+Apache Airflow Ctl prepared with version ${VERSION} from ${VERSION_RC} have 
been accepted.
 
 3 "+1" binding votes received:
 - FIRST LAST NAME (binding)
@@ -921,7 +921,7 @@ Subject:
 
 ```
 cat <<EOF
-[ANNOUNCE] Apache Airflow CTl prepared on ${VERSION} are released
+[ANNOUNCE] Apache Airflow CTl ${VERSION} from ${VERSION_RC} released
 EOF
 ```
 
@@ -931,8 +931,7 @@ Body:
 cat <<EOF
 Dear Airflow community,
 
-I'm happy to announce that new versions of Airflow Ctl packages prepared: 
${VERSION} were just released.
-Full list of PyPI packages released is added at the end of the message.
+I'm happy to announce that new versions of Airflow Ctl packages prepared: 
${VERSION} from ${VERSION_RC} were just released.
 
 The source release, as well as the binary releases, are available here:
 
@@ -944,9 +943,7 @@ The documentation is available at 
https://airflow.apache.org/docs/ and linked fr
 
 ----
 
-Full list of released PyPI packages:
-
-TODO: Paste the list of packages here that you put on the side. Sort them 
alphabetically.
+The package can be found in PyPI at this link: 
https://pypi.org/project/apache-airflow-ctl/${VERSION}/
 
 Cheers,
 ${RELEASE_MANAGER_NAME}
@@ -976,12 +973,6 @@ The ASF Security will be notified and will submit to the 
CVE project and will se
 
 ## Announce about the release in social media
 
-NOTE!
-
-As a rule we announce only new airlfow-ctl that were added.
-If you believe there is a reason to announce in social media for another case 
consult with PMC
-members about it.
-
 
------------------------------------------------------------------------------------------------------------
 Announcement is done from official Apache-Airflow accounts.
 
diff --git 
a/dev/breeze/doc/images/output_release-management_prepare-tarball.svg 
b/dev/breeze/doc/images/output_release-management_prepare-tarball.svg
index cac88257e8b..03e24473a25 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-tarball.svg
+++ b/dev/breeze/doc/images/output_release-management_prepare-tarball.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 513.5999999999999" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 586.8" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-release-management-prepare-tarball-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="462.59999999999997" />
+      <rect x="0" y="0" width="1463.0" height="535.8" />
     </clipPath>
     <clipPath id="breeze-release-management-prepare-tarball-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -99,9 +99,18 @@
 <clipPath id="breeze-release-management-prepare-tarball-line-17">
     <rect x="0" y="416.3" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-release-management-prepare-tarball-line-18">
+    <rect x="0" y="440.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-prepare-tarball-line-19">
+    <rect x="0" y="465.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-prepare-tarball-line-20">
+    <rect x="0" y="489.5" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="511.6" rx="8"/><text 
class="breeze-release-management-prepare-tarball-title" fill="#c5c8c6" 
text-anchor="middle" x="740" 
y="27">Command:&#160;release-management&#160;prepare-tarball</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="584.8" rx="8"/><text 
class="breeze-release-management-prepare-tarball-title" fill="#c5c8c6" 
text-anchor="middle" x="740" 
y="27">Command:&#160;release-management&#160;prepare-tarball</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -117,19 +126,22 @@
 </text><text class="breeze-release-management-prepare-tarball-r1" x="12.2" 
y="93.2" textLength="280.6" 
clip-path="url(#breeze-release-management-prepare-tarball-line-3)">Prepare&#160;source&#160;tarball.</text><text
 class="breeze-release-management-prepare-tarball-r1" x="1464" y="93.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-3)">
 </text><text class="breeze-release-management-prepare-tarball-r1" x="1464" 
y="117.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-4)">
 </text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="142" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-tarball-line-5)">╭─</text><text
 class="breeze-release-management-prepare-tarball-r5" x="24.4" y="142" 
textLength="183" 
clip-path="url(#breeze-release-management-prepare-tarball-line-5)">&#160;Tarball&#160;flags&#160;</text><text
 class="breeze-release-management-prepare-tarball-r5" x="207.4" y="142" 
textLength="1232.2" clip-path="url(#breeze-r [...]
-</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="166.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-6)">│</text><text
 class="breeze-release-management-prepare-tarball-r4" x="24.4" y="166.4" 
textLength="170.8" 
clip-path="url(#breeze-release-management-prepare-tarball-line-6)">--tarball-type</text><text
 class="breeze-release-management-prepare-tarball-r1" x="244" y="166.4" 
textLength="1195.6" clip-path="url(#breeze-release-mana [...]
-</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="190.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-7)">│</text><text
 class="breeze-release-management-prepare-tarball-r6" x="244" y="190.8" 
textLength="1195.6" 
clip-path="url(#breeze-release-management-prepare-tarball-line-7)">(apache_airflow&#160;|&#160;apache_airflow_ctl&#160;|&#160;apache_airflow_providers&#160;|&#160;apache_airflow_task_sdk&#160;|&#160;&#160;&#160;&#160;&#1
 [...]
-</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="215.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-8)">│</text><text
 class="breeze-release-management-prepare-tarball-r6" x="244" y="215.2" 
textLength="1195.6" 
clip-path="url(#breeze-release-management-prepare-tarball-line-8)">helm-chart)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
-</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="239.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-9)">│</text><text
 class="breeze-release-management-prepare-tarball-r5" x="244" y="239.6" 
textLength="1195.6" 
clip-path="url(#breeze-release-management-prepare-tarball-line-9)">[default:&#160;apache_airflow]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
-</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="264" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-10)">│</text><text
 class="breeze-release-management-prepare-tarball-r4" x="24.4" y="264" 
textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-tarball-line-10)">--version</text><text
 class="breeze-release-management-prepare-tarball-r1" x="244" y="264" 
textLength="1195.6" clip-path="url(#breeze-release-management-pr [...]
-</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="288.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-11)">│</text><text
 class="breeze-release-management-prepare-tarball-r1" x="244" y="288.4" 
textLength="1195.6" 
clip-path="url(#breeze-release-management-prepare-tarball-line-11)">of&#160;current&#160;branch&#160;will&#160;be&#160;used&#160;and&#160;version&#160;will&#160;be&#160;retrieved&#160;from&#160;there.&#160;&#160;&#160;&
 [...]
-</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="312.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-12)">│</text><text
 class="breeze-release-management-prepare-tarball-r6" x="244" y="312.8" 
textLength="1195.6" 
clip-path="url(#breeze-release-management-prepare-tarball-line-12)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
-</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="337.2" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-tarball-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-tarball-r1" x="1464" y="337.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-13)">
-</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="361.6" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-tarball-line-14)">╭─</text><text
 class="breeze-release-management-prepare-tarball-r5" x="24.4" y="361.6" 
textLength="195.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-14)">&#160;Common&#160;options&#160;</text><text
 class="breeze-release-management-prepare-tarball-r5" x="219.6" y="361.6" 
textLength="1220" clip-path="url( [...]
-</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="386" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-15)">│</text><text
 class="breeze-release-management-prepare-tarball-r4" x="24.4" y="386" 
textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-tarball-line-15)">--dry-run</text><text
 class="breeze-release-management-prepare-tarball-r7" x="158.6" y="386" 
textLength="24.4" clip-path="url(#breeze-release-management-pr [...]
-</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="410.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-16)">│</text><text
 class="breeze-release-management-prepare-tarball-r4" x="24.4" y="410.4" 
textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-tarball-line-16)">--verbose</text><text
 class="breeze-release-management-prepare-tarball-r7" x="158.6" y="410.4" 
textLength="24.4" clip-path="url(#breeze-release-managem [...]
-</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="434.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-17)">│</text><text
 class="breeze-release-management-prepare-tarball-r4" x="24.4" y="434.8" 
textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-17)">--help</text><text
 class="breeze-release-management-prepare-tarball-r7" x="158.6" y="434.8" 
textLength="24.4" clip-path="url(#breeze-release-management- [...]
-</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="459.2" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-tarball-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-tarball-r1" x="1464" y="459.2" 
textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-18)">
+</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="166.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-6)">│</text><text
 class="breeze-release-management-prepare-tarball-r4" x="24.4" y="166.4" 
textLength="170.8" 
clip-path="url(#breeze-release-management-prepare-tarball-line-6)">--tarball-type</text><text
 class="breeze-release-management-prepare-tarball-r1" x="268.4" y="166.4" 
textLength="1171.2" clip-path="url(#breeze-release-ma [...]
+</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="190.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-7)">│</text><text
 class="breeze-release-management-prepare-tarball-r6" x="268.4" y="190.8" 
textLength="1171.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-7)">(apache_airflow&#160;|&#160;apache_airflow_ctl&#160;|&#160;apache_airflow_providers&#160;|&#160;apache_airflow_task_sdk&#160;|&#160;&#160;&#160;&#160;&
 [...]
+</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="215.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-8)">│</text><text
 class="breeze-release-management-prepare-tarball-r6" x="268.4" y="215.2" 
textLength="1171.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-8)">helm-chart)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
+</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="239.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-9)">│</text><text
 class="breeze-release-management-prepare-tarball-r5" x="268.4" y="239.6" 
textLength="1171.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-9)">[default:&#160;apache_airflow]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
+</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="264" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-10)">│</text><text
 class="breeze-release-management-prepare-tarball-r4" x="24.4" y="264" 
textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-tarball-line-10)">--version</text><text
 class="breeze-release-management-prepare-tarball-r1" x="268.4" y="264" 
textLength="1171.2" clip-path="url(#breeze-release-management- [...]
+</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="288.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-11)">│</text><text
 class="breeze-release-management-prepare-tarball-r1" x="268.4" y="288.4" 
textLength="1171.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-11)">HEAD&#160;of&#160;current&#160;branch&#160;will&#160;be&#160;used&#160;and&#160;version&#160;will&#160;be&#160;retrieved&#160;from&#160;there.&#160;&
 [...]
+</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="312.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-12)">│</text><text
 class="breeze-release-management-prepare-tarball-r6" x="268.4" y="312.8" 
textLength="1171.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-12)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
+</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="337.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-13)">│</text><text
 class="breeze-release-management-prepare-tarball-r4" x="24.4" y="337.2" 
textLength="195.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-13)">--version-suffix</text><text
 class="breeze-release-management-prepare-tarball-r1" x="268.4" y="337.2" 
textLength="1171.2" clip-path="url(#breeze-releas [...]
+</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="361.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-14)">│</text><text
 class="breeze-release-management-prepare-tarball-r1" x="268.4" y="361.6" 
textLength="1171.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-14)">Note&#160;the&#160;`.`&#160;is&#160;need&#160;in&#160;`.dev0`&#160;and&#160;`.post`.&#160;Might&#160;be&#160;followed&#160;with&#160;+local_version&#
 [...]
+</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="386" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-15)">│</text><text
 class="breeze-release-management-prepare-tarball-r6" x="268.4" y="386" 
textLength="1171.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-15)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
+</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="410.4" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-tarball-line-16)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-tarball-r1" x="1464" y="410.4" 
textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-16)">
+</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="434.8" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-tarball-line-17)">╭─</text><text
 class="breeze-release-management-prepare-tarball-r5" x="24.4" y="434.8" 
textLength="195.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-17)">&#160;Common&#160;options&#160;</text><text
 class="breeze-release-management-prepare-tarball-r5" x="219.6" y="434.8" 
textLength="1220" clip-path="url( [...]
+</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="459.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-18)">│</text><text
 class="breeze-release-management-prepare-tarball-r4" x="24.4" y="459.2" 
textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-tarball-line-18)">--dry-run</text><text
 class="breeze-release-management-prepare-tarball-r7" x="158.6" y="459.2" 
textLength="24.4" clip-path="url(#breeze-release-managem [...]
+</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="483.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-19)">│</text><text
 class="breeze-release-management-prepare-tarball-r4" x="24.4" y="483.6" 
textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-tarball-line-19)">--verbose</text><text
 class="breeze-release-management-prepare-tarball-r7" x="158.6" y="483.6" 
textLength="24.4" clip-path="url(#breeze-release-managem [...]
+</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="508" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-20)">│</text><text
 class="breeze-release-management-prepare-tarball-r4" x="24.4" y="508" 
textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-20)">--help</text><text
 class="breeze-release-management-prepare-tarball-r7" x="158.6" y="508" 
textLength="24.4" clip-path="url(#breeze-release-management-prepar [...]
+</text><text class="breeze-release-management-prepare-tarball-r5" x="0" 
y="532.4" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-tarball-line-21)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-tarball-r1" x="1464" y="532.4" 
textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-tarball-line-21)">
 </text>
     </g>
     </g>
diff --git 
a/dev/breeze/doc/images/output_release-management_prepare-tarball.txt 
b/dev/breeze/doc/images/output_release-management_prepare-tarball.txt
index 87ac367f3c9..45c6248ab2c 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-tarball.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-tarball.txt
@@ -1 +1 @@
-ca7604d96851bd855df1229276d4214a
+7cb732b47aeebbb6b430cda72776a7a8
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 e58be854358..2e9564d9853 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
@@ -24,7 +24,12 @@ from pathlib import Path
 
 import click
 
-from airflow_breeze.commands.common_options import option_answer, 
option_dry_run, option_verbose
+from airflow_breeze.commands.common_options import (
+    option_answer,
+    option_dry_run,
+    option_verbose,
+    option_version_suffix,
+)
 from airflow_breeze.commands.release_management_group import release_management
 from airflow_breeze.global_constants import (
     TarBallType,
@@ -305,24 +310,25 @@ def tarball_release(
 def create_tarball_release(
     tarball_type: TarBallType,
     version: str | None,
+    version_suffix: str,
 ):
     if tarball_type == TarBallType.AIRFLOW:
-        tag = version if version else "HEAD"
+        tag = version + version_suffix if version else "HEAD"
         if not version:
             version = get_airflow_version()
             console_print(f"\n[info]Using {version} retrieved from 
airflow-core as tarball version\n")
     elif tarball_type == TarBallType.TASK_SDK:
-        tag = f"task-sdk/{version}" if version else "HEAD"
+        tag = f"task-sdk/{version + version_suffix}" if version else "HEAD"
         if not version:
             version = get_task_sdk_version()
             console_print(f"\n[info]Using {version} retrieved from task-sdk as 
tarball version\n")
     elif tarball_type == TarBallType.AIRFLOW_CTL:
-        tag = f"airflow-ctl/{version}" if version else "HEAD"
+        tag = f"airflow-ctl/{version + version_suffix}" if version else "HEAD"
         if not version:
             version = get_airflowctl_version()
             console_print(f"\n[info]Using {version} retrieved from airflow-ctl 
as tarball version\n")
     elif tarball_type == TarBallType.PROVIDERS:
-        tag = f"providers/{version}" if version else "HEAD"
+        tag = f"providers/{version + version_suffix}" if version else "HEAD"
         if not version:
             version = date.strftime(date.today(), "%Y-%m-%d")
             console_print(f"\n[info]Using current date {version} as tarball 
version\n")
@@ -610,15 +616,18 @@ def remove_old_releases(version, repo_root):
     "If not specified, the HEAD of current branch will be used and version 
will be retrieved from there.",
     envvar="VERSION",
 )
+@option_version_suffix
 @option_dry_run
 @option_verbose
 def prepare_tarball(
     tarball_type: str,
     version: str | None,
+    version_suffix: str,
 ):
     enum_tarball_type = TarBallType(tarball_type)
     create_tarball_release(
         version=version,
+        version_suffix=version_suffix,
         tarball_type=enum_tarball_type,
     )
 
@@ -712,9 +721,10 @@ def publish_release_candidate(
     if confirm_action("Create tarball?"):
         # Create the tarball
         tarball_release(
-            version=version,
+            version=version_without_rc,
             source_date_epoch=source_date_epoch,
             tarball_type=TarBallType.AIRFLOW,
+            tag=version,
         )
     # Sign the release
     sign_the_release(airflow_repo_root)
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 41802bc7a79..14f6cffb61e 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
@@ -92,7 +92,7 @@ RELEASE_MANAGEMENT_PARAMETERS: dict[str, list[dict[str, str | 
list[str]]]] = {
     "breeze release-management prepare-tarball": [
         {
             "name": "Tarball flags",
-            "options": ["--tarball-type", "--version"],
+            "options": ["--tarball-type", "--version", "--version-suffix"],
         }
     ],
     "breeze release-management prepare-task-sdk-distributions": [


Reply via email to