aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Granberg <zorry@gentoo.org>2022-07-04 19:43:38 +0200
committerMagnus Granberg <zorry@gentoo.org>2022-07-04 19:43:38 +0200
commit0486f29cc0842870d85029553f2c229799896fa5 (patch)
tree624926a055d1ef975ba71666101a2adb8edca764
parentChange emerge retrys to 5 from 3 (diff)
downloadtinderbox-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.py124
-rw-r--r--buildbot_gentoo_ci/steps/logs.py14
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):