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

jscheffl 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 6018768a31c Fix Helm Chart RC Staging Documentation Links (#55677)
6018768a31c is described below

commit 6018768a31c372ee4ced99afbe4ea151c3a0a1e8
Author: Gary Hsu <[email protected]>
AuthorDate: Mon Nov 3 00:42:49 2025 +0800

    Fix Helm Chart RC Staging Documentation Links (#55677)
    
    * fix Replace Helm Chart RC docs links with staging URLs
    
    Replace production documentation links (airflow.apache.org) with staging 
links
    (airflow.staged.apache.org) for Helm Chart release candidates.
    - Add RC version detection (rc, alpha, beta releases)
    - Modify prepare-helm-chart-tarball and prepare-helm-chart-package commands
    - Implement safe backup/restore for Chart.yaml modifications
    - Add --version-suffix option to helm chart package command
    
    * Improve Helm chart RC version handling and testing
    - Simplify RC version detection logic
    - Add RC version test case to helm-tests.yml workflow
    - Update documentation to include --version-suffix parameter usage
---
 .github/workflows/helm-tests.yml                   |   4 +
 dev/README_RELEASE_HELM_CHART.md                   |   7 +-
 ...lease-management_prepare-helm-chart-package.svg |  32 +++--
 ...lease-management_prepare-helm-chart-package.txt |   2 +-
 .../commands/release_management_commands.py        | 151 +++++++++++++--------
 .../commands/release_management_commands_config.py |   1 +
 6 files changed, 130 insertions(+), 67 deletions(-)

diff --git a/.github/workflows/helm-tests.yml b/.github/workflows/helm-tests.yml
index ae78d644e6a..b908b73e73b 100644
--- a/.github/workflows/helm-tests.yml
+++ b/.github/workflows/helm-tests.yml
@@ -122,6 +122,10 @@ jobs:
       - name: "Helm release package"
         run: >
           breeze release-management prepare-helm-chart-package --sign-email 
[email protected]
+      - name: "Helm release package (RC version)"
+        run: >
+          breeze release-management prepare-helm-chart-package --sign-email 
[email protected]
+          --version-suffix rc1
       - name: "Sign artifacts for ASF distribution"
         run: ./dev/sign.sh dist/airflow-*.tgz dist/airflow-*-source.tar.gz
         env:
diff --git a/dev/README_RELEASE_HELM_CHART.md b/dev/README_RELEASE_HELM_CHART.md
index 57c0679c269..9afdc7a78ac 100644
--- a/dev/README_RELEASE_HELM_CHART.md
+++ b/dev/README_RELEASE_HELM_CHART.md
@@ -226,9 +226,12 @@ breeze release-management prepare-helm-chart-tarball 
--version ${VERSION} --vers
 - Generate the binary Helm Chart release:
 
 ```shell
-breeze release-management prepare-helm-chart-package --sign-email 
[email protected]
+breeze release-management prepare-helm-chart-package --sign-email 
[email protected] --version-suffix ${VERSION_SUFFIX}
 ```
 
+Note: The `--version-suffix` parameter is optional but recommended for RC 
releases to ensure proper documentation
+links generation. When specified, it will generate staging documentation links 
instead of production ones.
+
 Warning: you need the `helm gpg` plugin to sign the chart (instructions to 
install it above)
 
 This should generate two files:
@@ -512,7 +515,7 @@ rm -rf dist/*
 
 ```shell
 breeze release-management prepare-helm-chart-tarball --version-suffix rc1 
--ignore-version-check --skip-tagging
-breeze release-management prepare-helm-chart-package
+breeze release-management prepare-helm-chart-package --version-suffix rc1
 ```
 
 5. Compare the produced tarball binary with ones in SVN:
diff --git 
a/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.svg
 
b/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.svg
index 996c438385a..f07b12057bd 100644
--- 
a/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.svg
+++ 
b/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 367.2" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 440.4" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath 
id="breeze-release-management-prepare-helm-chart-package-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="316.2" />
+      <rect x="0" y="0" width="1463.0" height="389.4" />
     </clipPath>
     <clipPath id="breeze-release-management-prepare-helm-chart-package-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -81,9 +81,18 @@
 <clipPath id="breeze-release-management-prepare-helm-chart-package-line-11">
     <rect x="0" y="269.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-release-management-prepare-helm-chart-package-line-12">
+    <rect x="0" y="294.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-prepare-helm-chart-package-line-13">
+    <rect x="0" y="318.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-prepare-helm-chart-package-line-14">
+    <rect x="0" y="343.1" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="365.2" rx="8"/><text 
class="breeze-release-management-prepare-helm-chart-package-title" 
fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;release-management&#160;prepare-helm-chart-package</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="438.4" rx="8"/><text 
class="breeze-release-management-prepare-helm-chart-package-title" 
fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;release-management&#160;prepare-helm-chart-package</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -99,13 +108,16 @@
 </text><text class="breeze-release-management-prepare-helm-chart-package-r1" 
x="12.2" y="93.2" textLength="341.6" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-3)">Prepares&#160;helm&#160;chart&#160;package.</text><text
 class="breeze-release-management-prepare-helm-chart-package-r1" x="1464" 
y="93.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-3)">
 </text><text class="breeze-release-management-prepare-helm-chart-package-r1" 
x="1464" y="117.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-4)">
 </text><text class="breeze-release-management-prepare-helm-chart-package-r5" 
x="0" y="142" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-5)">╭─</text><text
 class="breeze-release-management-prepare-helm-chart-package-r5" x="24.4" 
y="142" textLength="183" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-5)">&#160;Package&#160;flags&#160;</text><text
 class="breeze-release-management-prepare-helm-chart-package-r5" x="207. [...]
-</text><text class="breeze-release-management-prepare-helm-chart-package-r5" 
x="0" y="166.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-6)">│</text><text
 class="breeze-release-management-prepare-helm-chart-package-r4" x="24.4" 
y="166.4" textLength="146.4" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-6)">--sign-email</text><text
 class="breeze-release-management-prepare-helm-chart-package-r1" x="219.6" 
y="166.4"  [...]
-</text><text class="breeze-release-management-prepare-helm-chart-package-r5" 
x="0" y="190.8" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-7)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-helm-chart-package-r1" x="1464" 
y="190.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package- [...]
-</text><text class="breeze-release-management-prepare-helm-chart-package-r5" 
x="0" y="215.2" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-8)">╭─</text><text
 class="breeze-release-management-prepare-helm-chart-package-r5" x="24.4" 
y="215.2" textLength="195.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-8)">&#160;Common&#160;options&#160;</text><text
 class="breeze-release-management-prepare-helm-chart-package-r5"  [...]
-</text><text class="breeze-release-management-prepare-helm-chart-package-r5" 
x="0" y="239.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-9)">│</text><text
 class="breeze-release-management-prepare-helm-chart-package-r4" x="24.4" 
y="239.6" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-9)">--dry-run</text><text
 class="breeze-release-management-prepare-helm-chart-package-r7" x="158.6" 
y="239.6" tex [...]
-</text><text class="breeze-release-management-prepare-helm-chart-package-r5" 
x="0" y="264" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-10)">│</text><text
 class="breeze-release-management-prepare-helm-chart-package-r4" x="24.4" 
y="264" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-10)">--verbose</text><text
 class="breeze-release-management-prepare-helm-chart-package-r7" x="158.6" 
y="264" textLen [...]
-</text><text class="breeze-release-management-prepare-helm-chart-package-r5" 
x="0" y="288.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-11)">│</text><text
 class="breeze-release-management-prepare-helm-chart-package-r4" x="24.4" 
y="288.4" textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-11)">--help</text><text
 class="breeze-release-management-prepare-helm-chart-package-r7" x="158.6" 
y="288.4" textL [...]
-</text><text class="breeze-release-management-prepare-helm-chart-package-r5" 
x="0" y="312.8" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-helm-chart-package-r1" x="1464" 
y="312.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package [...]
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" 
x="0" y="166.4" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-6)">│</text><text
 class="breeze-release-management-prepare-helm-chart-package-r4" x="24.4" 
y="166.4" textLength="146.4" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-6)">--sign-email</text><text
 class="breeze-release-management-prepare-helm-chart-package-r1" x="268.4" 
y="166.4"  [...]
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" 
x="0" y="190.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-7)">│</text><text
 class="breeze-release-management-prepare-helm-chart-package-r4" x="24.4" 
y="190.8" textLength="195.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-7)">--version-suffix</text><text
 class="breeze-release-management-prepare-helm-chart-package-r1" x="268.4" 
y="190 [...]
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" 
x="0" y="215.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-8)">│</text><text
 class="breeze-release-management-prepare-helm-chart-package-r1" x="268.4" 
y="215.2" textLength="1171.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-8)">replaced&#160;with&#160;staging&#160;URLs.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" 
x="0" y="239.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-9)">│</text><text
 class="breeze-release-management-prepare-helm-chart-package-r6" x="268.4" 
y="239.6" textLength="1171.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-9)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" 
x="0" y="264" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-10)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-helm-chart-package-r1" x="1464" 
y="264" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-10)">
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" 
x="0" y="288.4" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-11)">╭─</text><text
 class="breeze-release-management-prepare-helm-chart-package-r5" x="24.4" 
y="288.4" textLength="195.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-11)">&#160;Common&#160;options&#160;</text><text
 class="breeze-release-management-prepare-helm-chart-package-r5 [...]
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" 
x="0" y="312.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-12)">│</text><text
 class="breeze-release-management-prepare-helm-chart-package-r4" x="24.4" 
y="312.8" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-12)">--dry-run</text><text
 class="breeze-release-management-prepare-helm-chart-package-r7" x="158.6" 
y="312.8" t [...]
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" 
x="0" y="337.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-13)">│</text><text
 class="breeze-release-management-prepare-helm-chart-package-r4" x="24.4" 
y="337.2" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-13)">--verbose</text><text
 class="breeze-release-management-prepare-helm-chart-package-r7" x="158.6" 
y="337.2" t [...]
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" 
x="0" y="361.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-14)">│</text><text
 class="breeze-release-management-prepare-helm-chart-package-r4" x="24.4" 
y="361.6" textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-14)">--help</text><text
 class="breeze-release-management-prepare-helm-chart-package-r7" x="158.6" 
y="361.6" textL [...]
+</text><text class="breeze-release-management-prepare-helm-chart-package-r5" 
x="0" y="386" textLength="1464" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-15)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-release-management-prepare-helm-chart-package-r1" x="1464" 
y="386" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-helm-chart-package-line-15)">
 </text>
     </g>
     </g>
diff --git 
a/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.txt
 
b/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.txt
index 6051dbc2d79..73731275785 100644
--- 
a/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.txt
+++ 
b/dev/breeze/doc/images/output_release-management_prepare-helm-chart-package.txt
@@ -1 +1 @@
-27169c83fcbcca907a0b32a5c4faeb48
+4d19d7c6652330646ee94bf409c14787
diff --git 
a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py 
b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index f7e3e150ce5..641c7dd6992 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -3632,6 +3632,18 @@ def prepare_helm_chart_tarball(
     values_content = yaml.safe_load(VALUES_YAML_FILE.read_text())
     airflow_version_in_values = values_content["airflowVersion"]
     default_airflow_tag_in_values = values_content["defaultAirflowTag"]
+
+    # Check if this is an RC version and replace documentation links with 
staging URLs
+    is_rc_version = version_suffix and "rc" in version_suffix.lower()
+    if is_rc_version:
+        get_console().print(
+            f"[info]RC version detected ({version_suffix}). Replacing 
documentation links with staging URLs.[/]"
+        )
+        # Replace production URLs with staging URLs for RC versions
+        chart_yaml_file_content = chart_yaml_file_content.replace(
+            "https://airflow.apache.org/";, "https://airflow.staged.apache.org/";
+        )
+        get_console().print("[success]Documentation links updated to staging 
environment for RC version.[/]")
     if ignore_version_check:
         if not version:
             version = version_in_chart
@@ -3763,9 +3775,15 @@ def prepare_helm_chart_tarball(
     envvar="SIGN_EMAIL",
     default="",
 )
[email protected](
+    "--version-suffix",
+    help="Version suffix used to determine if RC version. For RC versions, 
documentation links will be replaced with staging URLs.",
+    default="",
+    envvar="VERSION_SUFFIX",
+)
 @option_dry_run
 @option_verbose
-def prepare_helm_chart_package(sign_email: str):
+def prepare_helm_chart_package(sign_email: str, version_suffix: str):
     import yaml
 
     from airflow_breeze.utils.kubernetes_utils import (
@@ -3774,71 +3792,96 @@ def prepare_helm_chart_package(sign_email: str):
         sync_virtualenv,
     )
 
-    chart_yaml_dict = yaml.safe_load(CHART_YAML_FILE.read_text())
-    version = chart_yaml_dict["version"]
-    result = sync_virtualenv(force_venv_setup=False)
-    if result.returncode != 0:
-        sys.exit(result.returncode)
-    make_sure_helm_installed()
-    get_console().print(f"[info]Packaging the chart for Helm Chart 
{version}[/]")
-    k8s_env = os.environ.copy()
-    k8s_env["PATH"] = str(K8S_BIN_BASE_PATH) + os.pathsep + k8s_env["PATH"]
-    # Tar on modern unix options requires --wildcards parameter to work with 
globs
-    # See https://github.com/technosophos/helm-gpg/issues/1
-    k8s_env["TAR_OPTIONS"] = "--wildcards"
-    archive_name = f"airflow-{version}.tgz"
-    OUT_PATH.mkdir(parents=True, exist_ok=True)
-    result = run_command(
-        cmd=["helm", "package", "chart", "--dependency-update", 
"--destination", OUT_PATH.as_posix()],
-        env=k8s_env,
-        check=False,
-    )
-    if result.returncode != 0:
-        get_console().print("[error]Error packaging the chart[/]")
-        sys.exit(result.returncode)
-    AIRFLOW_DIST_PATH.mkdir(parents=True, exist_ok=True)
-    final_archive = AIRFLOW_DIST_PATH / archive_name
-    final_archive.unlink(missing_ok=True)
-    source_archive = OUT_PATH / archive_name
-    result = repack_deterministically(
-        source_archive=source_archive,
-        dest_archive=final_archive,
-        prepend_path=None,
-        timestamp=get_source_date_epoch(CHART_DIR),
-    )
-    if result.returncode != 0:
+    # Check if this is an RC version and temporarily replace documentation 
links
+    chart_yaml_backup = None
+    is_rc_version = version_suffix and "rc" in version_suffix.lower()
+
+    if is_rc_version:
         get_console().print(
-            f"[error]Error repackaging package for Helm Chart from 
{source_archive} to {final_archive}[/]"
+            f"[info]RC version detected ({version_suffix}). Temporarily 
replacing documentation links with staging URLs for packaging.[/]"
         )
-        sys.exit(result.returncode)
-    else:
-        get_console().print(f"[success]Package created in {final_archive}[/]")
-    if sign_email:
-        get_console().print(f"[info]Signing the package with {sign_email}[/]")
-        prov_file = final_archive.with_suffix(".tgz.prov")
-        if prov_file.exists():
-            get_console().print(f"[warning]Removing existing {prov_file}[/]")
-            prov_file.unlink()
-        result = run_command(
-            cmd=["helm", "gpg", "sign", "-u", sign_email, archive_name],
-            cwd=AIRFLOW_DIST_PATH.as_posix(),
-            env=k8s_env,
-            check=False,
+        # Backup original content
+        chart_yaml_backup = CHART_YAML_FILE.read_text()
+        # Replace production URLs with staging URLs for RC versions
+        chart_yaml_content = chart_yaml_backup.replace(
+            "https://airflow.apache.org/";, "https://airflow.staged.apache.org/";
+        )
+        CHART_YAML_FILE.write_text(chart_yaml_content)
+        get_console().print(
+            "[success]Documentation links temporarily updated to staging 
environment for RC version packaging.[/]"
         )
+
+    try:
+        chart_yaml_dict = yaml.safe_load(CHART_YAML_FILE.read_text())
+        version = chart_yaml_dict["version"]
+        result = sync_virtualenv(force_venv_setup=False)
         if result.returncode != 0:
-            get_console().print("[error]Error signing the chart[/]")
             sys.exit(result.returncode)
+        make_sure_helm_installed()
+        get_console().print(f"[info]Packaging the chart for Helm Chart 
{version}[/]")
+        k8s_env = os.environ.copy()
+        k8s_env["PATH"] = str(K8S_BIN_BASE_PATH) + os.pathsep + k8s_env["PATH"]
+        # Tar on modern unix options requires --wildcards parameter to work 
with globs
+        # See https://github.com/technosophos/helm-gpg/issues/1
+        k8s_env["TAR_OPTIONS"] = "--wildcards"
+        archive_name = f"airflow-{version}.tgz"
+        OUT_PATH.mkdir(parents=True, exist_ok=True)
         result = run_command(
-            cmd=["helm", "gpg", "verify", archive_name],
-            cwd=AIRFLOW_DIST_PATH.as_posix(),
+            cmd=["helm", "package", "chart", "--dependency-update", 
"--destination", OUT_PATH.as_posix()],
             env=k8s_env,
             check=False,
         )
         if result.returncode != 0:
-            get_console().print("[error]Error signing the chart[/]")
+            get_console().print("[error]Error packaging the chart[/]")
+            sys.exit(result.returncode)
+        AIRFLOW_DIST_PATH.mkdir(parents=True, exist_ok=True)
+        final_archive = AIRFLOW_DIST_PATH / archive_name
+        final_archive.unlink(missing_ok=True)
+        source_archive = OUT_PATH / archive_name
+        result = repack_deterministically(
+            source_archive=source_archive,
+            dest_archive=final_archive,
+            prepend_path=None,
+            timestamp=get_source_date_epoch(CHART_DIR),
+        )
+        if result.returncode != 0:
+            get_console().print(
+                f"[error]Error repackaging package for Helm Chart from 
{source_archive} to {final_archive}[/]"
+            )
             sys.exit(result.returncode)
         else:
-            get_console().print(f"[success]Chart signed - the {prov_file} file 
created.[/]")
+            get_console().print(f"[success]Package created in 
{final_archive}[/]")
+        if sign_email:
+            get_console().print(f"[info]Signing the package with 
{sign_email}[/]")
+            prov_file = final_archive.with_suffix(".tgz.prov")
+            if prov_file.exists():
+                get_console().print(f"[warning]Removing existing 
{prov_file}[/]")
+                prov_file.unlink()
+            result = run_command(
+                cmd=["helm", "gpg", "sign", "-u", sign_email, archive_name],
+                cwd=AIRFLOW_DIST_PATH.as_posix(),
+                env=k8s_env,
+                check=False,
+            )
+            if result.returncode != 0:
+                get_console().print("[error]Error signing the chart[/]")
+                sys.exit(result.returncode)
+            result = run_command(
+                cmd=["helm", "gpg", "verify", archive_name],
+                cwd=AIRFLOW_DIST_PATH.as_posix(),
+                env=k8s_env,
+                check=False,
+            )
+            if result.returncode != 0:
+                get_console().print("[error]Error signing the chart[/]")
+                sys.exit(result.returncode)
+            else:
+                get_console().print(f"[success]Chart signed - the {prov_file} 
file created.[/]")
+    finally:
+        # Restore original Chart.yaml content if it was modified for RC version
+        if is_rc_version and chart_yaml_backup:
+            CHART_YAML_FILE.write_text(chart_yaml_backup)
+            get_console().print("[info]Restored original Chart.yaml content 
after packaging.[/]")
 
 
 def generate_issue_content(
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 3fecd1a4a8c..7d282ff7036 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
@@ -136,6 +136,7 @@ RELEASE_MANAGEMENT_PARAMETERS: dict[str, list[dict[str, str 
| list[str]]]] = {
             "name": "Package flags",
             "options": [
                 "--sign-email",
+                "--version-suffix",
             ],
         }
     ],

Reply via email to