@@ -90,6 +90,7 @@ const containsAssignedUser = (mergeRequest: MergeRequest, user: User) => {
9090 return userIds . includes ( user . id ) ;
9191} ;
9292const defaultPipelineValidationRetries = 5 ;
93+ const defaultRebasingRetries = 1 ;
9394
9495export const filterBotLabels = ( labels : BotLabels [ ] ) => {
9596 const values = Object . values ( BotLabels ) ;
@@ -100,6 +101,7 @@ export const filterBotLabels = (labels: BotLabels[]) => {
100101export const acceptMergeRequest = async ( gitlabApi : GitlabApi , mergeRequest : MergeRequest , user : User , options : AcceptMergeRequestOptions ) : Promise < AcceptMergeRequestResult > => {
101102 let mergeRequestInfo : MergeRequestInfo ;
102103 let numberOfPipelineValidationRetries = defaultPipelineValidationRetries ;
104+ let numberOfRebasingRetries = defaultRebasingRetries ;
103105
104106 while ( true ) {
105107 const tasks : Array < Promise < any > > = [ sleep ( options . ciInterval ) ] ;
@@ -134,7 +136,7 @@ export const acceptMergeRequest = async (gitlabApi: GitlabApi, mergeRequest: Mer
134136 }
135137
136138 if ( mergeRequestInfo . rebase_in_progress ) {
137- console . log ( `[MR] Still rebasing` ) ;
139+ console . log ( `[MR][ ${ mergeRequestInfo . iid } ] Still rebasing` ) ;
138140 await Promise . all ( tasks ) ;
139141 continue ;
140142 }
@@ -148,13 +150,23 @@ export const acceptMergeRequest = async (gitlabApi: GitlabApi, mergeRequest: Mer
148150 }
149151
150152 if ( mergeRequestInfo . diverged_commits_count > 0 ) {
153+ if ( numberOfRebasingRetries <= 0 && mergeRequestInfo . merge_error !== null ) {
154+ console . log ( `[MR][${ mergeRequestInfo . iid } ] Merge error after rebase` ) ;
155+ return {
156+ kind : AcceptMergeRequestResultKind . CanNotBeMerged ,
157+ mergeRequestInfo,
158+ user,
159+ } ;
160+ }
161+
151162 await gitlabApi . updateMergeRequest ( mergeRequestInfo . project_id , mergeRequestInfo . iid , {
152163 labels : [ ...filterBotLabels ( mergeRequestInfo . labels ) , BotLabels . Rebasing ] . join ( ',' ) ,
153164 } ) ;
154- console . log ( `[MR] source branch is not up to date, rebasing` ) ;
165+ console . log ( `[MR][ ${ mergeRequestInfo . iid } ] source branch is not up to date, rebasing` ) ;
155166 await tryCancelPipeline ( gitlabApi , mergeRequestInfo , user ) ;
156167 await gitlabApi . rebaseMergeRequest ( mergeRequestInfo . project_id , mergeRequestInfo . iid ) ;
157168 numberOfPipelineValidationRetries = defaultPipelineValidationRetries ;
169+ numberOfRebasingRetries -- ;
158170 await Promise . all ( tasks ) ;
159171 continue ;
160172 }
@@ -181,8 +193,8 @@ export const acceptMergeRequest = async (gitlabApi: GitlabApi, mergeRequest: Mer
181193
182194 if ( currentPipelineCandidate === undefined ) {
183195 const message = mergeRequestInfo . pipeline === null
184- ? `[MR] Merge request can't be merged. Pipeline does not exist`
185- : `[MR] Merge request can't be merged. The latest pipeline is not executed on the latest commit` ;
196+ ? `[MR][ ${ mergeRequestInfo . iid } ] Merge request can't be merged. Pipeline does not exist`
197+ : `[MR][ ${ mergeRequestInfo . iid } ] Merge request can't be merged. The latest pipeline is not executed on the latest commit` ;
186198 console . log ( message ) ;
187199
188200 if ( numberOfPipelineValidationRetries > 0 ) {
@@ -212,13 +224,13 @@ export const acceptMergeRequest = async (gitlabApi: GitlabApi, mergeRequest: Mer
212224 ) ;
213225 }
214226
215- console . log ( `[MR] Waiting for CI. Current status: ${ currentPipeline . status } ` ) ;
227+ console . log ( `[MR][ ${ mergeRequestInfo . iid } ] Waiting for CI. Current status: ${ currentPipeline . status } ` ) ;
216228 await Promise . all ( tasks ) ;
217229 continue ;
218230 }
219231
220232 if ( currentPipeline . status === PipelineStatus . Canceled ) {
221- console . log ( `[MR] pipeline is canceled calling retry` ) ;
233+ console . log ( `[MR][ ${ mergeRequestInfo . iid } ] pipeline is canceled calling retry` ) ;
222234 await gitlabApi . retryPipeline ( mergeRequestInfo . project_id , currentPipeline . id ) ;
223235 numberOfPipelineValidationRetries = defaultPipelineValidationRetries ;
224236 await Promise . all ( tasks ) ;
@@ -239,7 +251,7 @@ export const acceptMergeRequest = async (gitlabApi: GitlabApi, mergeRequest: Mer
239251 }
240252 }
241253
242- console . log ( ' [MR] Calling merge request' ) ;
254+ console . log ( ` [MR][ ${ mergeRequestInfo . iid } ] Calling merge request` ) ;
243255 const response = await gitlabApi . sendRawRequest ( `/api/v4/projects/${ mergeRequestInfo . project_id } /merge_requests/${ mergeRequestInfo . iid } /merge` , RequestMethod . Put , {
244256 should_remove_source_branch : options . removeBranchAfterMerge ,
245257 merge_when_pipeline_succeeds : true ,
@@ -287,7 +299,7 @@ export const acceptMergeRequest = async (gitlabApi: GitlabApi, mergeRequest: Mer
287299 ) ;
288300 }
289301
290- console . log ( `[MR] Merge request is processing` ) ;
302+ console . log ( `[MR][ ${ mergeRequestInfo . iid } ] Merge request is processing` ) ;
291303 await Promise . all ( tasks ) ;
292304 }
293305} ;
0 commit comments