-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathgithubPullRequestInfoProvider.ts
More file actions
57 lines (52 loc) · 2.33 KB
/
githubPullRequestInfoProvider.ts
File metadata and controls
57 lines (52 loc) · 2.33 KB
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
53
54
55
56
57
import {GetPullRequestService} from './Api/getPullRequestService';
import {mergeableStates, PullRequestInfo} from '../pullrequestinfo';
import {debug} from '@actions/core';
import {promiseRetry} from '../Util/promiseRetry';
export class GithubPullRequestInfoProvider {
constructor(private getPullRequestService: GetPullRequestService) {}
public pullRequestInfoFor(
ownerName: string,
repoName: string,
pullRequestNumber: number,
): Promise<PullRequestInfo> {
return promiseRetry<PullRequestInfo>(async (attemptNumber): Promise<PullRequestInfo> => {
try {
const {draft, rebaseable, mergeableState, labels} = await this.getPullRequestService.getPullRequest(
ownerName,
repoName,
pullRequestNumber,
);
if (attemptNumber < 10 && !draft) {
if (mergeableState === 'unknown' || !mergeableStates.includes(mergeableState)) {
debug(`mergeableState for pull request #${pullRequestNumber} is 'unknown', retrying.`);
throw Error("mergeableState is 'unknown'");
}
if (rebaseable === null) {
debug(
`rebaseable for pull request #${pullRequestNumber} is null (not yet computed), retrying.`,
);
throw Error('rebaseable is null');
}
}
debug(`rebaseable value for pull request #${pullRequestNumber}: ${String(rebaseable)}`);
debug(`mergeableState for pull request #${pullRequestNumber}: ${mergeableState}`);
return {
ownerName: ownerName,
repoName: repoName,
number: pullRequestNumber,
draft: draft,
rebaseable: rebaseable ?? false,
mergeableState: mergeableState,
labels: labels,
};
} catch (error) {
debug(
`Fetching mergeableState for pull request #${pullRequestNumber} failed: "${String(
error,
)}", retrying.`,
);
throw error;
}
});
}
}