-
Notifications
You must be signed in to change notification settings - Fork 1
/
review.js
52 lines (47 loc) · 1.93 KB
/
review.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
const github = require('@actions/github');
const owners = require('./owners');
let computeReviewers = function(labels, author, config) {
const reviewers = new Set();
labels.forEach(label => {
const r1 = owners.labelToOwners(label, author, config.areaReviewers, config.areaReviewersRegexList);
const r2 = owners.labelToOwners(label, author, config.areaApprovers, config.areaApproversRegexList) || [];
if (r1 != undefined) { // known area label
r1.forEach(reviewer => reviewers.add(reviewer));
if (r2.length < config.minApprovingReviewsPerArea && config.requestReviewsFromMaintainersIfNeeded) {
console.log(`There are not enough approvers for label ${label}, using maintainers as requested`);
const maintainers = config.maintainers.filter(maintainer => maintainer !== author);
maintainers.forEach(maintainer => reviewers.add(maintainer));
}
}
r2.forEach(reviewer => reviewers.add(reviewer));
});
// should not be needed
reviewers.delete(author);
return Array.from(reviewers);
};
async function requestReviewers(owner, repo, pullNumber, token, reviewers) {
// const octokit = github.getOctokit(token, {log: console});
const octokit = github.getOctokit(token, {log: require("console-log-level")({ level: "debug" })});
console.log(
"request reviewers",
JSON.stringify({
owner: owner,
repo: repo,
pull_number: pullNumber,
reviewers: reviewers,
})
);
try {
await octokit.rest.pulls.requestReviewers({
owner: owner,
repo: repo,
pull_number: pullNumber,
reviewers: reviewers,
});
} catch(error) {
console.log(`cannot request reviewers: ${error}`);
throw error;
}
}
exports.computeReviewers = computeReviewers;
exports.requestReviewers = requestReviewers;