diff --git a/server/events/vcs/gitlab_client.go b/server/events/vcs/gitlab_client.go index 26eb93f22..b82940155 100644 --- a/server/events/vcs/gitlab_client.go +++ b/server/events/vcs/gitlab_client.go @@ -244,12 +244,26 @@ func (g *GitlabClient) UpdateStatus(repo models.Repo, pull models.PullRequest, s case models.SuccessCommitStatus: gitlabState = gitlab.Success } - _, _, err := g.Client.Commits.SetCommitStatus(repo.FullName, pull.HeadCommit, &gitlab.SetCommitStatusOptions{ + + mr, err := g.GetMergeRequest(pull.BaseRepo.FullName, pull.Num) + if err != nil { + return err + } + // refTarget is set to current branch if no pipeline is assigned to the commit, + // otherwise it is set to the pipeline created by the merge_request_event rule + refTarget := pull.HeadBranch + if mr.Pipeline != nil { + switch mr.Pipeline.Source { + case "merge_request_event": + refTarget = fmt.Sprintf("refs/merge-requests/%d/head", pull.Num) + } + } + _, _, err = g.Client.Commits.SetCommitStatus(repo.FullName, pull.HeadCommit, &gitlab.SetCommitStatusOptions{ State: gitlabState, Context: gitlab.String(src), Description: gitlab.String(description), TargetURL: &url, - Ref: gitlab.String(pull.HeadBranch), + Ref: gitlab.String(refTarget), }) return err } diff --git a/server/events/vcs/gitlab_client_test.go b/server/events/vcs/gitlab_client_test.go index bbc6ace21..650799279 100644 --- a/server/events/vcs/gitlab_client_test.go +++ b/server/events/vcs/gitlab_client_test.go @@ -216,6 +216,9 @@ func TestGitlabClient_UpdateStatus(t *testing.T) { Equals(t, exp, string(body)) defer r.Body.Close() // nolint: errcheck w.Write([]byte("{}")) // nolint: errcheck + case "/api/v4/projects/runatlantis%2Fatlantis/merge_requests/1": + w.WriteHeader(http.StatusOK) + w.Write([]byte(pipelineSuccess)) // nolint: errcheck case "/api/v4/": // Rate limiter requests. w.WriteHeader(http.StatusOK)