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 292d06296d8 [v3-1-test] Also remove old -source artifacts from SVN
release folder (#58481) (#58525)
292d06296d8 is described below
commit 292d06296d8a3fc3d97fce2731435f5aa2bf9d2d
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Nov 20 17:07:34 2025 +0100
[v3-1-test] Also remove old -source artifacts from SVN release folder
(#58481) (#58525)
As a rule (described in
https://www.apache.org/legal/release-policy.html#when-to-archive)
we should only keep latest release of actively developed code in
downloads.apache.org. Since the -source artifact contains "all"
latest code of the providers, we are fine to delete all the
past -source artifacts, because they contain the source code
for all providers being voted.
We already had the code that cleaned regular artifact old versions,
but -source artifacts were skipped, with this change old -source
artifacts will also be removed.
(cherry picked from commit 468a41aac51f6cf54645a9c4e17b9dc7a7670ea5)
Co-authored-by: Jarek Potiuk <[email protected]>
---
.../commands/release_management_commands.py | 46 ++++++++++++++++++++--
1 file changed, 42 insertions(+), 4 deletions(-)
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 5ed7ee8cb36..518015da477 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -1961,7 +1961,7 @@ def clean_old_provider_artifacts(
directory: str,
):
"""Cleans up the old airflow providers artifacts in order to maintain
- only one provider version in the release SVN folder"""
+ only one provider version in the release SVN folder and one -source
artifact."""
cleanup_suffixes = [
".tar.gz",
".tar.gz.sha512",
@@ -1977,9 +1977,10 @@ def clean_old_provider_artifacts(
os.chdir(directory)
for file in glob.glob(f"*{suffix}"):
- if "-source" in file:
- continue
- versioned_file = split_version_and_suffix(file, suffix)
+ if "-source.tar.gz" in file:
+ versioned_file = split_date_version_and_suffix(file, "-source"
+ suffix)
+ else:
+ versioned_file = split_version_and_suffix(file, suffix)
package_types_dicts[versioned_file.type].append(versioned_file)
for package_types in package_types_dicts.values():
@@ -3113,6 +3114,43 @@ def split_version_and_suffix(file_name: str, suffix:
str) -> VersionedFile:
)
+def split_date_version_and_suffix(file_name: str, suffix: str) ->
VersionedFile:
+ """Split file name with date-based version (YYYY-MM-DD format) and suffix.
+
+ Example: apache_airflow_providers-2025-11-18-source.tar.gz
+ """
+ from packaging.version import Version
+
+ no_suffix_file = file_name[: -len(suffix)]
+ # Date format is YYYY-MM-DD, so we need to extract last 3 parts
+ parts = no_suffix_file.rsplit("-", 3)
+ if len(parts) != 4:
+ raise ValueError(f"Invalid date-versioned file name format:
{file_name}")
+
+ no_version_file = parts[0]
+ date_version = f"{parts[1]}-{parts[2]}-{parts[3]}"
+
+ # Validate date format
+ try:
+ datetime.strptime(date_version, "%Y-%m-%d")
+ except ValueError as e:
+ raise ValueError(f"Invalid date format in file name {file_name}: {e}")
+
+ no_version_file = no_version_file.replace("_", "-")
+
+ # Convert date to a comparable version format (YYYYMMDD as integer-like
version)
+ comparable_date_str = date_version.replace("-", ".")
+
+ return VersionedFile(
+ base=no_version_file + "-",
+ version=date_version,
+ suffix=suffix,
+ type=no_version_file + "-" + suffix,
+ comparable_version=Version(comparable_date_str),
+ file_name=file_name,
+ )
+
+
PYTHON_CLIENT_DIR_PATH = AIRFLOW_ROOT_PATH / "clients" / "python"
PYTHON_CLIENT_DIST_DIR_PATH = PYTHON_CLIENT_DIR_PATH / "dist"
PYTHON_CLIENT_TMP_DIR = PYTHON_CLIENT_DIR_PATH / "tmp"