Details
Details
- Reviewers
tflink - Commits
- rTRGRd6d069168bb8: Fix blacklisting releases of the form: '1.el7.1'
tests included
Diff Detail
Diff Detail
- Repository
- rTRGR taskotron-trigger
- Lint
Lint Skipped - Unit
Unit Tests Skipped
tflink |
tests included
Lint Skipped |
Unit Tests Skipped |
Path | Packages | |||
---|---|---|---|---|
M | jobtriggers/koji_build_msg.py (8 lines) | |||
M | jobtriggers/koji_tag_msg.py (10 lines) | |||
M | jobtriggers/utils.py (3 lines) | |||
M | testing/test_koji_build_trigger.py (2 lines) | |||
M | testing/test_koji_tag_trigger.py (2 lines) | |||
M | testing/test_utils.py (15 lines) |
Commit | Tree | Parents | Author | Summary | Date |
---|---|---|---|---|---|
b2f25fe268b1 | 3446da597036 | 5bd6b6476732 | Martin Krizek | Fix blacklisting releases of the form: '1.el7.1' (Show More…) | Sep 9 2014, 10:58 AM |
Show All 15 Lines | 15 | def __init__(self, *args, **kw): | |||
---|---|---|---|---|---|
16 | super(KojiBuildCompletedJobTrigger, self).__init__(*args, **kw) | 16 | super(KojiBuildCompletedJobTrigger, self).__init__(*args, **kw) | ||
17 | 17 | | |||
18 | def consume(self, message): | 18 | def consume(self, message): | ||
19 | usable_message = fedmsg.encoding.loads(message.body) | 19 | usable_message = fedmsg.encoding.loads(message.body) | ||
20 | 20 | | |||
21 | release = usable_message['msg']['release'] | 21 | release = usable_message['msg']['release'] | ||
22 | state = usable_message['msg']['new'] | 22 | state = usable_message['msg']['new'] | ||
23 | 23 | | |||
24 | # we only look for successfuly completed builds | 24 | # filter builds | ||
25 | if state != koji.BUILD_STATES['COMPLETE']: | 25 | if state != koji.BUILD_STATES['COMPLETE'] or utils.blacklist_releases(release): | ||
26 | return | | |||
27 | | ||||
28 | # do not schledule jobs for blacklisted releases | | |||
29 | if release.endswith(tuple(config.blacklist_releases)): | | |||
30 | return | 26 | return | ||
31 | 27 | | |||
32 | name = usable_message['msg']['name'] | 28 | name = usable_message['msg']['name'] | ||
33 | version = usable_message['msg']['version'] | 29 | version = usable_message['msg']['version'] | ||
34 | buildid = usable_message['msg']['build_id'] | 30 | buildid = usable_message['msg']['build_id'] | ||
35 | 31 | | |||
36 | envr = "%s-%s-%s" % (name, version, release) | 32 | envr = "%s-%s-%s" % (name, version, release) | ||
37 | 33 | | |||
38 | arches = utils.get_arches(buildid=buildid) | 34 | arches = utils.get_arches(buildid=buildid) | ||
39 | 35 | | |||
40 | self.trigger_tasks(envr, ITEM_TYPE, config.koji_build_completed_tasks, arches) | 36 | self.trigger_tasks(envr, ITEM_TYPE, config.koji_build_completed_tasks, arches) |
1 | from copy import deepcopy | 1 | from copy import deepcopy | ||
---|---|---|---|---|---|
2 | 2 | | |||
3 | import fedmsg | 3 | import fedmsg | ||
4 | import fedmsg.encoding | 4 | import fedmsg.encoding | ||
5 | import moksha.hub.reactor | 5 | import moksha.hub.reactor | ||
6 | 6 | | |||
7 | from twisted.internet.task import LoopingCall | 7 | from twisted.internet.task import LoopingCall | ||
8 | 8 | | |||
9 | from . import config | 9 | from . import config, utils | ||
10 | from . import JobTrigger | 10 | from . import JobTrigger | ||
11 | 11 | | |||
12 | ITEM_TYPE = 'koji_tag' | 12 | ITEM_TYPE = 'koji_tag' | ||
13 | 13 | | |||
14 | class KojiTagChangedJobTrigger(JobTrigger): | 14 | class KojiTagChangedJobTrigger(JobTrigger): | ||
15 | topic = "org.fedoraproject.prod.buildsys.tag" | 15 | topic = "org.fedoraproject.prod.buildsys.tag" | ||
16 | jsonify = False | 16 | jsonify = False | ||
17 | config_key = 'taskotron.kojitagchangedjobtrigger.enabled' | 17 | config_key = 'taskotron.kojitagchangedjobtrigger.enabled' | ||
Show All 24 Lines | 41 | else: | |||
42 | self.log.debug("Woke up, but there were no messages.") | 42 | self.log.debug("Woke up, but there were no messages.") | ||
43 | 43 | | |||
44 | def consume(self, message): | 44 | def consume(self, message): | ||
45 | usable_message = fedmsg.encoding.loads(message.body) | 45 | usable_message = fedmsg.encoding.loads(message.body) | ||
46 | 46 | | |||
47 | koji_tag = usable_message['msg']['tag'] | 47 | koji_tag = usable_message['msg']['tag'] | ||
48 | release = usable_message['msg']['release'] | 48 | release = usable_message['msg']['release'] | ||
49 | 49 | | |||
50 | # we want only pending tags | 50 | # filter tags | ||
51 | if not koji_tag.endswith('pending'): | 51 | if not koji_tag.endswith('pending') or utils.blacklist_releases(release): | ||
52 | return | | |||
53 | | ||||
54 | # do not schledule jobs for blacklisted releases | | |||
55 | if release.endswith(tuple(config.blacklist_releases)): | | |||
56 | return | 52 | return | ||
57 | 53 | | |||
58 | if not len(self.queued_tags): | 54 | if not len(self.queued_tags): | ||
59 | self.log.info('setting fuse (%d seconds) for koji_tag %s', config.fuse_delay, koji_tag) | 55 | self.log.info('setting fuse (%d seconds) for koji_tag %s', config.fuse_delay, koji_tag) | ||
60 | elif koji_tag not in self.queued_tags: | 56 | elif koji_tag not in self.queued_tags: | ||
61 | self.log.info('adding koji_tag %s to the fuse queue', koji_tag) | 57 | self.log.info('adding koji_tag %s to the fuse queue', koji_tag) | ||
62 | 58 | | |||
63 | self.queued_tags.add(koji_tag) | 59 | self.queued_tags.add(koji_tag) |
Show All 21 Lines | |||||
22 | 22 | | |||
23 | 23 | | |||
24 | def log_job(logname, item, item_type, task, arch): | 24 | def log_job(logname, item, item_type, task, arch): | ||
25 | now = datetime.datetime.now() | 25 | now = datetime.datetime.now() | ||
26 | 26 | | |||
27 | with open(logname, 'a') as csvfile: | 27 | with open(logname, 'a') as csvfile: | ||
28 | writer = csv.writer(csvfile, delimiter=';') | 28 | writer = csv.writer(csvfile, delimiter=';') | ||
29 | writer.writerow([now, item, item_type, task, arch]) | 29 | writer.writerow([now, item, item_type, task, arch]) | ||
30 | | ||||
31 | def blacklist_releases(release): | ||||
32 | return any(b in release for b in config.blacklist_releases) |
Show First 20 Lines • Show All 63 Lines • ▼ Show 20 Line(s) | 61 | def test_consume_notcomplete_state(self): | |||
---|---|---|---|---|---|
64 | 64 | | |||
65 | self.helper.consume(self.ref_message) | 65 | self.helper.consume(self.ref_message) | ||
66 | 66 | | |||
67 | trigger_calls = self.helper.trigger.trigger_job.calls() | 67 | trigger_calls = self.helper.trigger.trigger_job.calls() | ||
68 | 68 | | |||
69 | assert trigger_calls == [] | 69 | assert trigger_calls == [] | ||
70 | 70 | | |||
71 | def test_consume_blacklisted_release(self): | 71 | def test_consume_blacklisted_release(self): | ||
72 | ref_release = '3.el5' | 72 | ref_release = '3.el5.1' | ||
73 | self._create_msg(self.ref_new, self.ref_name, ref_release, self.ref_version) | 73 | self._create_msg(self.ref_new, self.ref_name, ref_release, self.ref_version) | ||
74 | 74 | | |||
75 | self.helper.consume(self.ref_message) | 75 | self.helper.consume(self.ref_message) | ||
76 | 76 | | |||
77 | trigger_calls = self.helper.trigger.trigger_job.calls() | 77 | trigger_calls = self.helper.trigger.trigger_job.calls() | ||
78 | 78 | | |||
79 | assert trigger_calls == [] | 79 | assert trigger_calls == [] |
Show First 20 Lines • Show All 79 Lines • ▼ Show 20 Line(s) | 73 | def test_delayed_consume_upgradepath(self): | |||
---|---|---|---|---|---|
80 | 80 | | |||
81 | assert len(trigger_calls) == 1 | 81 | assert len(trigger_calls) == 1 | ||
82 | 82 | | |||
83 | assert trigger_calls[0][1] == (ref_tag, koji_tag_msg.ITEM_TYPE, self.ref_tasks[0], self.ref_arch) | 83 | assert trigger_calls[0][1] == (ref_tag, koji_tag_msg.ITEM_TYPE, self.ref_tasks[0], self.ref_arch) | ||
84 | 84 | | |||
85 | assert self.helper.queued_tags == set() | 85 | assert self.helper.queued_tags == set() | ||
86 | 86 | | |||
87 | def test_consume_blacklisted_release(self): | 87 | def test_consume_blacklisted_release(self): | ||
88 | ref_release = '3.el5' | 88 | ref_release = '3.el5.1' | ||
89 | self._create_msg(self.ref_name, ref_release, self.ref_tag, self.ref_version) | 89 | self._create_msg(self.ref_name, ref_release, self.ref_tag, self.ref_version) | ||
90 | 90 | | |||
91 | self.helper.consume(self.ref_message) | 91 | self.helper.consume(self.ref_message) | ||
92 | 92 | | |||
93 | assert self.helper.queued_tags == set([]) | 93 | assert self.helper.queued_tags == set([]) |
1 | from dingus import Dingus | 1 | from dingus import Dingus | ||
---|---|---|---|---|---|
2 | 2 | | |||
3 | from jobtriggers import utils | 3 | from jobtriggers import utils, config | ||
4 | 4 | | |||
5 | 5 | | |||
6 | class TestBodhiJobTrigger(): | 6 | class TestBodhiJobTrigger(): | ||
7 | def setup_method(self, method): | 7 | def setup_method(self, method): | ||
8 | self.ref_validarches = ['i386', 'x86_64'] | 8 | self.ref_validarches = ['i386', 'x86_64'] | ||
9 | self.ref_nvr = 'foo' | 9 | self.ref_nvr = 'foo' | ||
10 | self.ref_buildid = 1 | 10 | self.ref_buildid = 1 | ||
11 | self.ref_rpmarches = [{'arch': 'i386'}, {'arch': 'x86_64'}] | 11 | self.ref_rpmarches = [{'arch': 'i386'}, {'arch': 'x86_64'}] | ||
12 | self.ref_build = {'id': self.ref_buildid} | 12 | self.ref_build = {'id': self.ref_buildid} | ||
13 | self.ref_release = '3.el6' | ||||
13 | 14 | | |||
14 | def test_get_arches_by_buildid(self, monkeypatch): | 15 | def test_get_arches_by_buildid(self, monkeypatch): | ||
15 | monkeypatch.setattr(utils, 'koji_client', Dingus(listRPMs__returns=self.ref_rpmarches)) | 16 | monkeypatch.setattr(utils, 'koji_client', Dingus(listRPMs__returns=self.ref_rpmarches)) | ||
16 | 17 | | |||
17 | res = utils.get_arches(buildid=self.ref_buildid) | 18 | res = utils.get_arches(buildid=self.ref_buildid) | ||
18 | 19 | | |||
19 | assert res == set(self.ref_validarches) | 20 | assert res == set(self.ref_validarches) | ||
20 | 21 | | |||
21 | def test_get_arches_by_nvr(self, monkeypatch): | 22 | def test_get_arches_by_nvr(self, monkeypatch): | ||
22 | monkeypatch.setattr(utils, 'koji_client', Dingus(listRPMs__returns=self.ref_rpmarches, getBuild__returns=self.ref_build)) | 23 | monkeypatch.setattr(utils, 'koji_client', Dingus(listRPMs__returns=self.ref_rpmarches, getBuild__returns=self.ref_build)) | ||
23 | 24 | | |||
24 | res = utils.get_arches(nvr=self.ref_nvr) | 25 | res = utils.get_arches(nvr=self.ref_nvr) | ||
25 | 26 | | |||
26 | assert res == set(self.ref_validarches) | 27 | assert res == set(self.ref_validarches) | ||
28 | | ||||
29 | def test_blacklist_releases_true(self): | ||||
30 | config.blacklist_releases = ['el6', 'el7'] | ||||
31 | res = utils.blacklist_releases(self.ref_release) | ||||
32 | | ||||
33 | assert res | ||||
34 | | ||||
35 | def test_blacklist_releases_false(self): | ||||
36 | config.blacklist_releases = ['fc20'] | ||||
37 | res = utils.blacklist_releases(self.ref_release) | ||||
38 | | ||||
39 | assert not res |