Merge "gitlab: implement the merged pipeline requirement"

This commit is contained in:
Zuul 2020-08-01 00:17:21 +00:00 committed by Gerrit Code Review
commit af8e3ef30e
6 changed files with 44 additions and 1 deletions

View File

@ -187,6 +187,11 @@ in the *opened* state (not merged yet).
A boolean value (``true`` or ``false``) that indicates whether
the Merge Request must be open in order to be enqueued.
.. attr:: merged
A boolean value (``true`` or ``false``) that indicates whether
the Merge Request must be merged or not in order to be enqueued.
Reference pipelines configuration
---------------------------------

View File

@ -1746,6 +1746,16 @@ class FakeGitlabMergeRequest(object):
self.state = 'closed'
self._updateTimeStamp()
def mergeMergeRequest(self):
self.state = 'merged'
self._updateTimeStamp()
self.merged_at = self.updated_at
def reopenMergeRequest(self):
self.state = 'opened'
self._updateTimeStamp()
self.merged_at = None
def _addCommitInMR(self, files=[], reset=False):
repo = self._getRepo()
ref = repo.references[self.getMRReference()]

View File

@ -4,6 +4,7 @@
require:
gitlab:
open: true
merged: false
trigger:
gitlab:
- event: gl_merge_request

View File

@ -475,3 +475,21 @@ class TestGitlabDriver(ZuulTestCase):
A.getMergeRequestCommentedEvent('recheck'))
self.waitUntilSettled()
self.assertEqual(1, len(self.history))
# Merge the MR
A.mergeMergeRequest()
# A recheck will not trigger the job
self.fake_gitlab.emitEvent(
A.getMergeRequestCommentedEvent('recheck'))
self.waitUntilSettled()
self.assertEqual(1, len(self.history))
# Re-open the MR
A.reopenMergeRequest()
# A recheck will trigger the job
self.fake_gitlab.emitEvent(
A.getMergeRequestCommentedEvent('recheck'))
self.waitUntilSettled()
self.assertEqual(2, len(self.history))

View File

@ -155,14 +155,17 @@ class GitlabEventFilter(EventFilter):
# The RefFilter should be understood as RequireFilter (it maps to
# pipeline requires definition)
class GitlabRefFilter(RefFilter):
def __init__(self, connection_name, open=None):
def __init__(self, connection_name, open=None, merged=None):
RefFilter.__init__(self, connection_name)
self.open = open
self.merged = merged
def __repr__(self):
ret = '<GitlabRefFilter connection_name: %s ' % self.connection_name
if self.open is not None:
ret += ' open: %s' % self.open
if self.merged is not None:
ret += ' merged: %s' % self.merged
ret += '>'
return ret
@ -171,4 +174,8 @@ class GitlabRefFilter(RefFilter):
if change.open != self.open:
return False
if self.merged is not None:
if change.is_merged != self.merged:
return False
return True

View File

@ -113,6 +113,7 @@ class GitlabSource(BaseSource):
f = GitlabRefFilter(
connection_name=self.connection.connection_name,
open=config.get('open'),
merged=config.get('merged'),
)
return [f]
@ -127,6 +128,7 @@ class GitlabSource(BaseSource):
def getRequireSchema():
require = {
'open': bool,
'merged': bool,
}
return require