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'use strict';
const pullRequestStatus = require('./models/pullRequestStatus');
const evaluateChecks = require('./evaluateChecks');
const doesPRHaveConflicts = (pullRequest) => pullRequest.mergeable === 'MERGEABLE';
module.exports = function evaluatePullRequest(response, requiredChecks) {
if (!response) {
return false;
}
const {
merged,
state,
reviewDecision,
viewerCanMergeAsAdmin,
} = response;
if (state !== 'OPEN') {
if (merged) {
return pullRequestStatus.MERGED;
}
return pullRequestStatus.CLOSED;
}
if (!doesPRHaveConflicts(response)) {
return pullRequestStatus.CONFLICT;
}
if (reviewDecision === 'CHANGES_REQUESTED') {
return pullRequestStatus.REVIEW_DISAPPROVED;
}
if (reviewDecision === 'REVIEW_REQUIRED') {
return viewerCanMergeAsAdmin ? pullRequestStatus.BYPASSABLE : pullRequestStatus.REVIEW_REQUIRED;
}
const { failure, pending } = evaluateChecks(response, requiredChecks);
if (failure.some((f) => f.isRequired)) {
return pullRequestStatus.STATUS_FAILURE;
}
if (pending.some((p) => p.isRequired)) {
return pullRequestStatus.STATUS_PENDING;
}
return pullRequestStatus.MERGEABLE;
};