[CI] Fix CI authorization notification fallback (#51095)

Signed-off-by: khluu <khluu000@gmail.com>
Co-authored-by: OpenAI Codex <noreply@openai.com>
This commit is contained in:
Kevin H. Luu
2026-08-05 01:34:48 -07:00
committed by GitHub
co-authored by OpenAI Codex
parent 5bf32605a9
commit a3b86752fb
5 changed files with 97 additions and 13 deletions
@@ -15,6 +15,7 @@ from run_ci_command import (
COMMAND_RUN_CI_ALL,
COMMAND_RUN_CI_NIGHTLY,
RETRY_STATES,
ApiError,
BuildkiteClient,
HttpTransport,
authorize,
@@ -25,6 +26,7 @@ from run_ci_command import (
notify_authorized,
parse_command,
parse_trusted_users,
resolve_workflow_run_pr,
run,
select_latest_build,
)
@@ -72,6 +74,8 @@ class FakeGitHub:
review_decision: str = "REVIEW_REQUIRED",
reviews: list[dict[str, Any]] | None = None,
comments: list[str] | None = None,
pulls_for_commit: list[dict[str, Any]] | None = None,
prs: dict[int, dict[str, Any]] | None = None,
) -> None:
self.comments = comments or []
self.permission = permission
@@ -80,13 +84,21 @@ class FakeGitHub:
self.reactions: list[str] = []
self.review_decision = review_decision
self.reviews = reviews or []
self.pulls_for_commit = pulls_for_commit or []
self.prs = prs or {self.pr["number"]: self.pr}
def get_pr(self, number: int) -> dict[str, Any]:
return self.pr
try:
return self.prs[number]
except KeyError as error:
raise ApiError(404, "Not found") from error
def get_permission(self, actor: str) -> str:
return self.permissions.get(actor, self.permission)
def list_pulls_for_commit(self, commit: str) -> list[dict[str, Any]]:
return self.pulls_for_commit
def get_review_decision(self, number: int) -> str:
return self.review_decision
@@ -525,7 +537,7 @@ class RunCiCommandTest(unittest.TestCase):
self.assertNotIn(COMMAND_RUN_CI_NIGHTLY, comment)
self.assertIn(CI_AUTHORIZED_COMMENT_MARKER, comment)
def test_ready_label_does_not_notify_after_trusted_approval(self) -> None:
def test_ready_label_notifies_after_missed_approval_notification(self) -> None:
pr = make_pr(labels=[{"name": "ready"}])
event = {
"action": "labeled",
@@ -547,7 +559,8 @@ class RunCiCommandTest(unittest.TestCase):
notify_authorized(event, github)
self.assertEqual(github.comments, [])
self.assertEqual(len(github.comments), 1)
self.assertIn("@author", github.comments[0])
def test_trusted_approval_notifies_author_once(self) -> None:
event = {
@@ -573,6 +586,37 @@ class RunCiCommandTest(unittest.TestCase):
self.assertEqual(len(github.comments), 1)
self.assertIn("@author", github.comments[0])
def test_workflow_run_resolves_pr_from_head_commit(self) -> None:
pr = make_pr()
github = FakeGitHub(
pr=pr,
pulls_for_commit=[{"number": pr["number"]}],
)
resolved = resolve_workflow_run_pr(
{"head_sha": pr["head"]["sha"], "pull_requests": []},
github,
)
self.assertEqual(resolved, pr)
def test_workflow_run_ignores_unrelated_pr_association(self) -> None:
pr = make_pr()
github = FakeGitHub(
pr=pr,
pulls_for_commit=[{"number": pr["number"]}],
)
resolved = resolve_workflow_run_pr(
{
"head_sha": pr["head"]["sha"],
"pull_requests": [{"number": 1}],
},
github,
)
self.assertEqual(resolved, pr)
def test_approval_does_not_notify_when_ready_label_exists(self) -> None:
pr = make_pr(labels=[{"name": "ready"}])
event = {