Skip to content

Commit 79c16e2

Browse files
authored
Retry pipeline validation five times (#14)
1 parent d42592a commit 79c16e2

File tree

2 files changed

+23
-21
lines changed

2 files changed

+23
-21
lines changed

src/MergeRequestAcceptor.ts

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ export enum BotLabels {
8585
}
8686

8787
const containsLabel = (labels: string[], label: BotLabels) => labels.includes(label);
88+
const defaultPipelineValidationRetries = 5;
8889

8990
export const filterBotLabels = (labels: string[]) => {
9091
const values = Object.values(BotLabels);
@@ -94,6 +95,7 @@ export const filterBotLabels = (labels: string[]) => {
9495

9596
export const acceptMergeRequest = async (gitlabApi: GitlabApi, mergeRequest: MergeRequest, user: User, options: AcceptMergeRequestOptions): Promise<AcceptMergeRequestResult> => {
9697
let mergeRequestInfo;
98+
let numberOfPipelineValidationRetries = defaultPipelineValidationRetries;
9799

98100
while (true) {
99101
const tasks: Array<Promise<any>> = [sleep(options.ciInterval)];
@@ -156,18 +158,22 @@ export const acceptMergeRequest = async (gitlabApi: GitlabApi, mergeRequest: Mer
156158
await gitlabApi.updateMergeRequest(mergeRequest.project_id, mergeRequest.iid, {
157159
labels: [...filterBotLabels(mergeRequestInfo.labels), BotLabels.Accepting].join(','),
158160
});
161+
numberOfPipelineValidationRetries = defaultPipelineValidationRetries;
159162
continue;
160163
}
161164

162-
if (mergeRequestInfo.pipeline === null) {
163-
return {
164-
kind: AcceptMergeRequestResultKind.InvalidPipeline,
165-
mergeRequestInfo,
166-
pipeline: mergeRequestInfo.pipeline,
167-
};
168-
}
165+
if (mergeRequestInfo.pipeline === null || mergeRequestInfo.pipeline.sha !== mergeRequestInfo.sha) {
166+
const message = mergeRequestInfo.pipeline === null
167+
? `[MR] Merge request can't be merged. Pipeline does not exist`
168+
: `[MR] Merge request can't be merged. The latest pipeline is not executed on the latest commit`;
169+
console.log(message);
170+
171+
if (numberOfPipelineValidationRetries > 0) {
172+
numberOfPipelineValidationRetries--;
173+
await Promise.all(tasks);
174+
continue;
175+
}
169176

170-
if (mergeRequestInfo.pipeline.sha !== mergeRequestInfo.sha) {
171177
return {
172178
kind: AcceptMergeRequestResultKind.InvalidPipeline,
173179
mergeRequestInfo,
@@ -192,6 +198,7 @@ export const acceptMergeRequest = async (gitlabApi: GitlabApi, mergeRequest: Mer
192198
if (mergeRequestInfo.pipeline.status === PipelineStatus.Canceled) {
193199
console.log(`[MR] pipeline is canceled calling retry`);
194200
await gitlabApi.retryPipeline(mergeRequest.project_id, mergeRequestInfo.pipeline.id);
201+
numberOfPipelineValidationRetries = defaultPipelineValidationRetries;
195202
continue;
196203
}
197204

src/index.ts

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -155,19 +155,14 @@ const runMergeRequestCheckerLoop = async (user: User) => {
155155
}
156156

157157
if (result.kind === AcceptMergeRequestResultKind.InvalidPipeline) {
158-
if (result.pipeline === null) {
159-
console.log(`[MR] Pipeline doesn't exist`);
160-
await Promise.all([
161-
assignToAuthorAndResetLabels(gitlabApi, result.mergeRequestInfo),
162-
sendNote(gitlabApi, mergeRequest, `Merge request can't be merged. Pipeline does not exist`),
163-
]);
164-
} else {
165-
console.log(`[MR] Unexpected pipeline sha ${result.pipeline.sha} vs commit ${result.mergeRequestInfo.sha}`);
166-
await Promise.all([
167-
assignToAuthorAndResetLabels(gitlabApi, result.mergeRequestInfo),
168-
sendNote(gitlabApi, mergeRequest, `Merge request can't be merged. The latest pipeline is not executed on the latest commit`),
169-
]);
170-
}
158+
const message = result.pipeline === null
159+
? `Merge request can't be merged. Pipeline does not exist`
160+
: `Merge request can't be merged. The latest pipeline is not executed on the latest commit`;
161+
162+
await Promise.all([
163+
assignToAuthorAndResetLabels(gitlabApi, result.mergeRequestInfo),
164+
sendNote(gitlabApi, mergeRequest, message),
165+
]);
171166

172167
return;
173168
}

0 commit comments

Comments
 (0)