Skip to content

Commit 3d3efff

Browse files
authored
Mark pipeline as failed when a failed job is found (#190)
1 parent 0231dbe commit 3d3efff

File tree

4 files changed

+34
-16
lines changed

4 files changed

+34
-16
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ GITLAB_AUTH_TOKEN="<token>" yarn run start
102102
| `HTTP_SERVER_ENABLE` | `false` | It'll enable experimental API and dashboard support |
103103
| `HTTP_SERVER_PORT` | `4000` | It'll use different http server port |
104104
| `WEB_HOOK_TOKEN` | `` | It'll enable experimental web hook support |
105-
| `PERMISSION_VALIDATION` | `false` | It'll enable experimental permission validation |
105+
| `ENABLE_PERMISSION_VALIDATION` | `false` | It'll enable experimental permission validation |
106106

107107
## Development
108108

server/src/MergeRequestAcceptor.ts

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { JobStatus } from './generated/graphqlgen';
2020

2121
export enum AcceptMergeRequestResultKind {
2222
SuccessfullyMerged,
23-
ClosedMergeRequest,
23+
NotOpenMergeRequest,
2424
ReassignedMergeRequest,
2525
CanNotBeMerged,
2626
HasConflict,
@@ -47,8 +47,8 @@ interface SuccessResponse extends Response {
4747
mergeRequestInfo: MergeRequestInfo;
4848
}
4949

50-
interface ClosedMergeRequestResponse extends Response {
51-
kind: AcceptMergeRequestResultKind.ClosedMergeRequest;
50+
interface NotOpenMergeRequestResponse extends Response {
51+
kind: AcceptMergeRequestResultKind.NotOpenMergeRequest;
5252
mergeRequestInfo: MergeRequestInfo;
5353
}
5454

@@ -129,7 +129,7 @@ interface PipelineInProgressResponse extends Response {
129129

130130
export type AcceptMergeRequestResult =
131131
| SuccessResponse
132-
| ClosedMergeRequestResponse
132+
| NotOpenMergeRequestResponse
133133
| ReassignedMergeRequestResponse
134134
| CanNotBeMergedResponse
135135
| HasConflictResponse
@@ -143,7 +143,7 @@ export type AcceptMergeRequestResult =
143143

144144
export type MergeMergeRequestResult =
145145
| SuccessResponse
146-
| ClosedMergeRequestResponse
146+
| NotOpenMergeRequestResponse
147147
| ReassignedMergeRequestResponse
148148
| CanNotBeMergedResponse
149149
| HasConflictResponse
@@ -233,18 +233,14 @@ export const acceptMergeRequest = async (
233233
};
234234
}
235235

236-
if (mergeRequestInfo.state === MergeState.Closed) {
236+
if (mergeRequestInfo.state !== MergeState.Opened) {
237237
return {
238-
kind: AcceptMergeRequestResultKind.ClosedMergeRequest,
238+
kind: AcceptMergeRequestResultKind.NotOpenMergeRequest,
239239
mergeRequestInfo,
240240
user,
241241
};
242242
}
243243

244-
if (mergeRequestInfo.state !== MergeState.Opened) {
245-
throw new Error(`Unexpected MR status: ${mergeRequestInfo.state}`);
246-
}
247-
248244
if (mergeRequestInfo.detailed_merge_status === DetailedMergeStatus.DiscussionsNotResolved) {
249245
return {
250246
kind: AcceptMergeRequestResultKind.UnresolvedDiscussion,
@@ -449,7 +445,7 @@ export const runAcceptingMergeRequest = async (
449445
);
450446
if (
451447
mergeResponse.kind === AcceptMergeRequestResultKind.SuccessfullyMerged ||
452-
mergeResponse.kind === AcceptMergeRequestResultKind.ClosedMergeRequest ||
448+
mergeResponse.kind === AcceptMergeRequestResultKind.NotOpenMergeRequest ||
453449
mergeResponse.kind === AcceptMergeRequestResultKind.Unauthorized ||
454450
mergeResponse.kind === AcceptMergeRequestResultKind.WorkInProgress ||
455451
mergeResponse.kind === AcceptMergeRequestResultKind.UnresolvedDiscussion ||
@@ -520,6 +516,19 @@ export const runAcceptingMergeRequest = async (
520516
await gitlabApi.getPipelineJobs(mergeRequestInfo.project_id, currentPipeline.id),
521517
);
522518

519+
// Mark pipeline as failed when a failed job is found
520+
const failedJob = jobs.find(
521+
(job) => !job.allow_failure && job.status === PipelineJobStatus.Failed,
522+
);
523+
if (failedJob !== undefined) {
524+
return {
525+
kind: AcceptMergeRequestResultKind.FailedPipeline,
526+
mergeRequestInfo,
527+
user,
528+
pipeline: currentPipeline,
529+
};
530+
}
531+
523532
const manualJobsToRun = jobs.filter(
524533
(job) => PipelineJobStatus.Manual === job.status && !job.allow_failure,
525534
);

server/src/MergeRequestReceiver.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,16 @@ export const prepareMergeRequestForMerge = async (
8080
}
8181

8282
if (mergeRequest.state === MergeState.Merged) {
83-
await assignToAuthorAndResetLabels(gitlabApi, mergeRequest, user);
83+
await setBotLabels(gitlabApi, mergeRequest, []);
84+
return;
85+
}
86+
87+
if (mergeRequest.state !== MergeState.Opened) {
88+
await Promise.all([
89+
assignToAuthorAndResetLabels(gitlabApi, mergeRequest, user),
90+
setBotLabels(gitlabApi, mergeRequest, []),
91+
]);
92+
8493
return;
8594
}
8695

server/src/MergeRequestResultResolver.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ export const resolveMergeRequestResult = async (
6161
return;
6262
}
6363

64-
if (result.kind === AcceptMergeRequestResultKind.ClosedMergeRequest) {
65-
console.log(`[MR][${mergeRequestInfo.iid}] Merge request is closed, ending`);
64+
if (result.kind === AcceptMergeRequestResultKind.NotOpenMergeRequest) {
65+
console.log(`[MR][${mergeRequestInfo.iid}] Merge request is not open, ending`);
6666

6767
await Promise.all([
6868
tryCancelPipeline(gitlabApi, mergeRequestInfo, user),

0 commit comments

Comments
 (0)