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]