summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabien Boucher <fboucher@redhat.com>2019-09-10 16:45:18 +0200
committerFabien Boucher <fboucher@redhat.com>2019-09-18 11:51:31 +0200
commit4fb8f839459249729d5350364086f9b2f32703b8 (patch)
tree8c1a3170c222fd31b09f23c51de10311563e66ee
parent2f546dcc8ec84625777d808fd05948800403e152 (diff)
downloadzuul-4fb8f839459249729d5350364086f9b2f32703b8.tar.gz
Pagure - handles pull-request.closed event
This event can be used to implement a promote pipeline. Change-Id: Id39f6e43f66d2aed8c625c0749a57107fd11eb4d
-rw-r--r--doc/source/admin/drivers/pagure.rst4
-rw-r--r--doc/source/admin/examples/pipelines/pagure-reference-pipelines.yaml22
-rw-r--r--tests/base.py9
-rw-r--r--tests/fixtures/layouts/requirements-pagure.yaml22
-rw-r--r--tests/unit/test_pagure_driver.py23
-rw-r--r--zuul/driver/pagure/pagureconnection.py9
6 files changed, 88 insertions, 1 deletions
diff --git a/doc/source/admin/drivers/pagure.rst b/doc/source/admin/drivers/pagure.rst
index 889ba8d37..84eec5dce 100644
--- a/doc/source/admin/drivers/pagure.rst
+++ b/doc/source/admin/drivers/pagure.rst
@@ -101,6 +101,10 @@ the following options.
Pull request synchronized.
+ .. value:: closed
+
+ Pull request closed.
+
.. value:: comment
Comment added to pull request.
diff --git a/doc/source/admin/examples/pipelines/pagure-reference-pipelines.yaml b/doc/source/admin/examples/pipelines/pagure-reference-pipelines.yaml
index a9a0a8b4c..b9a9d5fe0 100644
--- a/doc/source/admin/examples/pipelines/pagure-reference-pipelines.yaml
+++ b/doc/source/admin/examples/pipelines/pagure-reference-pipelines.yaml
@@ -68,6 +68,28 @@
sqlreporter:
- pipeline:
+ name: promote
+ post-review: true
+ manager: supercedent
+ precedence: high
+ require:
+ pagure.io:
+ merged: True
+ open: False
+ trigger:
+ pagure.io:
+ - event: pg_pull_request
+ action: closed
+ success:
+ pagure.io:
+ comment: true
+ sqlreporter:
+ failure:
+ pagure.io:
+ comment: true
+ sqlreporter:
+
+- pipeline:
name: post
post-review: true
manager: independent
diff --git a/tests/base.py b/tests/base.py
index 875bb82e6..f5cb437d5 100644
--- a/tests/base.py
+++ b/tests/base.py
@@ -876,6 +876,15 @@ class FakePagurePullRequest(object):
def getPullRequestOpenedEvent(self):
return self._getPullRequestEvent('pull-request.new')
+ def getPullRequestClosedEvent(self, merged=True):
+ if merged:
+ self.is_merged = True
+ self.status = 'Merged'
+ else:
+ self.is_merged = False
+ self.status = 'Closed'
+ return self._getPullRequestEvent('pull-request.closed')
+
def getPullRequestUpdatedEvent(self):
self._addCommitInPR()
self.addComment(
diff --git a/tests/fixtures/layouts/requirements-pagure.yaml b/tests/fixtures/layouts/requirements-pagure.yaml
index 36f785f30..998fa7fdb 100644
--- a/tests/fixtures/layouts/requirements-pagure.yaml
+++ b/tests/fixtures/layouts/requirements-pagure.yaml
@@ -66,6 +66,22 @@
pagure:
status: 'success'
+- pipeline:
+ name: require-trigger-pg-closed-merged
+ precedence: high
+ manager: independent
+ require:
+ pagure:
+ merged: True
+ open: False
+ trigger:
+ pagure:
+ - event: pg_pull_request
+ action: closed
+ success:
+ pagure:
+ comment: true
+
- job:
name: base
parent: null
@@ -103,4 +119,10 @@
name: org/project5
require-tag:
jobs:
+ - project-test
+
+- project:
+ name: org/project6
+ require-trigger-pg-closed-merged:
+ jobs:
- project-test \ No newline at end of file
diff --git a/tests/unit/test_pagure_driver.py b/tests/unit/test_pagure_driver.py
index 3f023beea..deb6ea3cc 100644
--- a/tests/unit/test_pagure_driver.py
+++ b/tests/unit/test_pagure_driver.py
@@ -406,6 +406,29 @@ class TestPagureDriver(ZuulTestCase):
self.waitUntilSettled()
self.assertEqual(1, len(self.history))
+ @simple_layout('layouts/requirements-pagure.yaml', driver='pagure')
+ def test_pull_request_closed(self):
+
+ A = self.fake_pagure.openFakePullRequest(
+ 'org/project6', 'master', 'A')
+
+ self.fake_pagure.emitEvent(A.getPullRequestOpenedEvent())
+ self.waitUntilSettled()
+ self.assertEqual(0, len(self.history))
+
+ # Validate a closed but not merged PR does not trigger the pipeline
+ self.fake_pagure.emitEvent(A.getPullRequestClosedEvent(merged=False))
+ self.waitUntilSettled()
+ self.assertEqual(0, len(self.history))
+
+ # Reset the status to Open
+ # Validate a closed and merged PR triggers the pipeline
+ A.status = 'Open'
+ A.is_merged = False
+ self.fake_pagure.emitEvent(A.getPullRequestClosedEvent())
+ self.waitUntilSettled()
+ self.assertEqual(1, len(self.history))
+
@simple_layout('layouts/merging-pagure.yaml', driver='pagure')
def test_merge_action_in_independent(self):
diff --git a/zuul/driver/pagure/pagureconnection.py b/zuul/driver/pagure/pagureconnection.py
index 313a900bf..d844a00b5 100644
--- a/zuul/driver/pagure/pagureconnection.py
+++ b/zuul/driver/pagure/pagureconnection.py
@@ -199,6 +199,7 @@ class PagureEventConnector(threading.Thread):
r"^\*\*Metadata Update", re.MULTILINE)
self.event_handler_mapping = {
'pull-request.comment.added': self._event_issue_comment,
+ 'pull-request.closed': self._event_pull_request_closed,
'pull-request.new': self._event_pull_request,
'pull-request.flag.added': self._event_flag_added,
'git.receive': self._event_ref_updated,
@@ -312,12 +313,18 @@ class PagureEventConnector(threading.Thread):
return event
def _event_pull_request(self, body):
- """ Handles pull request event """
+ """ Handles pull request opened event """
# https://fedora-fedmsg.readthedocs.io/en/latest/topics.html#pagure-pull-request-new
event, data = self._event_base(body)
event.action = 'opened'
return event
+ def _event_pull_request_closed(self, body):
+ """ Handles pull request closed event """
+ event, data = self._event_base(body)
+ event.action = 'closed'
+ return event
+
def _event_flag_added(self, body):
""" Handles flag added event """
# https://fedora-fedmsg.readthedocs.io/en/latest/topics.html#pagure-pull-request-flag-added