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

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

commit 7e92d3d49933d40ba8811dad84270047c173d152
Author: Sean B. Palmer <[email protected]>
AuthorDate: Wed Mar 4 15:48:24 2026 +0000

    Record when votes are resolved
---
 atr/storage/writers/release.py | 1 +
 atr/storage/writers/vote.py    | 7 +++++++
 2 files changed, 8 insertions(+)

diff --git a/atr/storage/writers/release.py b/atr/storage/writers/release.py
index 963fe9ab..8f244172 100644
--- a/atr/storage/writers/release.py
+++ b/atr/storage/writers/release.py
@@ -347,6 +347,7 @@ class CommitteeParticipant(FoundationCommitter):
             .values(
                 phase=sql.ReleasePhase.RELEASE_CANDIDATE,
                 vote_started=datetime.datetime.now(datetime.UTC),
+                vote_resolved=None,
                 vote_manual=vote_manual,
             )
         )
diff --git a/atr/storage/writers/vote.py b/atr/storage/writers/vote.py
index f221bc1e..d8925418 100644
--- a/atr/storage/writers/vote.py
+++ b/atr/storage/writers/vote.py
@@ -18,6 +18,7 @@
 # Removing this will cause circular imports
 from __future__ import annotations
 
+import datetime
 from typing import Literal
 
 import atr.construct as construct
@@ -289,6 +290,7 @@ class CommitteeMember(CommitteeParticipant):
 
         if vote_result == "passed":
             release.phase = sql.ReleasePhase.RELEASE_PREVIEW
+            release.vote_resolved = datetime.datetime.now(datetime.UTC)
             await self.__data.commit()
             await self.__data.refresh(release)
             success_message = "Vote marked as passed"
@@ -299,6 +301,8 @@ class CommitteeMember(CommitteeParticipant):
             )
         else:
             release.phase = sql.ReleasePhase.RELEASE_CANDIDATE_DRAFT
+            # The vote_resolved property refers to when the vote succeeded only
+            release.vote_resolved = None
             await self.__data.commit()
             await self.__data.refresh(release)
             success_message = "Vote marked as failed"
@@ -376,6 +380,7 @@ class CommitteeMember(CommitteeParticipant):
             success_message = "Project PPMC vote marked as passed, and 
Incubator PMC vote automatically started"
         elif vote_result == "passed":
             release.phase = sql.ReleasePhase.RELEASE_PREVIEW
+            release.vote_resolved = datetime.datetime.now(datetime.UTC)
             await self.__data.commit()
             await self.__data.refresh(release)
             success_message = "Vote marked as passed"
@@ -391,6 +396,8 @@ class CommitteeMember(CommitteeParticipant):
                 extra_destination = (round_one_email_address, 
round_one_message_id)
         else:
             release.phase = sql.ReleasePhase.RELEASE_CANDIDATE_DRAFT
+            # The vote_resolved property refers to when the vote succeeded only
+            release.vote_resolved = None
             await self.__data.commit()
             await self.__data.refresh(release)
             success_message = "Vote marked as failed"


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

Reply via email to