Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit fa9c618

Browse files
authored
Allow pr-bot to re-assign reviewers when stopped (#31436)
Fixes #31437 Enables the command `assign set of reviewers` to restart notifications if stopped
1 parent dda0fbf commit fa9c618

3 files changed

Lines changed: 59 additions & 30 deletions

File tree

scripts/ci/pr-bot/processPrUpdate.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,18 @@ async function processPrComment(
8383
stateClient,
8484
reviewerConfig
8585
);
86+
87+
// Check to see if notifications have been stopped before processing further.
88+
// Notifications can be stopped by an "R: reviewer" comment,
89+
// and then restarted by adding "assign set of reviewers" comment.
90+
if (
91+
(await stateClient.getPrState(getPullNumberFromPayload(payload)))
92+
.stopReviewerNotifications
93+
) {
94+
console.log("Notifications have been paused for this pull - skipping");
95+
return;
96+
}
97+
8698
// If there's been a comment by a non-author, we can remove the slow review label
8799
if (commentAuthor !== pullAuthor && commentAuthor !== BOT_NAME) {
88100
await removeSlowReviewLabel(payload);
@@ -140,11 +152,6 @@ async function processPrUpdate() {
140152
const pullNumber = getPullNumberFromPayload(payload);
141153

142154
const stateClient = new PersistentState();
143-
const prState = await stateClient.getPrState(pullNumber);
144-
if (prState.stopReviewerNotifications) {
145-
console.log("Notifications have been paused for this pull - skipping");
146-
return;
147-
}
148155

149156
switch (github.context.eventName) {
150157
case "issue_comment":
@@ -156,6 +163,12 @@ async function processPrUpdate() {
156163
await processPrComment(payload, stateClient, reviewerConfig);
157164
break;
158165
case "pull_request_target":
166+
if (
167+
(await stateClient.getPrState(pullNumber)).stopReviewerNotifications
168+
) {
169+
console.log("Notifications have been paused for this pull - skipping");
170+
return;
171+
}
159172
if (payload.action === "synchronize") {
160173
console.log("Processing synchronize action");
161174
await setNextActionReviewers(payload, stateClient);

scripts/ci/pr-bot/shared/commentStrings.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export function someChecksFailing(reviewersToNotify: string[]): string {
5858
}
5959

6060
export function stopNotifications(reason: string): string {
61-
return `Stopping reviewer notifications for this pull request: ${reason}`;
61+
return `Stopping reviewer notifications for this pull request: ${reason}. If you'd like to restart, comment \`assign set of reviewers\``;
6262
}
6363

6464
export function remindReviewerAfterTestsPass(requester: string): string {

scripts/ci/pr-bot/shared/userCommand.ts

Lines changed: 40 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -39,32 +39,42 @@ export async function processCommand(
3939

4040
const pullNumber = payload.issue?.number || payload.pull_request?.number;
4141
commentText = commentText.toLowerCase();
42-
if (commentText.indexOf("r: @") > -1) {
43-
await manuallyAssignedToReviewer(pullNumber, stateClient);
44-
} else if (commentText.indexOf("assign to next reviewer") > -1) {
45-
await assignToNextReviewer(
46-
payload,
47-
commentAuthor,
48-
pullNumber,
49-
stateClient,
50-
reviewerConfig
51-
);
52-
} else if (commentText.indexOf("stop reviewer notifications") > -1) {
53-
await stopReviewerNotifications(
54-
pullNumber,
55-
stateClient,
56-
"requested by reviewer"
57-
);
58-
} else if (commentText.indexOf("remind me after tests pass") > -1) {
59-
await remindAfterTestsPass(pullNumber, commentAuthor, stateClient);
60-
} else if (commentText.indexOf("waiting on author") > -1) {
61-
await waitOnAuthor(payload, pullNumber, stateClient);
62-
} else if (commentText.indexOf("assign set of reviewers") > -1) {
63-
await assignReviewerSet(payload, pullNumber, stateClient, reviewerConfig);
42+
43+
let prState = await stateClient.getPrState(pullNumber);
44+
if(prState.stopReviewerNotifications) {
45+
// Notifications stopped, only "allow assign set of reviewers"
46+
if (commentText.indexOf("assign set of reviewers") > -1) {
47+
await assignReviewerSet(payload, pullNumber, stateClient, reviewerConfig);
48+
} else {
49+
return false;
50+
}
6451
} else {
65-
return false;
52+
if (commentText.indexOf("r: @") > -1) {
53+
await manuallyAssignedToReviewer(pullNumber, stateClient);
54+
} else if (commentText.indexOf("assign to next reviewer") > -1) {
55+
await assignToNextReviewer(
56+
payload,
57+
commentAuthor,
58+
pullNumber,
59+
stateClient,
60+
reviewerConfig
61+
);
62+
} else if (commentText.indexOf("stop reviewer notifications") > -1) {
63+
await stopReviewerNotifications(
64+
pullNumber,
65+
stateClient,
66+
"requested by reviewer"
67+
);
68+
} else if (commentText.indexOf("remind me after tests pass") > -1) {
69+
await remindAfterTestsPass(pullNumber, commentAuthor, stateClient);
70+
} else if (commentText.indexOf("waiting on author") > -1) {
71+
await waitOnAuthor(payload, pullNumber, stateClient);
72+
} else if (commentText.indexOf("assign set of reviewers") > -1) {
73+
await assignReviewerSet(payload, pullNumber, stateClient, reviewerConfig);
74+
} else {
75+
return false;
76+
}
6677
}
67-
6878
return true;
6979
}
7080

@@ -175,6 +185,12 @@ async function assignReviewerSet(
175185
reviewerConfig: typeof ReviewerConfig
176186
) {
177187
let prState = await stateClient.getPrState(pullNumber);
188+
if(prState.stopReviewerNotifications) {
189+
// Restore notifications, and clear any existing reviewer set to
190+
// allow new reviewers to be assigned.
191+
prState.stopReviewerNotifications = false;
192+
prState.reviewersAssignedForLabels = {};
193+
}
178194
if (Object.values(prState.reviewersAssignedForLabels).length > 0) {
179195
await github.addPrComment(
180196
pullNumber,

0 commit comments

Comments
 (0)