Skip to content

Commit 60a9b22

Browse files
Exui 3114 tool to improve pr review v12 (#17)
* refactored to fix changes requested bug when a pr is opened * updated release version
1 parent 814c22d commit 60a9b22

File tree

3 files changed

+30
-34
lines changed

3 files changed

+30
-34
lines changed

prBot/RELEASE-NOTES.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
Version 1.0.7
2+
EXUI-3114 Investigate automation tool to improve PR review process
3+
14
Version 1.0.6
25
EXUI-3114 Investigate automation tool to improve PR review process
36

prBot/dist/prBot.js

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,11 @@ const github = {
9292
'User-Agent': 'Node.js'
9393
};
9494

95-
const reviews = await httpRequest(CONFIG.GITHUB_API_BASE, path, 'GET', headers);
96-
return reviews.filter(review => review.state === 'APPROVED').length;
95+
const reviews = await httpRequest(CONFIG.GITHUB_API_BASE, path, 'GET', headers),
96+
approved = reviews.filter(review => review.state === 'APPROVED').length,
97+
changesRequested = reviews.filter(review => review.state === 'CHANGES_REQUESTED').length;
98+
99+
return { approved, changesRequested };
97100
}
98101
};
99102

@@ -318,12 +321,10 @@ async function repostApprovalList() {
318321

319322
Object.entries(state.repositories).forEach(([repo, data]) => {
320323
Object.values(data.pullRequests).forEach(pr => {
321-
if (pr.status === 'needs_approval' || pr.status === 'changes_requested') {
322-
needsApproval.push({
323-
...pr,
324-
repository: repo
325-
});
326-
}
324+
needsApproval.push({
325+
...pr,
326+
repository: repo
327+
});
327328
});
328329
});
329330

@@ -336,7 +337,7 @@ async function repostApprovalList() {
336337
let message = '';
337338

338339
needsApproval.forEach(pr => {
339-
const emoji = pr.status === 'changes_requested' ? '🔧 ' : '';
340+
const emoji = pr.changesRequested ? '🔧 ' : '';
340341
message += formatPRMessage(pr.number, pr.author, pr.title, pr.repository, pr.approvals, emoji) + '\n\n';
341342
});
342343

@@ -358,26 +359,26 @@ async function repostApprovalList() {
358359
}
359360
}
360361

361-
function formatPRMessage(prNumber, prAuthor, prTitle, repo, approvalCount, emoji = '') {
362+
function formatPRMessage(prNumber, prAuthor, prTitle, repo, approvedCount, emoji = '') {
362363
const truncatedTitle = prTitle.length > ENV.titleMaxLength
363364
? prTitle.slice(0, ENV.titleMaxLength) + '…'
364365
: prTitle;
365366
const prLink = `https://github.com/${repo}/pull/${prNumber}`;
366367

367-
return `(${approvalCount} of ${ENV.requiredApprovals} approvals) PR #${prNumber} by ${prAuthor}:\n${emoji}<${prLink}|${truncatedTitle}>`;
368+
return `(${approvedCount} of ${ENV.requiredApprovals} approvals) PR #${prNumber} by ${prAuthor}:\n${emoji}<${prLink}|${truncatedTitle}>`;
368369
}
369370

370371
async function handlePROpened(event) {
371372
const { prNumber, prAuthor, prTitle, repo } = event;
372-
const approvalCount = await github.getReviews(repo, prNumber);
373+
const { approvedCount, changesRequestedCount } = await github.getReviews(repo, prNumber);
373374

374375
await stateManager.updatePR(repo, prNumber, {
375376
number: prNumber,
376377
title: prTitle,
377378
author: prAuthor,
378379
url: `https://github.com/${repo}/pull/${prNumber}`,
379-
status: 'needs_approval',
380-
approvals: approvalCount,
380+
changesRequested: changesRequestedCount > 0,
381+
approvals: approvedCount,
381382
createdAt: new Date().toISOString(),
382383
})
383384

@@ -392,25 +393,17 @@ async function handlePRReview(event) {
392393
return;
393394
}
394395

395-
if (reviewState !== 'approved') {
396-
return;
397-
}
398-
399-
const approvalCount = await github.getReviews(repo, prNumber);
396+
const { approvedCount, changesRequestedCount } = await github.getReviews(repo, prNumber);
400397

401-
if (approvalCount >= ENV.requiredApprovals) {
402-
if (reviewState !== 'changes_requested') {
403-
// post standalone approval message
404-
const message = formatPRMessage(prNumber, prAuthor, prTitle, repo, approvalCount, '✅✅ ');
405-
await slack.postMessage(ENV.slackChannelId, message);
398+
if ((approvedCount >= ENV.requiredApprovals) && changesRequestedCount === 0) {
399+
// post standalone approval message
400+
const message = formatPRMessage(prNumber, prAuthor, prTitle, repo, approvedCount, '✅✅ ');
401+
await slack.postMessage(ENV.slackChannelId, message);
406402

407-
// remove from state
408-
await stateManager.removePR(repo, prNumber)
409-
}
403+
// remove from state
404+
await stateManager.removePR(repo, prNumber)
410405
} else {
411-
await stateManager.updatePR(repo, prNumber, {
412-
approvals: approvalCount,
413-
})
406+
await stateManager.updatePR(repo, prNumber, { approvals: approvedCount })
414407
}
415408

416409
await repostApprovalList();
@@ -419,7 +412,7 @@ async function handlePRReview(event) {
419412
async function handlePRChangesRequested(event) {
420413
const { prNumber, prAuthor, repo, prTitle, reviewState } = event;
421414

422-
const approvalCount = await github.getReviews(repo, prNumber);
415+
const { approvedCount } = await github.getReviews(repo, prNumber);
423416

424417
if (reviewState !== 'changes_requested') {
425418
return;
@@ -430,8 +423,8 @@ async function handlePRChangesRequested(event) {
430423
title: prTitle,
431424
author: prAuthor,
432425
url: `https://github.com/${repo}/pull/${prNumber}`,
433-
status: reviewState,
434-
approvals: approvalCount,
426+
changesRequested: true,
427+
approvals: approvedCount,
435428
createdAt: new Date().toISOString(),
436429
});
437430

prBot/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@hmcts/pr-bot",
3-
"version": "1.0.6",
3+
"version": "1.0.7",
44
"description": "A bot to be used in Github Actions which posts to Slack contextual information about pull requests.",
55
"main": "dist/index.js",
66
"bin": {

0 commit comments

Comments
 (0)