Skip to content

Commit f88bbcb

Browse files
authored
ci: auto-remove needs review label when PR is reviewed (#2402)
1 parent eee0b6b commit f88bbcb

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
name: remove-needs-review-on-review
2+
3+
on:
4+
pull_request_review:
5+
types:
6+
- submitted
7+
8+
jobs:
9+
remove-needs-review:
10+
name: 🏷️ Remove needs review label
11+
if: github.repository == 'npmx-dev/npmx.dev'
12+
runs-on: ubuntu-slim
13+
permissions:
14+
contents: read
15+
issues: write
16+
pull-requests: write
17+
steps:
18+
- name: 🏷️ Remove needs review label
19+
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
20+
with:
21+
script: |
22+
const pr = context.payload.pull_request;
23+
const review = context.payload.review;
24+
const LABEL = 'needs review';
25+
const reviewer = review?.user?.login;
26+
const author = pr.user?.login;
27+
const reviewerType = review?.user?.type;
28+
29+
if (!reviewer) {
30+
console.log('No reviewer login found in payload, skipping.');
31+
return;
32+
}
33+
34+
if (reviewerType === 'Bot') {
35+
console.log(`Skipping bot review from @${reviewer} on PR #${pr.number}.`);
36+
return;
37+
}
38+
39+
if (reviewer === author) {
40+
console.log(`Skipping self-review from @${reviewer} on PR #${pr.number}.`);
41+
return;
42+
}
43+
44+
if (!pr.labels.some(({ name }) => name === LABEL)) {
45+
console.log(`PR #${pr.number} does not have the "${LABEL}" label.`);
46+
return;
47+
}
48+
49+
const { data: permission } = await github.rest.repos.getCollaboratorPermissionLevel({
50+
owner: context.repo.owner,
51+
repo: context.repo.repo,
52+
username: reviewer,
53+
});
54+
55+
console.log(`Reviewer @${reviewer} permission is "${permission.permission}".`);
56+
57+
if (!['admin', 'maintain', 'write'].includes(permission.permission)) {
58+
console.log(`Reviewer @${reviewer} is not a maintainer, skipping.`);
59+
return;
60+
}
61+
62+
await github.rest.issues.removeLabel({
63+
owner: context.repo.owner,
64+
repo: context.repo.repo,
65+
issue_number: pr.number,
66+
name: LABEL,
67+
});
68+
69+
console.log(`Removed "${LABEL}" from PR #${pr.number}.`);

0 commit comments

Comments
 (0)