Merge "Pagure - add support for git.tag.creation event"

This commit is contained in:
Zuul 2019-12-04 19:31:51 +00:00 committed by Gerrit Code Review
commit 7bed463a48
4 changed files with 70 additions and 6 deletions

View File

@ -1461,6 +1461,20 @@ class FakePagureConnection(pagureconnection.PagureConnection):
}
return (name, data)
def getGitTagCreatedEvent(self, project, tag, rev):
name = 'pg_push'
data = {
'msg': {
'project_fullname': project,
'tag': tag,
'rev': rev
},
'msg_id': str(uuid.uuid4()),
'timestamp': 1427459070,
'topic': 'git.tag.creation',
}
return (name, data)
def setZuulWebPort(self, port):
self.zuul_web_port = port

View File

@ -32,6 +32,15 @@
- event: pg_push
ref: ^refs/heads/.*$
- pipeline:
name: tag
post-review: true
manager: independent
trigger:
pagure:
- event: pg_push
ref: ^refs/tags/.*$
- job:
name: base
parent: null
@ -49,6 +58,10 @@
name: project-post-job
run: playbooks/project-post.yaml
- job:
name: project-tag-job
run: playbooks/project-tag.yaml
- project:
name: org/project
check:
@ -58,3 +71,6 @@
post:
jobs:
- project-post-job
tag:
jobs:
- project-tag-job

View File

@ -12,7 +12,9 @@
# License for the specific language governing permissions and limitations
# under the License.
import os
import re
import git
import yaml
import socket
@ -241,6 +243,28 @@ class TestPagureDriver(ZuulTestCase):
], ordered=False
)
@simple_layout('layouts/basic-pagure.yaml', driver='pagure')
def test_tag_created(self):
path = os.path.join(self.upstream_root, 'org/project')
repo = git.Repo(path)
repo.create_tag('1.0')
tagsha = repo.tags['1.0'].commit.hexsha
event = self.fake_pagure.getGitTagCreatedEvent(
'org/project', '1.0', tagsha)
self.fake_pagure.emitEvent(event)
self.waitUntilSettled()
self.assertEqual(1, len(self.history))
self.assertEqual(
'SUCCESS',
self.getJobFromHistory('project-tag-job').result)
job = self.getJobFromHistory('project-tag-job')
zuulvars = job.parameters['zuul']
self.assertEqual('refs/tags/1.0', zuulvars['ref'])
self.assertEqual('tag', zuulvars['pipeline'])
self.assertEqual('project-tag-job', zuulvars['job'])
self.assertEqual(tagsha, zuulvars['newrev'])
@simple_layout('layouts/basic-pagure.yaml', driver='pagure')
def test_client_dequeue_change_pagure(self):

View File

@ -68,8 +68,6 @@ from zuul.driver.pagure.paguremodel import PagureTriggerEvent, PullRequest
# api_token=QX29SXAW96C2CTLUNA5JKEEU65INGWTO2B5NHBDBRMF67S7PYZWCS0L1AKHXXXXX
#
# Current Non blocking issues:
# - Pagure does not send event when git tag is added/removed
# https://pagure.io/pagure/issue/4400 (merged so need to be used)
# - Pagure does not send the oldrev info when a branch is updated/created
# https://pagure.io/pagure/issue/4401
# - Pagure does not send an event when a branch is deleted
@ -209,7 +207,8 @@ class PagureEventConnector(threading.Thread):
'pull-request.initial_comment.edited':
self._event_issue_initial_comment,
'pull-request.tag.added':
self._event_pull_request_tags_changed
self._event_pull_request_tags_changed,
'git.tag.creation': self._event_tag_created,
}
def stop(self):
@ -336,6 +335,15 @@ class PagureEventConnector(threading.Thread):
event.action = 'status'
return event
def _event_tag_created(self, body):
event, data = self._event_base(body)
event.project_name = data.get('project_fullname')
event.tag = data.get('tag')
event.ref = 'refs/tags/%s' % event.tag
event.oldrev = None
event.newrev = data.get('rev')
return event
def _event_ref_updated(self, body):
""" Handles ref updated """
# https://fedora-fedmsg.readthedocs.io/en/latest/topics.html#git-receive
@ -726,16 +734,17 @@ class PagureConnection(BaseConnection):
project, event.ref))
if event.ref and event.ref.startswith('refs/tags/'):
change = Tag(project)
change.tag = event.ref[len('refs/tags/'):]
change.tag = event.tag
change.branch = None
elif event.ref and event.ref.startswith('refs/heads/'):
change = Branch(project)
change.branch = event.ref[len('refs/heads/'):]
change.branch = event.branch
else:
change = Ref(project)
change.ref = event.ref
change.oldrev = event.oldrev
change.newrev = event.newrev
change.branch = event.branch
change.url = self.getGitwebUrl(project, sha=event.newrev)
# Pagure does not send files details in the git-receive event.
@ -744,6 +753,7 @@ class PagureConnection(BaseConnection):
change.files = None
change.source_event = event
return change
def _getChange(self, project, number, patchset=None,