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 bca48e2  Start the second incubator vote automatically
bca48e2 is described below

commit bca48e2845d2895aab76ef557bb1363b6f18a866
Author: Sean B. Palmer <[email protected]>
AuthorDate: Mon Jun 30 18:36:23 2025 +0100

    Start the second incubator vote automatically
---
 atr/routes/resolve.py | 25 +++++++++++++++++++++++--
 atr/routes/voting.py  | 15 ++++++---------
 2 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/atr/routes/resolve.py b/atr/routes/resolve.py
index 1a38ba9..245f11b 100644
--- a/atr/routes/resolve.py
+++ b/atr/routes/resolve.py
@@ -21,6 +21,7 @@ import quart
 import sqlmodel
 import werkzeug.wrappers.response as response
 
+import atr.construct as construct
 import atr.db as db
 import atr.db.models as models
 import atr.revision as revision
@@ -28,6 +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.tasks.message as message
 import atr.util as util
 
@@ -144,9 +146,28 @@ async def _resolve_vote(
                     return release, "Failure"
                 thread_id = archive_url.split("/")[-1]
                 release.podling_thread_id = thread_id
-                # TODO: We need to start the Incubator PMC vote here
+                # incubator_vote_address = "[email protected]"
+                incubator_vote_address = "[email protected]"
+                if not release.project.committee:
+                    raise ValueError("Project has no committee")
+                revision_number = release.latest_revision_number
+                if revision_number is None:
+                    raise ValueError("Release has no revision number")
+                await voting.start_vote(
+                    committee=release.project.committee,
+                    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,
+                )
                 success_message = "Project PPMC vote marked as passed, and 
Incubator PMC vote automatically started"
-                raise NotImplementedError("Incubator PMC vote not implemented")
             elif vote_result == "passed":
                 release.phase = models.ReleasePhase.RELEASE_PREVIEW
                 success_message = "Vote marked as passed"
diff --git a/atr/routes/voting.py b/atr/routes/voting.py
index 21392be..fcc48a6 100644
--- a/atr/routes/voting.py
+++ b/atr/routes/voting.py
@@ -103,11 +103,10 @@ async def selected_revision(
             submit = wtforms.SubmitField("Send vote email")
 
         project = release.project
-        version = release.version
 
         # The subject can be changed by the user
         # TODO: We should consider not allowing the subject to be changed
-        default_subject = f"[VOTE] Release {project.display_name} {version}"
+        default_subject = f"[VOTE] Release {project.display_name} 
{version_name}"
         default_body = await construct.start_vote_default(project_name)
 
         form = await VoteInitiateForm.create_form(
@@ -125,7 +124,7 @@ async def selected_revision(
             vote_duration_choice: int = util.unwrap(form.vote_duration.data)
             subject_data: str = util.unwrap(form.subject.data)
             body_data: str = util.unwrap(form.body.data)
-            return await _start_vote(
+            return await start_vote(
                 committee,
                 email_to,
                 permitted_recipients,
@@ -138,7 +137,6 @@ async def selected_revision(
                 body_data,
                 data,
                 release,
-                version,
             )
 
         keys_warning = await _keys_warning(release)
@@ -148,7 +146,7 @@ async def selected_revision(
                 compose.selected,
                 error="This release candidate draft has no files yet. Please 
add some files before starting a vote.",
                 project_name=project_name,
-                version_name=version,
+                version_name=version_name,
             )
 
         # For GET requests or failed POST validation
@@ -218,7 +216,7 @@ async def _promote(
     return None
 
 
-async def _start_vote(
+async def start_vote(
     committee: models.Committee,
     email_to: str,
     permitted_recipients: list[str],
@@ -231,7 +229,6 @@ async def _start_vote(
     body_data: str,
     data: db.Session,
     release: models.Release,
-    version: str,
 ):
     if committee is None:
         raise base.ASFQuartException("Release has no associated committee", 
errorcode=400)
@@ -280,7 +277,7 @@ async def _start_vote(
             body=body_data,
         ).model_dump(),
         project_name=project_name,
-        version_name=version,
+        version_name=version_name,
     )
     data.add(task)
     await data.commit()
@@ -292,5 +289,5 @@ async def _start_vote(
         vote.selected,
         success=f"The vote announcement email will soon be sent to 
{email_to}.",
         project_name=project_name,
-        version_name=version,
+        version_name=version_name,
     )


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

Reply via email to