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/, buildbot_gentoo_ci/config/
Date: Fri, 24 Dec 2021 00:34:08
Message-Id: 1640305999.b3edf64aaff42659b3593dfe24a7e0a68e1881a0.zorry@gentoo
1 commit: b3edf64aaff42659b3593dfe24a7e0a68e1881a0
2 Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
3 AuthorDate: Fri Dec 24 00:33:19 2021 +0000
4 Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
5 CommitDate: Fri Dec 24 00:33:19 2021 +0000
6 URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=b3edf64a
7
8 put emerge and package info to a file insted
9
10 Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
11
12 buildbot_gentoo_ci/config/buildfactorys.py | 4 ++
13 buildbot_gentoo_ci/steps/builders.py | 74 +++++++++++++++++++++++------
14 buildbot_gentoo_ci/steps/logs.py | 75 +++++++++++++++++++++++++++++-
15 3 files changed, 137 insertions(+), 16 deletions(-)
16
17 diff --git a/buildbot_gentoo_ci/config/buildfactorys.py b/buildbot_gentoo_ci/config/buildfactorys.py
18 index 27f0076..6203a1f 100644
19 --- a/buildbot_gentoo_ci/config/buildfactorys.py
20 +++ b/buildbot_gentoo_ci/config/buildfactorys.py
21 @@ -172,8 +172,12 @@ def parse_build_log():
22 f.addStep(logs.MakeIssue())
23 # add sum log to buildbot log
24 f.addStep(logs.setBuildbotLog())
25 + # pers the emerge info
26 + f.addStep(logs.SetupParserEmergeInfoLog())
27 # add emerge info to log and db
28 f.addStep(logs.setEmergeInfoLog())
29 + # add package info to log and db
30 + f.addStep(logs.setPackageInfoLog())
31 # set BuildStatus
32 f.addStep(logs.setBuildStatus())
33 # setup things for the irc bot
34
35 diff --git a/buildbot_gentoo_ci/steps/builders.py b/buildbot_gentoo_ci/steps/builders.py
36 index 7247abd..e76fe3d 100644
37 --- a/buildbot_gentoo_ci/steps/builders.py
38 +++ b/buildbot_gentoo_ci/steps/builders.py
39 @@ -590,14 +590,35 @@ class CheckEmergeLogs(BuildStep):
40 workdir=workdir
41 ))
42
43 - @defer.inlineCallbacks
44 - def getLogFile(self, cpv, log_dict):
45 - masterdest = yield os.path.join(self.master.basedir, 'workers', self.getProperty('workername'), str(self.getProperty("buildnumber")) ,log_dict[cpv]['full_logname'])
46 + def addFileUploade(self, sourcefile, destfile):
47 self.aftersteps_list.append(steps.FileUpload(
48 - workersrc=log_dict[cpv]['log_path'],
49 - masterdest=masterdest
50 + workersrc=sourcefile,
51 + masterdest=destfile
52 ))
53
54 + @defer.inlineCallbacks
55 + def getLogFile(self, cpv, log_dict):
56 + destfile = yield os.path.join(self.masterdest, log_dict[cpv]['full_logname'])
57 + sourcefile = log_dict[cpv]['log_path']
58 + self.addFileUploade(sourcefile, destfile)
59 +
60 + @defer.inlineCallbacks
61 + def getEmergeFiles(self, faild_version_data):
62 + # get emerge info
63 + destfile = yield os.path.join(self.masterdest, 'emerge_info.txt')
64 + sourcefile = yield os.path.join('/', 'tmp', 'emerge_info.txt')
65 + self.addFileUploade(sourcefile, destfile)
66 + #FIXME:
67 + # if faild_version_data:
68 + # get emerge.log
69 + # get elogs
70 + # world file
71 +
72 + def getBuildWorkdirFiles(self):
73 + #FIXME:
74 + # get files from the build workdir
75 + pass
76 +
77 @defer.inlineCallbacks
78 def run(self):
79 self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
80 @@ -610,6 +631,8 @@ class CheckEmergeLogs(BuildStep):
81 ]
82 package_dict = emerge_output['packages']
83
84 + self.masterdest = yield os.path.join(self.master.basedir, 'workers', self.getProperty('workername'), str(self.getProperty("buildnumber")))
85 +
86 #FIXME: Prosees the logs and do stuff
87 # preserved-libs
88 if emerge_output['preserved_libs'] and projects_emerge_options['preserved_libs']:
89 @@ -757,12 +780,12 @@ class CheckEmergeLogs(BuildStep):
90 print(log_dict)
91 cpv = self.getProperty('cpv')
92 faild_cpv = emerge_output['failed']
93 + faild_version_data = False
94 if cpv in log_dict or faild_cpv in log_dict:
95 + yield self.createDistDir()
96 if cpv in log_dict:
97 self.log_data[cpv] = log_dict[cpv]
98 - yield self.createDistDir()
99 yield self.getLogFile(cpv, log_dict)
100 - faild_version_data = False
101 if faild_cpv:
102 # failed and build requested cpv
103 if cpv == faild_cpv:
104 @@ -772,6 +795,8 @@ class CheckEmergeLogs(BuildStep):
105 self.log_data[faild_cpv] = log_dict[faild_cpv]
106 yield self.getLogFile(faild_cpv, log_dict)
107 faild_version_data = yield self.getVersionData(faild_cpv)
108 + self.getBuildWorkdirFiles()
109 + self.getEmergeFiles(faild_version_data)
110 self.aftersteps_list.append(steps.Trigger(
111 schedulerNames=['parse_build_log'],
112 waitForFinish=False,
113 @@ -785,7 +810,6 @@ class CheckEmergeLogs(BuildStep):
114 'repository_data' : self.getProperty('repository_data'),
115 'faild_cpv' : faild_cpv,
116 'step' : self.step,
117 - 'emerge_info' : self.getProperty('emerge_info_output')['emerge_info'],
118 'build_workername' : self.getProperty('workername')
119 }
120 ))
121 @@ -920,17 +944,37 @@ class RunEmergeInfo(BuildStep):
122 @defer.inlineCallbacks
123 def run(self):
124 aftersteps_list = []
125 + # add emerge info
126 shell_commad_list = [
127 'emerge',
128 ]
129 shell_commad_list.append('--info')
130 + shell_commad_list.append('>')
131 + shell_commad_list.append('/tmp/emerge_info.txt')
132 aftersteps_list.append(
133 - steps.SetPropertyFromCommand(
134 - command=shell_commad_list,
135 - strip=True,
136 - extract_fn=PersOutputOfEmergeInfo,
137 - workdir='/',
138 - timeout=None
139 + steps.ShellCommand(
140 + # the list need to be joined to pipe to a file
141 + command=' '.join(shell_commad_list),
142 + workdir='/'
143 + ))
144 + # add package info
145 + cpv = self.getProperty("cpv")
146 + c = yield catpkgsplit(cpv)[0]
147 + p = yield catpkgsplit(cpv)[1]
148 + shell_commad_list = [
149 + 'emerge',
150 + ]
151 + shell_commad_list.append('-qpvO')
152 + shell_commad_list.append('=' + self.getProperty('cpv'))
153 + shell_commad_list.append('--usepkg-exclude')
154 + shell_commad_list.append(c + '/' + p)
155 + shell_commad_list.append('>>')
156 + shell_commad_list.append('/tmp/emerge_info.txt')
157 + aftersteps_list.append(
158 + steps.ShellCommand(
159 + # the list need to be joined to pipe to a file
160 + command=' '.join(shell_commad_list),
161 + workdir='/'
162 ))
163 yield self.build.addStepsAfterCurrentStep(aftersteps_list)
164 return SUCCESS
165 @@ -954,8 +998,8 @@ class RunBuild(BuildStep):
166 # trigger pars_build_log if we have any logs to check
167 return SKIPPED
168 aftersteps_list = []
169 - aftersteps_list.append(RunEmergeInfo())
170 aftersteps_list.append(RunEmerge(step='pre-build'))
171 + aftersteps_list.append(RunEmergeInfo())
172 aftersteps_list.append(RunEmerge(step='build'))
173 aftersteps_list.append(RunEmerge(step='pre-depclean'))
174 aftersteps_list.append(RunEmerge(step='preserved-libs'))
175
176 diff --git a/buildbot_gentoo_ci/steps/logs.py b/buildbot_gentoo_ci/steps/logs.py
177 index dc5d3a1..d6ee705 100644
178 --- a/buildbot_gentoo_ci/steps/logs.py
179 +++ b/buildbot_gentoo_ci/steps/logs.py
180 @@ -45,6 +45,23 @@ def PersOutputOfLogParser(rc, stdout, stderr):
181 'build_summery_output' : build_summery_output
182 }
183
184 +def PersOutputOfEmergeInfo(rc, stdout, stderr):
185 + #FIXME: line for package info
186 + emerge_info_output = {}
187 + emerge_info_output['rc'] = rc
188 + emerge_info_list = []
189 + emerge_package_info = []
190 + for line in stdout.split('\n'):
191 + if line.startswith('['):
192 + emerge_package_info.append(line)
193 + else:
194 + emerge_info_list.append(line)
195 + emerge_info_output['emerge_info'] = emerge_info_list
196 + emerge_info_output['emerge_package_info'] = emerge_package_info
197 + return {
198 + 'emerge_info_output' : emerge_info_output
199 + }
200 +
201 class SetupPropertys(BuildStep):
202
203 name = 'SetupPropertys'
204 @@ -387,6 +404,38 @@ class setBuildbotLog(BuildStep):
205 yield log.addStdout(line + '\n')
206 return SUCCESS
207
208 +class SetupParserEmergeInfoLog(BuildStep):
209 +
210 + name = 'SetupParserEmergeInfoLog'
211 + description = 'Running'
212 + descriptionDone = 'Ran'
213 + descriptionSuffix = None
214 + haltOnFailure = False
215 + flunkOnFailure = True
216 + warnOnWarnings = True
217 +
218 + def __init__(self, **kwargs):
219 + super().__init__(**kwargs)
220 +
221 + @defer.inlineCallbacks
222 + def run(self):
223 + workdir = yield os.path.join(self.master.basedir, 'workers', self.getProperty('build_workername'), str(self.getProperty("project_build_data")['buildbot_build_id']))
224 + command = []
225 + command.append('cat')
226 + command.append('emerge_info.txt')
227 + self.aftersteps_list = []
228 + self.aftersteps_list.append(master_steps.MasterSetPropertyFromCommand(
229 + name = 'RunEmergeInfoLogParser',
230 + haltOnFailure = True,
231 + flunkOnFailure = True,
232 + command=command,
233 + workdir=workdir,
234 + strip=False,
235 + extract_fn=PersOutputOfEmergeInfo
236 + ))
237 + yield self.build.addStepsAfterCurrentStep(self.aftersteps_list)
238 + return SUCCESS
239 +
240 class setEmergeInfoLog(BuildStep):
241
242 name = 'setEmergeInfoLog'
243 @@ -406,10 +455,34 @@ class setEmergeInfoLog(BuildStep):
244 log = yield self.addLog('emerge_info')
245 #FIXME: add emerge info to db
246 # add line for line
247 - for line in self.getProperty('emerge_info'):
248 + for line in self.getProperty('emerge_info_output')['emerge_info']:
249 yield log.addStdout(line + '\n')
250 return SUCCESS
251
252 +class setPackageInfoLog(BuildStep):
253 +
254 + name = 'setPackageInfoLog'
255 + description = 'Running'
256 + descriptionDone = 'Ran'
257 + descriptionSuffix = None
258 + haltOnFailure = False
259 + flunkOnFailure = True
260 + warnOnWarnings = True
261 +
262 + def __init__(self, **kwargs):
263 + super().__init__(**kwargs)
264 +
265 + @defer.inlineCallbacks
266 + def run(self):
267 + #setup the log
268 + log = yield self.addLog('package_info')
269 + #FIXME: add package info to db
270 + # add line for line
271 + for line in self.getProperty('emerge_info_output')['emerge_package_info']:
272 + yield log.addStdout(line + '\n')
273 + return SUCCESS
274 +
275 +
276 class Upload(BuildStep):
277
278 name = 'Upload'