Pagure - handles pull-request.closed event

This event can be used to implement a promote pipeline.

Change-Id: Id39f6e43f66d2aed8c625c0749a57107fd11eb4d
This commit is contained in:
Fabien Boucher 2019-09-10 16:45:18 +02:00
parent 2f546dcc8e
commit 4fb8f83945
6 changed files with 88 additions and 1 deletions

View File

@ -101,6 +101,10 @@ the following options.
Pull request synchronized.
.. value:: closed
Pull request closed.
.. value:: comment
Comment added to pull request.

View File

@ -67,6 +67,28 @@
comment: true
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

View File

@ -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(

View File

@ -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
@ -102,5 +118,11 @@
- project:
name: org/project5
require-tag:
jobs:
- project-test
- project:
name: org/project6
require-trigger-pg-closed-merged:
jobs:
- project-test

View File

@ -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):

View File

@ -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