From 2bd3dc9adaa8752d57200b258cb7f88feaef7e02 Mon Sep 17 00:00:00 2001 From: Fabien Boucher Date: Tue, 21 Jul 2020 08:55:44 +0000 Subject: [PATCH] gitlab: support the MR merged event Also add a promote pipeline example in the reference pipelines. Change-Id: I7b3d21bca0cca4ff67110f1c3608571c1e0ad7bf --- .../pipelines/gitlab-reference-pipelines.yaml | 21 +++++++++++++++++++ doc/source/reference/drivers/gitlab.rst | 4 ++++ tests/base.py | 4 ++++ tests/fixtures/layouts/basic-gitlab.yaml | 16 ++++++++++++++ tests/unit/test_gitlab_driver.py | 10 +++++++++ zuul/driver/gitlab/gitlabconnection.py | 2 ++ 6 files changed, 57 insertions(+) diff --git a/doc/source/examples/pipelines/gitlab-reference-pipelines.yaml b/doc/source/examples/pipelines/gitlab-reference-pipelines.yaml index ebaad84fa0..884ac5fdef 100644 --- a/doc/source/examples/pipelines/gitlab-reference-pipelines.yaml +++ b/doc/source/examples/pipelines/gitlab-reference-pipelines.yaml @@ -65,6 +65,27 @@ approval: false sqlreporter: +- pipeline: + name: promote + post-review: true + manager: supercedent + precedence: high + require: + gitlab.com: + merged: true + trigger: + gitlab.com: + - event: gl_merge_request + action: merged + success: + gitlab.com: + comment: true + sqlreporter: + failure: + gitlab.com: + comment: true + sqlreporter: + - pipeline: name: post post-review: true diff --git a/doc/source/reference/drivers/gitlab.rst b/doc/source/reference/drivers/gitlab.rst index 73539dce4b..18afdd69aa 100644 --- a/doc/source/reference/drivers/gitlab.rst +++ b/doc/source/reference/drivers/gitlab.rst @@ -120,6 +120,10 @@ the following options. Merge request synchronized. + .. value:: merged + + Merge request merged. + .. value:: comment Comment added to merge request. diff --git a/tests/base.py b/tests/base.py index bf7cecf411..03a89bcc79 100644 --- a/tests/base.py +++ b/tests/base.py @@ -1859,6 +1859,10 @@ class FakeGitlabMergeRequest(object): self.addCommit() return self.getMergeRequestEvent(action='update') + def getMergeRequestMergedEvent(self): + self.mergeMergeRequest() + return self.getMergeRequestEvent(action='merge') + def getMergeRequestApprovedEvent(self): self.approved = True return self.getMergeRequestEvent(action='approved') diff --git a/tests/fixtures/layouts/basic-gitlab.yaml b/tests/fixtures/layouts/basic-gitlab.yaml index ec9f977af5..d1bc209842 100644 --- a/tests/fixtures/layouts/basic-gitlab.yaml +++ b/tests/fixtures/layouts/basic-gitlab.yaml @@ -43,6 +43,15 @@ labels: - gateit +- pipeline: + name: promote + manager: independent + trigger: + gitlab: + - event: gl_merge_request + action: + - merged + - pipeline: name: post post-review: true @@ -90,6 +99,10 @@ name: project-test-labeled run: playbooks/project-test-labeled.yaml +- job: + name: project-promote + run: playbooks/project-promote.yaml + - project: name: org/project check: @@ -102,6 +115,9 @@ check-labeled: jobs: - project-test-labeled + promote: + jobs: + - project-promote post: jobs: - project-post-job diff --git a/tests/unit/test_gitlab_driver.py b/tests/unit/test_gitlab_driver.py index e04e5cef0f..11edaf0c43 100644 --- a/tests/unit/test_gitlab_driver.py +++ b/tests/unit/test_gitlab_driver.py @@ -176,6 +176,16 @@ class TestGitlabDriver(ZuulTestCase): self.waitUntilSettled() self.assertEqual(1, len(self.history)) + @simple_layout('layouts/basic-gitlab.yaml', driver='gitlab') + def test_merge_request_merged(self): + + A = self.fake_gitlab.openFakeMergeRequest('org/project', 'master', 'A') + + self.fake_gitlab.emitEvent(A.getMergeRequestMergedEvent()) + self.waitUntilSettled() + self.assertEqual(1, len(self.history)) + self.assertHistory([{'name': 'project-promote'}]) + @simple_layout('layouts/basic-gitlab.yaml', driver='gitlab') def test_merge_request_updated_builds_aborted(self): diff --git a/zuul/driver/gitlab/gitlabconnection.py b/zuul/driver/gitlab/gitlabconnection.py index fe176a5944..2798d84eea 100644 --- a/zuul/driver/gitlab/gitlabconnection.py +++ b/zuul/driver/gitlab/gitlabconnection.py @@ -130,6 +130,8 @@ class GitlabEventConnector(threading.Thread): event.change_number) if attrs['action'] == 'open': event.action = 'opened' + elif attrs['action'] == 'merge': + event.action = 'merged' elif attrs['action'] == 'update' and "labels" not in body: event.action = 'changed' elif attrs['action'] == 'update' and "labels" in body: