Skip to content

Commit b38a438

Browse files
authored
fix gitlab automatic deletion bug (#1905)
* fix automatic deletion for gitlab
1 parent b5d23f9 commit b38a438

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

ee/backend/controllers/gitlab.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ func handlePullRequestEvent(gitlabProvider utils.GitlabProvider, payload *gitlab
197197
isDraft := payload.ObjectAttributes.WorkInProgress
198198
branch := payload.ObjectAttributes.SourceBranch
199199
commitSha := payload.ObjectAttributes.LastCommit.ID
200+
action := payload.ObjectAttributes.Action
200201
//defaultBranch := payload.Repository.DefaultBranch
201202
//actor := payload.User.Username
202203
//discussionId := ""
@@ -208,6 +209,30 @@ func handlePullRequestEvent(gitlabProvider utils.GitlabProvider, payload *gitlab
208209
log.Printf("GetGithubService error: %v", glerr)
209210
return fmt.Errorf("error getting ghService to post error comment")
210211
}
212+
213+
// here we check if pr was merged and automatic deletion is enabled, to avoid errors when
214+
// pr is merged and the branch does not exist we handle that gracefully
215+
if action == "merge" {
216+
sourceBranch, _, err := glService.GetBranchName(prNumber)
217+
if err != nil {
218+
utils.InitCommentReporter(glService, prNumber, fmt.Sprintf(":x: Could not retrieve PR details, error: %v", err))
219+
log.Printf("Could not retrieve PR details error: %v", err)
220+
return fmt.Errorf("Could not retrieve PR details: %v", err)
221+
}
222+
223+
branchExists, err := glService.CheckBranchExists(sourceBranch)
224+
if err != nil {
225+
utils.InitCommentReporter(glService, prNumber, fmt.Sprintf(":x: Could not check if branch exists, error: %v", err))
226+
log.Printf("Could not check if branch exists, error: %v", err)
227+
return fmt.Errorf("Could not check if branch exists: %v", err)
228+
229+
}
230+
if !branchExists {
231+
log.Printf("automatic branch deletion is configured, ignoring pr closed event")
232+
return nil
233+
}
234+
}
235+
211236
comment, err := glService.PublishComment(prNumber, fmt.Sprintf("Report for pull request (%v)", commitSha))
212237
discussionId := comment.DiscussionId
213238

libs/ci/gitlab/gitlab.go

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,28 @@ func (gitlabService GitLabService) GetApprovals(prNumber int) ([]string, error)
301301

302302
func (gitlabService GitLabService) GetBranchName(prNumber int) (string, string, error) {
303303
//TODO implement me
304-
return "", "", nil
304+
projectId := *gitlabService.Context.ProjectId
305+
log.Printf("CheckBranchExists prNumber : %d, projectId: %d \n", prNumber, projectId)
306+
options := go_gitlab.GetMergeRequestsOptions{}
307+
pr, _, err := gitlabService.Client.MergeRequests.GetMergeRequest(projectId, prNumber, &options)
308+
if err != nil {
309+
log.Printf("error while getting branch name for pr: %v", err)
310+
return "", "", err
311+
}
312+
return pr.SourceBranch, pr.SHA, nil
313+
}
314+
315+
func (gitlabService GitLabService) CheckBranchExists(branchName string) (bool, error) {
316+
projectId := *gitlabService.Context.ProjectId
317+
log.Printf("CheckBranchExists branchName : %v, projectId: %d \n", branchName, projectId)
318+
_, resp, err := gitlabService.Client.Branches.GetBranch(projectId, branchName)
319+
if err != nil {
320+
if resp != nil && resp.StatusCode == 404 {
321+
return false, nil
322+
}
323+
return false, err
324+
}
325+
return true, nil
305326
}
306327

307328
func (svc GitLabService) SetOutput(prNumber int, key string, value string) error {

0 commit comments

Comments
 (0)