Merge "gitlab: support the merge request approval event"

This commit is contained in:
Zuul 2020-08-01 00:21:44 +00:00 committed by Gerrit Code Review
commit 955f3bd64f
5 changed files with 55 additions and 2 deletions

View File

@ -124,6 +124,14 @@ the following options.
Comment added to merge request.
.. value:: approved
Merge request approved.
.. value:: unapproved
Merge request unapproved.
.. attr:: comment
This is only used for ``gl_merge_request`` and ``comment`` actions. It

View File

@ -1802,7 +1802,7 @@ class FakeGitlabMergeRequest(object):
def _updateTimeStamp(self):
self.updated_at = datetime.datetime.now()
def getMergeRequestOpenedEvent(self, action='open'):
def getMergeRequestEvent(self, action):
name = 'gl_merge_request'
data = {
'object_kind': 'merge_request',
@ -1823,9 +1823,18 @@ class FakeGitlabMergeRequest(object):
}
return (name, data)
def getMergeRequestOpenedEvent(self):
return self.getMergeRequestEvent(action='open')
def getMergeRequestUpdatedEvent(self):
self.addCommit()
return self.getMergeRequestOpenedEvent(action='update')
return self.getMergeRequestEvent(action='update')
def getMergeRequestApprovedEvent(self):
return self.getMergeRequestEvent(action='approved')
def getMergeRequestUnapprovedEvent(self):
return self.getMergeRequestEvent(action='unapproved')
def getMergeRequestCommentedEvent(self, note):
self.addNote(note)

View File

@ -22,6 +22,16 @@
comment: True
approval: False
- pipeline:
name: check-approval
manager: independent
trigger:
gitlab:
- event: gl_merge_request
action:
- approved
- unapproved
- pipeline:
name: post
post-review: true
@ -61,12 +71,19 @@
name: project-tag-job
run: playbooks/project-tag.yaml
- job:
name: project-test-approval
run: playbooks/project-test-approval.yaml
- project:
name: org/project
check:
jobs:
- project-test1
- project-test2
check-approval:
jobs:
- project-test-approval
post:
jobs:
- project-post-job

View File

@ -144,6 +144,23 @@ class TestGitlabDriver(ZuulTestCase):
], ordered=False
)
@simple_layout('layouts/basic-gitlab.yaml', driver='gitlab')
def test_merge_request_approved(self):
A = self.fake_gitlab.openFakeMergeRequest('org/project', 'master', 'A')
self.fake_gitlab.emitEvent(A.getMergeRequestApprovedEvent())
self.waitUntilSettled()
self.assertEqual(1, len(self.history))
self.fake_gitlab.emitEvent(A.getMergeRequestUnapprovedEvent())
self.waitUntilSettled()
self.assertEqual(2, len(self.history))
job = self.getJobFromHistory('project-test-approval')
zuulvars = job.parameters['zuul']
self.assertEqual('check-approval', zuulvars['pipeline'])
@simple_layout('layouts/basic-gitlab.yaml', driver='gitlab')
def test_merge_request_updated_builds_aborted(self):

View File

@ -132,6 +132,8 @@ class GitlabEventConnector(threading.Thread):
event.action = 'opened'
elif attrs['action'] == 'update':
event.action = 'changed'
elif attrs['action'] in ('approved', 'unapproved'):
event.action = attrs['action']
else:
# Do not handle other merge_request action for now.
return None