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

sbp pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-release.git


The following commit(s) were added to refs/heads/main by this push:
     new 46091f0  Fix some bugs with promoting releases
46091f0 is described below

commit 46091f02c5b2c9840190d8539bba5d6e9e58d47e
Author: Sean B. Palmer <[email protected]>
AuthorDate: Tue Apr 22 15:03:37 2025 +0100

    Fix some bugs with promoting releases
---
 atr/revision.py         |  6 ++++--
 atr/routes/candidate.py |  4 +++-
 atr/routes/preview.py   | 11 +++++++++--
 3 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/atr/revision.py b/atr/revision.py
index 352e140..3c83bde 100644
--- a/atr/revision.py
+++ b/atr/revision.py
@@ -33,7 +33,7 @@ _LOGGER = logging.getLogger(__name__)
 
 @contextlib.asynccontextmanager
 async def create_and_manage(
-    project_name: str, version_name: str, asf_uid: str, preview: bool = False
+    project_name: str, version_name: str, asf_uid: str, preview: bool = False, 
create_directory: bool = True
 ) -> AsyncGenerator[tuple[pathlib.Path, str]]:
     """Manage the creation and symlinking of a mutable release revision."""
     if preview is False:
@@ -64,9 +64,11 @@ async def create_and_manage(
         if parent_revision_dir:
             _LOGGER.info(f"Creating new revision {new_revision_name} by hard 
linking from {parent_revision_id}")
             await util.create_hard_link_clone(parent_revision_dir, 
new_revision_dir)
-        else:
+        elif create_directory:
             _LOGGER.info(f"Creating new empty revision directory 
{new_revision_name}")
             await aiofiles.os.makedirs(new_revision_dir)
+        else:
+            _LOGGER.info(f"Creating new empty revision with no directory for 
{new_revision_name}")
 
         # Yield control to the block within "async with"
         yield new_revision_dir, new_revision_name
diff --git a/atr/routes/candidate.py b/atr/routes/candidate.py
index dde50b9..ff34561 100644
--- a/atr/routes/candidate.py
+++ b/atr/routes/candidate.py
@@ -265,7 +265,9 @@ async def _resolve_post_files(project_name: str, release: 
models.Release, vote_r
             return
 
     # The vote passed, so promote the release candidate to the release preview 
directory
-    async with revision.create_and_manage(project_name, release.version, 
asf_uid, preview=True) as (
+    async with revision.create_and_manage(
+        project_name, release.version, asf_uid, preview=True, 
create_directory=False
+    ) as (
         new_revision_dir,
         _new_revision_name,
     ):
diff --git a/atr/routes/preview.py b/atr/routes/preview.py
index b6761c1..65924d6 100644
--- a/atr/routes/preview.py
+++ b/atr/routes/preview.py
@@ -116,17 +116,24 @@ async def announce(session: routes.CommitterSession) -> 
str | response.Response:
                     # Impossible, but to satisfy the type checkers
                     return await session.redirect(announce, error="This 
release does not have a revision")
 
-                # Announce it
-                source = str(util.get_release_preview_dir() / project_name / 
version_name / release.revision)
+                source_base = util.get_release_preview_dir() / project_name / 
version_name
+                source = str(source_base / release.revision)
                 target = str(util.get_release_dir() / project_name / 
version_name)
                 if await aiofiles.os.path.exists(target):
                     return await session.redirect(announce, error="Release 
already exists")
 
+                # Update the database
                 release.phase = models.ReleasePhase.RELEASE
                 release.revision = None
                 await data.commit()
+
+                # Move the revision directory
                 await aioshutil.move(source, target)
 
+                # Remove the rest of the preview history
+                # This must come after moving the revision directory, 
otherwise it will be removed too
+                await aioshutil.rmtree(str(source_base))
+
                 return await session.redirect(routes_release.releases, 
success="Preview successfully announced")
 
             except Exception as e:


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to