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
|
A boolean value (``true`` or ``false``) that indicates whether
|
||||||
the Merge Request must be open in order to be enqueued.
|
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
|
Reference pipelines configuration
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
|
@ -1746,6 +1746,16 @@ class FakeGitlabMergeRequest(object):
|
||||||
self.state = 'closed'
|
self.state = 'closed'
|
||||||
self._updateTimeStamp()
|
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):
|
def _addCommitInMR(self, files=[], reset=False):
|
||||||
repo = self._getRepo()
|
repo = self._getRepo()
|
||||||
ref = repo.references[self.getMRReference()]
|
ref = repo.references[self.getMRReference()]
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
require:
|
require:
|
||||||
gitlab:
|
gitlab:
|
||||||
open: true
|
open: true
|
||||||
|
merged: false
|
||||||
trigger:
|
trigger:
|
||||||
gitlab:
|
gitlab:
|
||||||
- event: gl_merge_request
|
- event: gl_merge_request
|
||||||
|
|
|
@ -475,3 +475,21 @@ class TestGitlabDriver(ZuulTestCase):
|
||||||
A.getMergeRequestCommentedEvent('recheck'))
|
A.getMergeRequestCommentedEvent('recheck'))
|
||||||
self.waitUntilSettled()
|
self.waitUntilSettled()
|
||||||
self.assertEqual(1, len(self.history))
|
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
|
# The RefFilter should be understood as RequireFilter (it maps to
|
||||||
# pipeline requires definition)
|
# pipeline requires definition)
|
||||||
class GitlabRefFilter(RefFilter):
|
class GitlabRefFilter(RefFilter):
|
||||||
def __init__(self, connection_name, open=None):
|
def __init__(self, connection_name, open=None, merged=None):
|
||||||
RefFilter.__init__(self, connection_name)
|
RefFilter.__init__(self, connection_name)
|
||||||
self.open = open
|
self.open = open
|
||||||
|
self.merged = merged
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
ret = '<GitlabRefFilter connection_name: %s ' % self.connection_name
|
ret = '<GitlabRefFilter connection_name: %s ' % self.connection_name
|
||||||
if self.open is not None:
|
if self.open is not None:
|
||||||
ret += ' open: %s' % self.open
|
ret += ' open: %s' % self.open
|
||||||
|
if self.merged is not None:
|
||||||
|
ret += ' merged: %s' % self.merged
|
||||||
ret += '>'
|
ret += '>'
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@ -171,4 +174,8 @@ class GitlabRefFilter(RefFilter):
|
||||||
if change.open != self.open:
|
if change.open != self.open:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
if self.merged is not None:
|
||||||
|
if change.is_merged != self.merged:
|
||||||
|
return False
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -112,6 +112,7 @@ class GitlabSource(BaseSource):
|
||||||
f = GitlabRefFilter(
|
f = GitlabRefFilter(
|
||||||
connection_name=self.connection.connection_name,
|
connection_name=self.connection.connection_name,
|
||||||
open=config.get('open'),
|
open=config.get('open'),
|
||||||
|
merged=config.get('merged'),
|
||||||
)
|
)
|
||||||
return [f]
|
return [f]
|
||||||
|
|
||||||
|
@ -126,6 +127,7 @@ class GitlabSource(BaseSource):
|
||||||
def getRequireSchema():
|
def getRequireSchema():
|
||||||
require = {
|
require = {
|
||||||
'open': bool,
|
'open': bool,
|
||||||
|
'merged': bool,
|
||||||
}
|
}
|
||||||
return require
|
return require
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue