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]