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

potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 1d198a159c7 Update release process for source tarballs prepared during 
release (#57364)
1d198a159c7 is described below

commit 1d198a159c7c814fc31a527a5767eaab55b49288
Author: Jarek Potiuk <[email protected]>
AuthorDate: Mon Oct 27 22:25:18 2025 +0100

    Update release process for source tarballs prepared during release (#57364)
    
    The updated airflow-ctl release process had some small issues related
    to source tarball created - which turned out to be just errors in
    matching version to tag. When we prepared source tarball we were
    using the "x.y.z" tag always - no matter which distribution was
    created - this was fine for Airflow but not fine for other
    distributions:
    
    * airflow-ctl/x.y.z
    * task-sdk/x.y.z
    * providers/YYYY-MM-DD
    
    Also names of the source tarballs had extra `apache-' prefix after
    we switched to passing actual distribution name as parameter.
    
    This PR fixes the commands used to prepare tarballs:
    
    * proper tag is used for all distributions
    * documentation about using those tags is updated
    * release documentation for airflow-ctl is updated to have proper
      links
    * release documentation for providers is updated to add the new
      way of tagging the providers with `providers/YYYY-MM-DD` tag
      additionally to individual provider's tags (to denote the date
      of provider's wave)
    
    Fixes: #47343
---
 dev/README_RELEASE_AIRFLOWCTL.md                   | 26 ++++++++++--------
 dev/README_RELEASE_PROVIDERS.md                    | 13 ++++++---
 .../commands/release_candidate_command.py          | 32 +++++++++++++---------
 .../commands/release_management_commands.py        | 21 +++++++++++---
 4 files changed, 59 insertions(+), 33 deletions(-)

diff --git a/dev/README_RELEASE_AIRFLOWCTL.md b/dev/README_RELEASE_AIRFLOWCTL.md
index 6664fe2d083..2258b7c4aab 100644
--- a/dev/README_RELEASE_AIRFLOWCTL.md
+++ b/dev/README_RELEASE_AIRFLOWCTL.md
@@ -346,21 +346,21 @@ Body:
 
 ```shell script
 cat <<EOF
-The release candidate for *Apache airflowctl** :  ${VERSION_RC} is now 
available for testing!
+The release candidate for **Apache Airflow Ctl**: ${VERSION_RC}  is now 
available for testing!
 
-This email is calling for a vote on the release, which will last at least until
-*October 30, 2025* and until 3 binding +1 votes have been received.
+This email is calling for a vote on the release, which will last at least 
until the
+DATE_HERE and until 3 binding +1 votes have been received.
 
 Consider this my +1 non-binding vote.
 
-airflowctl ${VERSION_RC} is available at: 
https://dist.apache.org/repos/dist/dev/airflow/airflow-ctl/${VERSION_RC}/
+The apache-airflow-ctl ${VERSION_RC} package is available at: 
https://dist.apache.org/repos/dist/dev/airflow/airflow-ctl/${VERSION_RC}/
 
-"airflowctl" package:
+The "airflowctl" package:
 
-   - *airflowctl-${VERSION}-source.tar.gz* is a source release that comes
+   - *apache_airfow_ctl-${VERSION}-source.tar.gz* is a source release that 
comes
      with INSTALL instructions.
-   - *airflowctl-${VERSION}.tar.gz* is the binary Python "sdist" release.
-   - *airflowctl-${VERSION}-py3-none-any.whl* is the binary Python wheel 
"binary" release.
+   - *apache_airfow_ctl-${VERSION}.tar.gz* is the binary Python "sdist" 
release.
+   - *apache_airfow_ctl-${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
 
@@ -377,22 +377,24 @@ The test procedure for PMC members is described in: 
https://github.com/apache/ai
 The test procedure for contributors and members of the community who would 
like to test this RC is described in:
 
https://github.com/apache/airflow/blob/main/dev/README_RELEASE_AIRFLOWCTL.md#verify-the-release-candidate-by-contributors
 
-Please note that the version number excludes the 'rcX' string, so it's now 
simply ${VERSION} for the airflowctl package.
+Please note that the version number excludes the 'rcX' string, so it's now 
simply ${VERSION} for the apache-airflow-ctl package.
 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/airflowctl/${VERSION}
+*Docs* (for preview): 
https://airflow.staged.apache.org/docs/apache-airflow-ctl/${VERSION}/index.html
 
 *Release Notes*: 
https://github.com/apache/airflow/blob/airflow-ctl/${VERSION_RC}/airflow-ctl/RELEASE_NOTES.rst
 
 *Testing Instructions using PyPI*:
 
+The packages are available in PyPI: 
https://pypi.org/project/apache-airflow-ctl/${VERSION_RC}/
+
 You can build a virtualenv that installs this and other required packages like 
this:
 
 uv venv
-uv pip install -U airflowctl==${VERSION_RC}
+uv pip install -U apache-airflow-ctl==${VERSION_RC}
 
 Regards,
-<Your namee>
+<Your name>
 
 EOF
 ```
diff --git a/dev/README_RELEASE_PROVIDERS.md b/dev/README_RELEASE_PROVIDERS.md
index aca9c26c502..4e71f6eb56f 100644
--- a/dev/README_RELEASE_PROVIDERS.md
+++ b/dev/README_RELEASE_PROVIDERS.md
@@ -840,13 +840,11 @@ How to verify it:
 cd "${AIRFLOW_REPO_ROOT}"
 ```
 
-2) Check out one of the tags for the release. Pick one of the 
provider-specific tags that are part
-   of the release wave. Assume your remote to apache repo is `apache` - then 
the right set of
-   commands are:
+2) Check out the ``providers/YYYY-MM-DD`` tag:
 
 ```shell
 git fetch apache --tags
-git checkout providers-amazon/9.1.0rc1
+git checkout providers/2025-10-20
 ```
 
 3) Remove all the packages you have in dist folder
@@ -1347,6 +1345,13 @@ If you want to disable this behaviour, set the env 
**CLEAN_LOCAL_TAGS** to false
 breeze release-management tag-providers
 ```
 
+The command should output all the tags it created. At the end it should also 
print the general tag
+applied for this provider's release wave - with current date in the format of:
+
+```
+providers/YYYY-MM-DD
+```
+
 ## Publish documentation
 
 Documentation is an essential part of the product and should be made available 
to users.
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 406fb9c3609..10eb1b1d048 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
@@ -256,11 +256,11 @@ def tarball_release(
     distribution_name: DistributionType,
     tag: str | None = None,
 ):
-    console_print(f"[info]Creating tarball for Apache 
{distribution_name.value} {version}")
+    console_print(f"[info]Creating tarball for {distribution_name.value} 
{version}")
     shutil.rmtree(OUT_PATH, ignore_errors=True)
     OUT_PATH.mkdir(exist_ok=True)
     AIRFLOW_DIST_PATH.mkdir(exist_ok=True)
-    archive_name = 
f"apache-{distribution_name.value}-{version_without_rc}-source.tar.gz"
+    archive_name = 
f"{distribution_name.value}-{version_without_rc}-source.tar.gz"
     temporary_archive = OUT_PATH / archive_name
     result = run_command(
         [
@@ -270,7 +270,7 @@ def tarball_release(
             "archive",
             "--format=tar.gz",
             f"{version if tag is None else tag}",
-            f"--prefix=apache-{distribution_name.value}-{version_without_rc}/",
+            f"--prefix={distribution_name.value}-{version_without_rc}/",
             "-o",
             temporary_archive.as_posix(),
         ],
@@ -308,19 +308,25 @@ def create_tarball_release(
         if distribution_name == DistributionType.AIRFLOW_CORE:
             version = get_airflow_version()
         elif distribution_name == DistributionType.TASK_SDK:
-            version = get_task_sdk_version()
+            version = f"task-sdk/{get_task_sdk_version()}"
         elif distribution_name == DistributionType.AIRFLOW_CTL:
-            version = get_airflowctl_version()
+            version = f"airflow-ctl/{get_airflowctl_version()}"
         elif distribution_name == DistributionType.PROVIDERS:
-            version = get_airflow_version()
-    distribution_version = Version(version)
-    source_date_epoch = get_source_date_epoch(AIRFLOW_ROOT_PATH)
-    version_without_rc = (
-        distribution_version.base_version
-        if distribution_name != DistributionType.PROVIDERS
-        else f"{datetime.now().strftime('%Y-%m-%d')}"
-    )
+            version = f"providers/{datetime.now().strftime('%Y-%m-%d')}"
+    else:
+        if distribution_name == DistributionType.TASK_SDK:
+            version = f"task-sdk/{version}"
+        elif distribution_name == DistributionType.AIRFLOW_CTL:
+            version = f"airflow-ctl/{version}"
+        elif distribution_name == DistributionType.PROVIDERS:
+            version = f"providers/{version}"
+    if distribution_name != DistributionType.PROVIDERS:
+        distribution_version = Version(version.split("/")[-1])
+        version_without_rc = distribution_version.base_version
+    else:
+        version_without_rc = version.split("/")[-1]
 
+    source_date_epoch = get_source_date_epoch(AIRFLOW_ROOT_PATH)
     # Create the tarball
     tarball_release(
         version=version,
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 e951b37e952..d4b422b9a08 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -32,7 +32,7 @@ import time
 from collections import defaultdict
 from collections.abc import Generator, Iterable
 from copy import deepcopy
-from datetime import date, datetime
+from datetime import datetime
 from enum import Enum
 from functools import partial
 from multiprocessing import Pool
@@ -1317,6 +1317,8 @@ def tag_providers(
         except subprocess.CalledProcessError:
             pass
 
+    release_date = datetime.now().strftime("%Y-%m-%d")
+
     if found_remote is None:
         raise ValueError("Could not find remote configured to push to 
apache/airflow")
 
@@ -1328,15 +1330,26 @@ def tag_providers(
                 provider = f"providers-{match.group(1).replace('_', '-')}"
                 tag = f"{provider}/{match.group(2)}"
                 try:
+                    get_console().print(f"[info]Creating tag: {tag}")
                     run_command(
-                        ["git", "tag", tag, "-m", f"Release {date.today()} of 
providers"],
+                        ["git", "tag", tag, "-m", f"Release {release_date} of 
providers"],
                         check=True,
                     )
                     tags.append(tag)
-                except subprocess.CalledProcessError:
+                except subprocess.CalledProcessError as e:
+                    get_console().print(f"[warning]Failed to create {tag}: 
{e}")
                     pass
-
+    providers_date_tag = f"providers/{release_date}"
     if tags:
+        run_command(
+            ["git", "tag", providers_date_tag, "-m", f"Release {release_date} 
of providers"],
+            check=True,
+        )
+        get_console().print()
+        get_console().print("\n[info]The providers release have been tagged 
with:[/]")
+        get_console().print(providers_date_tag)
+        get_console().print()
+        tags.append(providers_date_tag)
         try:
             push_result = run_command(
                 ["git", "push", found_remote, *tags],

Reply via email to