gitlab: implement the merged pipeline requirement
Change-Id: Icdaee4e9f60bd9ec9c38cec0456dcb0ed1851560
This commit is contained in:
parent
bb66951cf7
commit
7fae9a5926
|
@ -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
|
||||
---------------------------------
|
||||
|
|
|
@ -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()]
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
require:
|
||||
gitlab:
|
||||
open: true
|
||||
merged: false
|
||||
trigger:
|
||||
gitlab:
|
||||
- event: gl_merge_request
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -112,6 +112,7 @@ class GitlabSource(BaseSource):
|
|||
f = GitlabRefFilter(
|
||||
connection_name=self.connection.connection_name,
|
||||
open=config.get('open'),
|
||||
merged=config.get('merged'),
|
||||
)
|
||||
return [f]
|
||||
|
||||
|
@ -126,6 +127,7 @@ class GitlabSource(BaseSource):
|
|||
def getRequireSchema():
|
||||
require = {
|
||||
'open': bool,
|
||||
'merged': bool,
|
||||
}
|
||||
return require
|
||||
|
||||
|
|
Loading…
Reference in New Issue