11import {
22 GitlabApi ,
3- MergeRequest ,
3+ MergeRequest , MergeRequestApprovals ,
44 MergeRequestInfo , MergeRequestPipeline ,
55 MergeState ,
66 MergeStatus ,
@@ -19,6 +19,7 @@ export enum AcceptMergeRequestResultKind {
1919 FailedPipeline ,
2020 InvalidPipeline ,
2121 WaitingPipeline ,
22+ WaitingForApprovals ,
2223 Unauthorized ,
2324}
2425
@@ -65,6 +66,12 @@ interface WaitingPipelineResponse extends Response {
6566 pipeline : MergeRequestPipeline ;
6667}
6768
69+ interface WaitingForApprovalsResponse extends Response {
70+ kind : AcceptMergeRequestResultKind . WaitingForApprovals ;
71+ mergeRequestInfo : MergeRequestInfo ;
72+ approvals : MergeRequestApprovals ;
73+ }
74+
6875interface UnauthorizedResponse extends Response {
6976 kind : AcceptMergeRequestResultKind . Unauthorized ;
7077 mergeRequestInfo : MergeRequestInfo ;
@@ -77,6 +84,7 @@ export type AcceptMergeRequestResult = SuccessResponse
7784 | FailedPipelineResponse
7885 | InvalidPipelineResponse
7986 | WaitingPipelineResponse
87+ | WaitingForApprovalsResponse
8088 | UnauthorizedResponse ;
8189
8290interface AcceptMergeRequestOptions {
@@ -268,6 +276,16 @@ export const acceptMergeRequest = async (gitlabApi: GitlabApi, mergeRequest: Mer
268276 }
269277 }
270278
279+ const approvals = await gitlabApi . getMergeRequestApprovals ( mergeRequestInfo . project_id , mergeRequestInfo . iid ) ;
280+ if ( approvals . approvals_left > 0 ) {
281+ return {
282+ kind : AcceptMergeRequestResultKind . WaitingForApprovals ,
283+ mergeRequestInfo,
284+ user,
285+ approvals,
286+ } ;
287+ }
288+
271289 console . log ( `[MR][${ mergeRequestInfo . iid } ] Calling merge request` ) ;
272290 const response = await gitlabApi . sendRawRequest ( `/api/v4/projects/${ mergeRequestInfo . project_id } /merge_requests/${ mergeRequestInfo . iid } /merge` , RequestMethod . Put , {
273291 should_remove_source_branch : options . removeBranchAfterMerge ,
0 commit comments