diff options
author | Magnus Granberg <zorry@gentoo.org> | 2022-07-04 19:43:38 +0200 |
---|---|---|
committer | Magnus Granberg <zorry@gentoo.org> | 2022-07-04 19:43:38 +0200 |
commit | 0486f29cc0842870d85029553f2c229799896fa5 (patch) | |
tree | 624926a055d1ef975ba71666101a2adb8edca764 | |
parent | Change emerge retrys to 5 from 3 (diff) | |
download | tinderbox-cluster-0486f29cc0842870d85029553f2c229799896fa5.tar.gz tinderbox-cluster-0486f29cc0842870d85029553f2c229799896fa5.tar.bz2 tinderbox-cluster-0486f29cc0842870d85029553f2c229799896fa5.zip |
Add support for search bugs on b.g.o
Signed-off-by: Magnus Granberg <zorry@gentoo.org>
-rw-r--r-- | buildbot_gentoo_ci/steps/bugs.py | 124 | ||||
-rw-r--r-- | buildbot_gentoo_ci/steps/logs.py | 14 |
2 files changed, 135 insertions, 3 deletions
diff --git a/buildbot_gentoo_ci/steps/bugs.py b/buildbot_gentoo_ci/steps/bugs.py new file mode 100644 index 0000000..e43c926 --- /dev/null +++ b/buildbot_gentoo_ci/steps/bugs.py @@ -0,0 +1,124 @@ +# Copyright 2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +import re + +from twisted.internet import defer + +from buildbot.process.buildstep import BuildStep +from buildbot.process.results import SUCCESS +from buildbot.process.results import FAILURE +from buildbot.process.results import SKIPPED + +from bugz.cli import check_bugz_token, login, list_bugs +from bugz.cli_argparser import make_arg_parser +from bugz.configfile import load_config +from bugz.settings import Settings +from bugz.exceptions import BugzError +from bugz.log import log_error, log_info + +from portage.versions import cpv_getversion, pkgsplit, catpkgsplit + +# Origins: bugz.cli +# Modifyed by Gentoo Authors. +# main +def main_bugz(args): + ArgParser = make_arg_parser() + opt = ArgParser.parse_args(args) + + ConfigParser = load_config(getattr(opt, 'config_file', None)) + + check_bugz_token() + settings = Settings(opt, ConfigParser) + return settings + +# search +def search_bugz(args): + settings = main_bugz(args) + valid_keys = ['alias', 'assigned_to', 'component', 'creator', + 'limit', 'offset', 'op_sys', 'platform', + 'priority', 'product', 'resolution', 'severity', + 'version', 'whiteboard', 'cc'] + + params = {} + d = vars(settings) + for key in d: + if key in valid_keys: + params[key] = d[key] + if 'search_statuses' in d: + if 'all' not in d['search_statuses']: + params['status'] = d['search_statuses'] + if 'terms' in d: + params['summary'] = d['terms'] + + if not params: + raise BugzError('Please give search terms or options.') + + log_info('Searching for bugs meeting the following criteria:') + for key in params: + log_info(' {0:<20} = {1}'.format(key, params[key])) + + login(settings) + + result = settings.call_bz(settings.bz.Bug.search, params)['bugs'] + + if not len(result): + log_info('No bugs found.') + return [] + else: + list_bugs(result, settings) + return result + +class GetBugs(BuildStep): + + name = 'GetBugs' + description = 'Running' + descriptionDone = 'Ran' + descriptionSuffix = None + haltOnFailure = True + flunkOnFailure = True + + def __init__(self, **kwargs): + super().__init__(**kwargs) + + @defer.inlineCallbacks + def find_match(self, buglist): + log = yield self.addLog('Bugs') + yield log.addStdout('Open Bugs\n') + match = False + for bug in buglist: + yield log.addStdout('Bug: ' + str(bug['id']) + ' Summary: ' + bug['summary'] +'\n') + if re.search(self.getProperty('error_dict')['title_phase'][:20], bug['summary']): + print('Bug found') + print(bug) + match = {} + match['id'] = bug['id'] + match['summary'] = bug['summary'] + if match: + yield log.addStdout('Match bug found\n') + yield log.addStdout('Bug: ' + str(match['id']) + ' Summary: ' + match['summary'] +'\n') + self.setProperty("bgo", match, 'bgo') + return + yield log.addStdout('NO Match bug found\n') + self.setProperty("bgo", False, 'bgo') + + @defer.inlineCallbacks + def run(self): + # self.gentooci = self.master.namedServices['services'].namedServices['gentooci'] + cpv = self.getProperty('error_dict')['cpv'] + c = yield catpkgsplit(cpv)[0] + p = yield catpkgsplit(cpv)[1] + cp = c + '/' + p + # search for open bugs + args = [] + args.append('--skip-auth') + args.append('search') + # set limit + # set date last 30 days + # search for cp + args.append(cp) + print(args) + buglist = search_bugz(args) + print(buglist) + self.find_match(buglist) + return SUCCESS diff --git a/buildbot_gentoo_ci/steps/logs.py b/buildbot_gentoo_ci/steps/logs.py index d6ee705..7a63658 100644 --- a/buildbot_gentoo_ci/steps/logs.py +++ b/buildbot_gentoo_ci/steps/logs.py @@ -22,6 +22,7 @@ from buildbot.plugins import steps from buildbot_gentoo_ci.steps import minio from buildbot_gentoo_ci.steps import master as master_steps +from buildbot_gentoo_ci.steps import bugs def PersOutputOfLogParser(rc, stdout, stderr): build_summery_output = {} @@ -299,6 +300,7 @@ class MakeIssue(BuildStep): cpv = self.getProperty('faild_cpv') else: cpv = self.getProperty('cpv') + self.error_dict['cpv'] = cpv yield log.addStdout('Titel:' + '\n') yield log.addStdout(separator2.join([cpv, '-', self.error_dict['title']]) + separator1) yield log.addStdout('Summary:' + '\n') @@ -358,10 +360,11 @@ class MakeIssue(BuildStep): warning = False self.summary_log_list = [] self.error_dict = {} - self.error_dict['hash'] = hashlib.sha256() + self.aftersteps_list = [] + #self.error_dict['hash'] = hashlib.sha256() for k, v in sorted(self.summary_log_dict.items()): self.summary_log_list.append(v['text']) - self.error_dict['hash'].update(v['text'].encode('utf-8')) + #self.error_dict['hash'].update(v['text'].encode('utf-8')) if v['status'] == 'warning': warning = True # check if the build did fail @@ -377,9 +380,14 @@ class MakeIssue(BuildStep): print(self.error_dict) yield self.logIssue() self.setProperty("status", 'failed', 'status') - self.setProperty("summary_log_list", self.summary_log_list, 'summary_log_list') + self.setProperty("error_dict", self.error_dict, 'error_dict') + self.aftersteps_list.append(bugs.GetBugs()) if warning: self.setProperty("status", 'warning', 'status') + self.setProperty("bgo", False, 'bgo') + self.setProperty("summary_log_list", self.summary_log_list, 'summary_log_list') + if self.aftersteps_list is not []: + yield self.build.addStepsAfterCurrentStep(self.aftersteps_list) return SUCCESS class setBuildbotLog(BuildStep): |