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 5db6a14  Migrate the remaining use of the previous code to start a vote
5db6a14 is described below

commit 5db6a14d8ad3ae695661035a35cd1e3d8f40e747
Author: Sean B. Palmer <[email protected]>
AuthorDate: Fri Sep 5 16:47:01 2025 +0100

    Migrate the remaining use of the previous code to start a vote
---
 atr/routes/resolve.py | 33 ++++++++++++++------------
 atr/routes/voting.py  | 64 ---------------------------------------------------
 2 files changed, 18 insertions(+), 79 deletions(-)

diff --git a/atr/routes/resolve.py b/atr/routes/resolve.py
index 2e56625..0705112 100644
--- a/atr/routes/resolve.py
+++ b/atr/routes/resolve.py
@@ -29,7 +29,7 @@ import atr.routes as routes
 import atr.routes.compose as compose
 import atr.routes.finish as finish
 import atr.routes.vote as vote
-import atr.routes.voting as voting
+import atr.storage as storage
 import atr.tabulate as tabulate
 import atr.tasks.message as message
 import atr.template as template
@@ -332,20 +332,23 @@ async def _resolve_vote(
             revision_number = release.latest_revision_number
             if revision_number is None:
                 raise ValueError("Release has no revision number")
-            await voting.start_vote(
-                email_to=incubator_vote_address,
-                permitted_recipients=[incubator_vote_address],
-                project_name=release.project.name,
-                version_name=release.version,
-                selected_revision_number=revision_number,
-                session=session,
-                
vote_duration_choice=latest_vote_task.task_args["vote_duration"],
-                subject_data=f"[VOTE] Release {release.project.display_name} 
{release.version}",
-                body_data=await 
construct.start_vote_default(release.project.name),
-                data=data,
-                release=release,
-                promote=False,
-            )
+            if release.committee is None:
+                raise ValueError("Project has no committee")
+            async with 
storage.write_as_committee_member(release.committee.name) as wacm:
+                await wacm.vote.start(
+                    email_to=incubator_vote_address,
+                    permitted_recipients=[incubator_vote_address],
+                    project_name=release.project.name,
+                    version_name=release.version,
+                    selected_revision_number=revision_number,
+                    asf_uid=session.uid,
+                    asf_fullname=session.fullname,
+                    
vote_duration_choice=latest_vote_task.task_args["vote_duration"],
+                    subject_data=f"[VOTE] Release 
{release.project.display_name} {release.version}",
+                    body_data=await 
construct.start_vote_default(release.project.name),
+                    release=release,
+                    promote=False,
+                )
             success_message = "Project PPMC vote marked as passed, and 
Incubator PMC vote automatically started"
         elif vote_result == "passed":
             release.phase = sql.ReleasePhase.RELEASE_PREVIEW
diff --git a/atr/routes/voting.py b/atr/routes/voting.py
index 66b119a..7691814 100644
--- a/atr/routes/voting.py
+++ b/atr/routes/voting.py
@@ -33,7 +33,6 @@ import atr.routes.compose as compose
 import atr.routes.root as root
 import atr.routes.vote as vote
 import atr.storage as storage
-import atr.tasks.vote as tasks_vote
 import atr.template as template
 import atr.user as user
 import atr.util as util
@@ -112,69 +111,6 @@ async def selected_revision(
     )
 
 
-async def start_vote(
-    email_to: str,
-    permitted_recipients: list[str],
-    project_name: str,
-    version_name: str,
-    selected_revision_number: str,
-    session: routes.CommitterSession,
-    vote_duration_choice: int,
-    subject_data: str,
-    body_data: str,
-    data: db.Session,
-    release: sql.Release,
-    promote: bool = True,
-) -> response.Response | str:
-    if email_to not in permitted_recipients:
-        # This will be checked again by tasks/vote.py for extra safety
-        log.info(f"Invalid mailing list choice: {email_to} not in 
{permitted_recipients}")
-        raise base.ASFQuartException("Invalid mailing list choice", 
errorcode=400)
-
-    if promote is True:
-        # This verifies the state and sets the phase to RELEASE_CANDIDATE
-        error = await interaction.promote_release(data, release.name, 
selected_revision_number, vote_manual=False)
-        if error:
-            return await session.redirect(root.index, error=error)
-
-    # TODO: We also need to store the duration of the vote
-    # We can't allow resolution of the vote until the duration has elapsed
-    # But we allow the user to specify in the form
-    # And yet we also have ReleasePolicy.min_hours
-    # Presumably this sets the default, and the form takes precedence?
-    # ReleasePolicy.min_hours can also be 0, though
-
-    # Create a task for vote initiation
-    task = sql.Task(
-        status=sql.TaskStatus.QUEUED,
-        task_type=sql.TaskType.VOTE_INITIATE,
-        task_args=tasks_vote.Initiate(
-            release_name=release.name,
-            email_to=email_to,
-            vote_duration=vote_duration_choice,
-            initiator_id=session.uid,
-            initiator_fullname=session.fullname,
-            subject=subject_data,
-            body=body_data,
-        ).model_dump(),
-        asf_uid=util.unwrap(session.uid),
-        project_name=project_name,
-        version_name=version_name,
-    )
-    data.add(task)
-    await data.commit()
-
-    # TODO: We should log all outgoing email and the session so that users can 
confirm
-    # And can be warned if there was a failure
-    # (The message should be shown on the vote resolution page)
-    return await session.redirect(
-        vote.selected,
-        success=f"The vote announcement email will soon be sent to 
{email_to}.",
-        project_name=project_name,
-        version_name=version_name,
-    )
-
-
 async def start_vote_manual(
     release: sql.Release,
     selected_revision_number: str,


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

Reply via email to