From 190be3eafa005c224b426387178f623c01048dba Mon Sep 17 00:00:00 2001 From: Kamil Páral Date: Nov 23 2017 13:25:34 +0000 Subject: Merge branch 'develop' --- diff --git a/Makefile b/Makefile index 3c2aaf7..9811f89 100644 --- a/Makefile +++ b/Makefile @@ -22,15 +22,14 @@ SRC=taskotron-trigger MODULENAME=jobtriggers # Variables used for packaging +TARGETDIST:=.fc26 +BUILDTARGET=fedora-26-x86_64 SPECFILE=$(SRC).spec BASEARCH:=$(shell uname -i) -DIST:=$(shell rpm --eval '%{dist}') -VERSION:=$(shell rpmspec -q --queryformat="%{VERSION}\n" $(SPECFILE) | uniq) -RELEASE:=$(subst $(DIST),,$(shell rpmspec -q --queryformat="%{RELEASE}\n" $(SPECFILE) | uniq)) +VERSION:=$(shell rpm -q --queryformat="%{VERSION}\n" --specfile $(SPECFILE) | uniq) +RELEASE:=$(shell rpm -q --queryformat="%{RELEASE}\n" --specfile $(SPECFILE) --define "dist $(TARGETDIST)" | uniq) NVR:=$(SRC)-$(VERSION)-$(RELEASE) GITBRANCH:=$(shell git rev-parse --abbrev-ref HEAD) -TARGETDIST:=fc24 -BUILDTARGET=fedora-24-x86_64 .PHONY: test test: $(VENV) @@ -76,16 +75,16 @@ $(SRC)-$(VERSION).tar.gz: .PHONY: mocksrpm mocksrpm: archive mock -r $(BUILDTARGET) --buildsrpm --spec $(SPECFILE) --sources . - cp /var/lib/mock/$(BUILDTARGET)/result/$(NVR).$(TARGETDIST).src.rpm . + cp /var/lib/mock/$(BUILDTARGET)/result/$(NVR).src.rpm . .PHONY: mockbuild mockbuild: mocksrpm - mock -r $(BUILDTARGET) --no-clean --rebuild $(NVR).$(TARGETDIST).src.rpm - cp /var/lib/mock/$(BUILDTARGET)/result/$(NVR).$(TARGETDIST).noarch.rpm . + mock -r $(BUILDTARGET) --no-clean --rebuild $(NVR).src.rpm + cp /var/lib/mock/$(BUILDTARGET)/result/$(NVR).noarch.rpm . #.PHONY: kojibuild #kojibuild: mocksrpm -# koji build --scratch dist-6E-epel-testing-candidate $(NVR).$(TARGETDIST).src.rpm +# koji build --scratch dist-6E-epel-testing-candidate $(NVR).src.rpm .PHONY: nvr nvr: diff --git a/conf/trigger_rules.yml.example b/conf/trigger_rules.yml.example index 59e2e3a..c11b09f 100644 --- a/conf/trigger_rules.yml.example +++ b/conf/trigger_rules.yml.example @@ -58,3 +58,8 @@ message_type: CloudCompose do: - {tasks: [fedora-cloud-tests]} + +- when: + message_type: GitHubPullRequestOpened + do: + - {tasks: [task-mtf]} diff --git a/fedmsg.d/taskotron-trigger.py b/fedmsg.d/taskotron-trigger.py index 89ef72a..8c2afd0 100644 --- a/fedmsg.d/taskotron-trigger.py +++ b/fedmsg.d/taskotron-trigger.py @@ -5,4 +5,5 @@ config = { 'taskotron.paguregitreceivejobconsumer.enabled': True, 'taskotron.cloudcomposecompletedconsumer.enabled': True, 'taskotron.modulebuilddonejobconsumer.enabled': True, + 'taskotron.githubpropenedjobconsumer.enabled': True, } diff --git a/jobtriggers/github_pull_request_opened.py b/jobtriggers/github_pull_request_opened.py new file mode 100644 index 0000000..250e2e8 --- /dev/null +++ b/jobtriggers/github_pull_request_opened.py @@ -0,0 +1,45 @@ +import koji +import fedmsg +import fedmsg.encoding +import fedmsg.consumers + +from . import config, utils +from .jobtrigger import JobTrigger +from . import exceptions as exc + +MESSAGE_TYPE = "GitHubPullRequestOpened" +ITEM_TYPE = "pull_request" + + +class GithubPullRequestOpenedJobTrigger(JobTrigger): + + def process(self, msg): + + data = { + "_msg": msg, + "message_type": MESSAGE_TYPE, + "item": msg['msg']['pull_request']['html_url'], + "item_type": ITEM_TYPE, + "git_host": "github", + "repo_name": msg['msg']['repository']['full_name'], + } + return data + + +class GithubPullRequestOpenedJobConsumer(fedmsg.consumers.FedmsgConsumer): + topic = "org.fedoraproject.%s.github.pull_request.opened" % config.deployment_type + jsonify = False + config_key = 'taskotron.githubpropenedjobconsumer.enabled' + + def __init__(self, *args, **kw): + super(GithubPullRequestOpenedJobConsumer, self).__init__(*args, **kw) + self.trigger = GithubPullRequestOpenedJobTrigger(self.log) + + def consume(self, message): + msg = fedmsg.encoding.loads(message.body) + try: + data = self.trigger.process(msg) + self.trigger.do_trigger(data) + except exc.TriggerMsgError, e: + self.log.debug(e) + return diff --git a/setup.py b/setup.py index 0173ae4..ab64adc 100644 --- a/setup.py +++ b/setup.py @@ -19,11 +19,12 @@ moksha_consumer = ( 'paguregitreceivejobconsumer = jobtriggers.pagure_git_received:PagureGitReceiveJobConsumer', 'cloudcomposejobconsumer = jobtriggers.cloud_compose_complete_msg:CloudComposeCompletedConsumer', 'modulebuilddonejobconsumer = jobtriggers.module_build_msg:ModuleBuildDoneJobConsumer', + 'githubpropenedjobconsumer = jobtriggers.github_pull_request_opened:GithubPullRequestOpenedJobConsumer', ) setup( name='jobtriggers', - version='0.4.8', + version='0.4.9', description='triggering jobs via fedmsg', author='Tim Flink', author_email='tflink@fedoraproject.org', diff --git a/taskotron-trigger.spec b/taskotron-trigger.spec index ef28232..c3c8b57 100644 --- a/taskotron-trigger.spec +++ b/taskotron-trigger.spec @@ -1,6 +1,6 @@ Name: taskotron-trigger # NOTE: if you update version, *make sure* to also update `setup.py` -Version: 0.4.8 +Version: 0.4.9 Release: 1%{?dist} Summary: Triggering Taskotron jobs via fedmsg @@ -13,13 +13,21 @@ BuildArch: noarch Requires: fedmsg Requires: fedmsg-hub Requires: git +%if 0%{?fedora} <= 26 Requires: koji +%else +Requires: python2-koji +%endif Requires: python-mongoquery Requires: python-requests Requires: python-twisted Requires: PyYAML BuildRequires: fedmsg +%if 0%{?fedora} <= 26 BuildRequires: koji +%else +BuildRequires: python2-koji +%endif BuildRequires: python2-devel BuildRequires: python-dingus BuildRequires: python-mock @@ -76,6 +84,12 @@ install -d %{buildroot}%{_sharedstatedir}/taskotron-trigger/ %config(noreplace) %{_sysconfdir}/logrotate.d/taskotron-trigger %changelog +* Thu Nov 23 2017 Kamil Páral - 0.4.9-1 +- Added consumer for Github's Pull Requests + +* Thu Jul 27 2017 Fedora Release Engineering - 0.4.8-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + * Tue Apr 4 2017 Martin Krizek - 0.4.8-1 - Add MBS (Module Build Service) consumer (D1180) - Change name of 'branch' parameter so it isn't squashed in buildbot (D1183) @@ -90,6 +104,9 @@ install -d %{buildroot}%{_sharedstatedir}/taskotron-trigger/ * Thu Mar 2 2017 Tim Flink - 0.4.5-1 - add configuration option to listen for stg fedmsgs +* Sat Feb 11 2017 Fedora Release Engineering - 0.4.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + * Fri Feb 10 2017 Kamil Páral - 0.4.4-2 - add python-pytest-cov dependency - use the same test approach we use in development (just run py.test and diff --git a/testing/test_github_pr_opened_trigger.py b/testing/test_github_pr_opened_trigger.py new file mode 100644 index 0000000..0bdfdaa --- /dev/null +++ b/testing/test_github_pr_opened_trigger.py @@ -0,0 +1,95 @@ +import pytest +from dingus import Dingus +from munch import Munch +from copy import deepcopy +import fedmsg.encoding +import fedmsg.consumers + +from jobtriggers import github_pull_request_opened + + +@pytest.mark.usefixtures('prepare') +class TestKojiTagChangedJobConsumer(): + + @pytest.fixture + def prepare(self, monkeypatch): + + self.ref_pr_url = "https://github.com/fedora-infra/bodhi/pull/1882" + self.ref_type = 'pull_request' + self.ref_git_host = "github" + self.ref_repo_name = "fedora-infra/bodhi" + self.ref_tasks = ['foo', 'bar'] + self.ref_validarches = ['x86_64', 'i386'] + + self.ref_message = self._create_msg(self.ref_pr_url, self.ref_repo_name) + + self.ref_data = { + "_msg": {}, + "message_type": "GitHubPullRequestOpened", + "item": self.ref_pr_url, + "item_type": self.ref_type, + "git_host": self.ref_git_host, + "repo_name": self.ref_repo_name, + } + + stub_hub = Munch(config=Munch(get=0)) + self.helper = github_pull_request_opened.GithubPullRequestOpenedJobConsumer(stub_hub) + + self.helper.trigger.runner = Dingus() + github_pull_request_opened.config.trigger_rules_template = """--- +- do: + - {tasks: %s} + when: {message_type: GitHubPullRequestOpened} +- do: + - {tasks: [%s]} + when: {message_type: GitHubPullRequestOpened, git_host: github} +- do: + - {tasks: [%s]} + when: {message_type: GitHubPullRequestOpened, git_host: pagure} +""" % (self.ref_tasks, self.ref_tasks[0], self.ref_tasks[1]) + + github_pull_request_opened.config.valid_arches = self.ref_validarches + github_pull_request_opened.config.job_logging = False + + def _create_msg(self, ref_pr_url, ref_repo_name): + return Munch(body='{"i": 1,\ + "msg": {\ + "pull_request": {"html_url": "%s"},\ + "repository": {"full_name": "%s"}\ + },\ + "timestamp": 1359603469.21164,\ + "topic": "org.fedoraproject.prod.buildsys.tag",\ + "username": "apache"}' % + (ref_pr_url, ref_repo_name)) + + def test_consume(self): + self.helper.consume(self.ref_message) + + runner_calls = self.helper.trigger.runner.trigger_job.calls() + + assert len(runner_calls) == 6 + + assert runner_calls[0][1] == (self.ref_pr_url, self.ref_type, + self.ref_tasks[0], self.ref_validarches[0]) + assert runner_calls[1][1] == (self.ref_pr_url, self.ref_type, + self.ref_tasks[0], self.ref_validarches[1]) + assert runner_calls[2][1] == (self.ref_pr_url, self.ref_type, + self.ref_tasks[1], self.ref_validarches[0]) + assert runner_calls[3][1] == (self.ref_pr_url, self.ref_type, + self.ref_tasks[1], self.ref_validarches[1]) + assert runner_calls[4][1] == (self.ref_pr_url, self.ref_type, + self.ref_tasks[0], self.ref_validarches[0]) + assert runner_calls[5][1] == (self.ref_pr_url, self.ref_type, + self.ref_tasks[0], self.ref_validarches[1]) + + def test_trigger_data(self): + trigger = github_pull_request_opened.GithubPullRequestOpenedJobTrigger(Dingus()) + msg = fedmsg.encoding.loads(self.ref_message.body) + data = trigger.process(msg) + + assert data['_msg'] == msg + assert data['message_type'] == github_pull_request_opened.MESSAGE_TYPE + assert data['item_type'] == github_pull_request_opened.ITEM_TYPE + assert data['item'] == self.ref_pr_url + assert data['git_host'] == 'github' + assert data['repo_name'] == self.ref_repo_name