Skip to content

Commit a7408d5

Browse files
authored
Waiting pipeline status (#35)
1 parent 777693b commit a7408d5

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed

src/GitlabApi.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ export enum PipelineStatus {
6666
Failed = 'failed',
6767
Canceled = 'canceled',
6868
Skipped = 'skipped',
69+
Created = 'created',
6970
}
7071

7172
export interface MergeRequestPipeline {

src/MergeRequestAcceptor.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export enum AcceptMergeRequestResultKind {
1818
CanNotBeMerged,
1919
FailedPipeline,
2020
InvalidPipeline,
21+
WaitingPipeline,
2122
Unauthorized,
2223
}
2324

@@ -58,6 +59,12 @@ interface InvalidPipelineResponse extends Response {
5859
pipeline: MergeRequestPipeline | null;
5960
}
6061

62+
interface WaitingPipelineResponse extends Response {
63+
kind: AcceptMergeRequestResultKind.WaitingPipeline;
64+
mergeRequestInfo: MergeRequestInfo;
65+
pipeline: MergeRequestPipeline;
66+
}
67+
6168
interface UnauthorizedResponse extends Response {
6269
kind: AcceptMergeRequestResultKind.Unauthorized;
6370
mergeRequestInfo: MergeRequestInfo;
@@ -69,6 +76,7 @@ export type AcceptMergeRequestResult = SuccessResponse
6976
| CanNotBeMergedResponse
7077
| FailedPipelineResponse
7178
| InvalidPipelineResponse
79+
| WaitingPipelineResponse
7280
| UnauthorizedResponse;
7381

7482
interface AcceptMergeRequestOptions {
@@ -246,6 +254,15 @@ export const acceptMergeRequest = async (gitlabApi: GitlabApi, mergeRequest: Mer
246254
};
247255
}
248256

257+
if (currentPipeline.status === PipelineStatus.Created) {
258+
return {
259+
kind: AcceptMergeRequestResultKind.WaitingPipeline,
260+
mergeRequestInfo,
261+
user,
262+
pipeline: currentPipeline,
263+
};
264+
}
265+
249266
if (currentPipeline.status !== PipelineStatus.Success && currentPipeline.status !== PipelineStatus.Skipped) {
250267
throw new Error(`Unexpected pipeline status: ${currentPipeline.status}`);
251268
}

src/index.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,17 @@ const resolveMergeRequestResult = async (result: AcceptMergeRequestResult) => {
9090
return;
9191
}
9292

93+
if (result.kind === AcceptMergeRequestResultKind.WaitingPipeline) {
94+
console.log(`[MR] pipeline is waiting for a manual action: ${result.pipeline.status}, assigning back`);
95+
96+
await Promise.all([
97+
assignToAuthorAndResetLabels(gitlabApi, mergeRequestInfo),
98+
sendNote(gitlabApi, mergeRequestInfo, `Merge request can't be merged. Pipeline is waiting for a manual user action.`),
99+
]);
100+
101+
return;
102+
}
103+
93104
if (result.kind === AcceptMergeRequestResultKind.InvalidPipeline) {
94105
const message = result.pipeline === null
95106
? `Merge request can't be merged. Pipeline does not exist`

0 commit comments

Comments
 (0)