Gentoo Archives: gentoo-commits

From: Magnus Granberg <zorry@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/tinderbox-cluster:master commit in: buildbot_gentoo_ci/steps/
Date: Mon, 04 Jul 2022 17:44:04
Message-Id: 1656956618.0486f29cc0842870d85029553f2c229799896fa5.zorry@gentoo
1 commit: 0486f29cc0842870d85029553f2c229799896fa5
2 Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
3 AuthorDate: Mon Jul 4 17:43:38 2022 +0000
4 Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
5 CommitDate: Mon Jul 4 17:43:38 2022 +0000
6 URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=0486f29c
7
8 Add support for search bugs on b.g.o
9
10 Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
11
12 buildbot_gentoo_ci/steps/bugs.py | 124 +++++++++++++++++++++++++++++++++++++++
13 buildbot_gentoo_ci/steps/logs.py | 14 ++++-
14 2 files changed, 135 insertions(+), 3 deletions(-)
15
16 diff --git a/buildbot_gentoo_ci/steps/bugs.py b/buildbot_gentoo_ci/steps/bugs.py
17 new file mode 100644
18 index 0000000..e43c926
19 --- /dev/null
20 +++ b/buildbot_gentoo_ci/steps/bugs.py
21 @@ -0,0 +1,124 @@
22 +# Copyright 2022 Gentoo Authors
23 +# Distributed under the terms of the GNU General Public License v2
24 +
25 +import re
26 +
27 +from twisted.internet import defer
28 +
29 +from buildbot.process.buildstep import BuildStep
30 +from buildbot.process.results import SUCCESS
31 +from buildbot.process.results import FAILURE
32 +from buildbot.process.results import SKIPPED
33 +
34 +from bugz.cli import check_bugz_token, login, list_bugs
35 +from bugz.cli_argparser import make_arg_parser
36 +from bugz.configfile import load_config
37 +from bugz.settings import Settings
38 +from bugz.exceptions import BugzError
39 +from bugz.log import log_error, log_info
40 +
41 +from portage.versions import cpv_getversion, pkgsplit, catpkgsplit
42 +
43 +# Origins: bugz.cli
44 +# Modifyed by Gentoo Authors.
45 +# main
46 +def main_bugz(args):
47 + ArgParser = make_arg_parser()
48 + opt = ArgParser.parse_args(args)
49 +
50 + ConfigParser = load_config(getattr(opt, 'config_file', None))
51 +
52 + check_bugz_token()
53 + settings = Settings(opt, ConfigParser)
54 + return settings
55 +
56 +# search
57 +def search_bugz(args):
58 + settings = main_bugz(args)
59 + valid_keys = ['alias', 'assigned_to', 'component', 'creator',
60 + 'limit', 'offset', 'op_sys', 'platform',
61 + 'priority', 'product', 'resolution', 'severity',
62 + 'version', 'whiteboard', 'cc']
63 +
64 + params = {}
65 + d = vars(settings)
66 + for key in d:
67 + if key in valid_keys:
68 + params[key] = d[key]
69 + if 'search_statuses' in d:
70 + if 'all' not in d['search_statuses']:
71 + params['status'] = d['search_statuses']
72 + if 'terms' in d:
73 + params['summary'] = d['terms']
74 +
75 + if not params:
76 + raise BugzError('Please give search terms or options.')
77 +
78 + log_info('Searching for bugs meeting the following criteria:')
79 + for key in params:
80 + log_info(' {0:<20} = {1}'.format(key, params[key]))
81 +
82 + login(settings)
83 +
84 + result = settings.call_bz(settings.bz.Bug.search, params)['bugs']
85 +
86 + if not len(result):
87 + log_info('No bugs found.')
88 + return []
89 + else:
90 + list_bugs(result, settings)
91 + return result
92 +
93 +class GetBugs(BuildStep):
94 +
95 + name = 'GetBugs'
96 + description = 'Running'
97 + descriptionDone = 'Ran'
98 + descriptionSuffix = None
99 + haltOnFailure = True
100 + flunkOnFailure = True
101 +
102 + def __init__(self, **kwargs):
103 + super().__init__(**kwargs)
104 +
105 + @defer.inlineCallbacks
106 + def find_match(self, buglist):
107 + log = yield self.addLog('Bugs')
108 + yield log.addStdout('Open Bugs\n')
109 + match = False
110 + for bug in buglist:
111 + yield log.addStdout('Bug: ' + str(bug['id']) + ' Summary: ' + bug['summary'] +'\n')
112 + if re.search(self.getProperty('error_dict')['title_phase'][:20], bug['summary']):
113 + print('Bug found')
114 + print(bug)
115 + match = {}
116 + match['id'] = bug['id']
117 + match['summary'] = bug['summary']
118 + if match:
119 + yield log.addStdout('Match bug found\n')
120 + yield log.addStdout('Bug: ' + str(match['id']) + ' Summary: ' + match['summary'] +'\n')
121 + self.setProperty("bgo", match, 'bgo')
122 + return
123 + yield log.addStdout('NO Match bug found\n')
124 + self.setProperty("bgo", False, 'bgo')
125 +
126 + @defer.inlineCallbacks
127 + def run(self):
128 + # self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
129 + cpv = self.getProperty('error_dict')['cpv']
130 + c = yield catpkgsplit(cpv)[0]
131 + p = yield catpkgsplit(cpv)[1]
132 + cp = c + '/' + p
133 + # search for open bugs
134 + args = []
135 + args.append('--skip-auth')
136 + args.append('search')
137 + # set limit
138 + # set date last 30 days
139 + # search for cp
140 + args.append(cp)
141 + print(args)
142 + buglist = search_bugz(args)
143 + print(buglist)
144 + self.find_match(buglist)
145 + return SUCCESS
146
147 diff --git a/buildbot_gentoo_ci/steps/logs.py b/buildbot_gentoo_ci/steps/logs.py
148 index d6ee705..7a63658 100644
149 --- a/buildbot_gentoo_ci/steps/logs.py
150 +++ b/buildbot_gentoo_ci/steps/logs.py
151 @@ -22,6 +22,7 @@ from buildbot.plugins import steps
152
153 from buildbot_gentoo_ci.steps import minio
154 from buildbot_gentoo_ci.steps import master as master_steps
155 +from buildbot_gentoo_ci.steps import bugs
156
157 def PersOutputOfLogParser(rc, stdout, stderr):
158 build_summery_output = {}
159 @@ -299,6 +300,7 @@ class MakeIssue(BuildStep):
160 cpv = self.getProperty('faild_cpv')
161 else:
162 cpv = self.getProperty('cpv')
163 + self.error_dict['cpv'] = cpv
164 yield log.addStdout('Titel:' + '\n')
165 yield log.addStdout(separator2.join([cpv, '-', self.error_dict['title']]) + separator1)
166 yield log.addStdout('Summary:' + '\n')
167 @@ -358,10 +360,11 @@ class MakeIssue(BuildStep):
168 warning = False
169 self.summary_log_list = []
170 self.error_dict = {}
171 - self.error_dict['hash'] = hashlib.sha256()
172 + self.aftersteps_list = []
173 + #self.error_dict['hash'] = hashlib.sha256()
174 for k, v in sorted(self.summary_log_dict.items()):
175 self.summary_log_list.append(v['text'])
176 - self.error_dict['hash'].update(v['text'].encode('utf-8'))
177 + #self.error_dict['hash'].update(v['text'].encode('utf-8'))
178 if v['status'] == 'warning':
179 warning = True
180 # check if the build did fail
181 @@ -377,9 +380,14 @@ class MakeIssue(BuildStep):
182 print(self.error_dict)
183 yield self.logIssue()
184 self.setProperty("status", 'failed', 'status')
185 - self.setProperty("summary_log_list", self.summary_log_list, 'summary_log_list')
186 + self.setProperty("error_dict", self.error_dict, 'error_dict')
187 + self.aftersteps_list.append(bugs.GetBugs())
188 if warning:
189 self.setProperty("status", 'warning', 'status')
190 + self.setProperty("bgo", False, 'bgo')
191 + self.setProperty("summary_log_list", self.summary_log_list, 'summary_log_list')
192 + if self.aftersteps_list is not []:
193 + yield self.build.addStepsAfterCurrentStep(self.aftersteps_list)
194 return SUCCESS
195
196 class setBuildbotLog(BuildStep):