diff --git a/releasenotes/notes/detect-gitlab-merge-error-69816ea60127b363.yaml b/releasenotes/notes/detect-gitlab-merge-error-69816ea60127b363.yaml new file mode 100644 index 0000000000..a61b4129a4 --- /dev/null +++ b/releasenotes/notes/detect-gitlab-merge-error-69816ea60127b363.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + Fix detection of the failed merge in gitlab driver. diff --git a/tests/base.py b/tests/base.py index a8ba5ea6b3..d0c5fb16ce 100644 --- a/tests/base.py +++ b/tests/base.py @@ -2156,7 +2156,7 @@ class FakeGitlabAPIClient(gitlabconnection.GitlabAPIClient): mr = self._get_mr(match) mr.mergeMergeRequest() - return {}, 200, "", "PUT" + return {'state': 'merged'}, 200, "", "PUT" def addProject(self, project): self.addProjectByName(project.name) diff --git a/zuul/driver/gitlab/gitlabconnection.py b/zuul/driver/gitlab/gitlabconnection.py index 2270278333..11edd1094c 100644 --- a/zuul/driver/gitlab/gitlabconnection.py +++ b/zuul/driver/gitlab/gitlabconnection.py @@ -404,6 +404,10 @@ class GitlabAPIClient(): resp = self.put(self.baseurl + path, zuul_event_id=zuul_event_id) try: self._manage_error(*resp, zuul_event_id=zuul_event_id) + if resp[0]['state'] != 'merged': + raise MergeFailure( + "Merge request merge failed: %s" % resp.get('merge_error') + ) except GitlabAPIClientException as e: raise MergeFailure('Merge request merge failed: %s' % e) return resp[0]