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: Sat, 08 Jan 2022 17:25:18
Message-Id: 1641662699.5e9aea3e883a20bc0adedceeeca2767230dd0ea3.zorry@gentoo
1 commit: 5e9aea3e883a20bc0adedceeeca2767230dd0ea3
2 Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
3 AuthorDate: Sat Jan 8 17:24:59 2022 +0000
4 Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
5 CommitDate: Sat Jan 8 17:24:59 2022 +0000
6 URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=5e9aea3e
7
8 Upload emerge and elogs
9
10 Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
11
12 buildbot_gentoo_ci/steps/builders.py | 126 +++++++++++++++++++++++++----------
13 1 file changed, 91 insertions(+), 35 deletions(-)
14
15 diff --git a/buildbot_gentoo_ci/steps/builders.py b/buildbot_gentoo_ci/steps/builders.py
16 index e76fe3d..d8314e4 100644
17 --- a/buildbot_gentoo_ci/steps/builders.py
18 +++ b/buildbot_gentoo_ci/steps/builders.py
19 @@ -170,6 +170,17 @@ def PersOutputOfEmergeInfo(rc, stdout, stderr):
20 'emerge_info_output' : emerge_info_output
21 }
22
23 +def PersOutputOfElogLs(rc, stdout, stderr):
24 + elog_ls_output = {}
25 + elog_ls_output['rc'] = rc
26 + elog_ls_list = []
27 + for line in stdout.split('\n'):
28 + elog_ls_list.append(line)
29 + elog_ls_output['elog_ls'] = elog_ls_list
30 + return {
31 + 'elog_ls_output' : elog_ls_output
32 + }
33 +
34 class TriggerRunBuildRequest(BuildStep):
35
36 name = 'TriggerRunBuildRequest'
37 @@ -553,6 +564,42 @@ class RunEmerge(BuildStep):
38 yield self.build.addStepsAfterCurrentStep(aftersteps_list)
39 return SUCCESS
40
41 +class CheckElogLogs(BuildStep):
42 +
43 + name = 'CheckElogLogs'
44 + description = 'Running'
45 + descriptionDone = 'Ran'
46 + haltOnFailure = True
47 + flunkOnFailure = True
48 +
49 + def __init__(self, **kwargs):
50 + super().__init__(**kwargs)
51 + self.aftersteps_list = []
52 +
53 + def addFileUploade(self, sourcefile, destfile):
54 + self.aftersteps_list.append(steps.FileUpload(
55 + workersrc=sourcefile,
56 + masterdest=destfile
57 + ))
58 +
59 + @defer.inlineCallbacks
60 + def run(self):
61 + elog_ls_output = self.getProperty('elog_ls_output')
62 + workdir = yield os.path.join('/', 'var', 'cache', 'portage', 'logs', 'elog')
63 + for elogfile in elog_ls_output['elog_ls']:
64 + if self.getProperty('faild_cpv'):
65 + cpv = self.getProperty('faild_cpv')
66 + else:
67 + cpv = self.getProperty('cpv')
68 + if elogfile.replace(':', '/').startswith(cpv):
69 + print(elogfile)
70 + destfile = yield os.path.join(self.getProperty('masterdest'), elogfile.replace('.log', '.elog'))
71 + sourcefile = yield os.path.join(workdir, elogfile)
72 + self.addFileUploade(sourcefile, destfile)
73 + if self.aftersteps_list != []:
74 + yield self.build.addStepsAfterCurrentStep(self.aftersteps_list)
75 + return SUCCESS
76 +
77 class CheckEmergeLogs(BuildStep):
78
79 name = 'CheckEmergeLogs'
80 @@ -567,6 +614,7 @@ class CheckEmergeLogs(BuildStep):
81 self.descriptionSuffix = self.step
82 self.aftersteps_list = []
83 self.log_data = {}
84 + self.faild_cpv = False
85
86 @defer.inlineCallbacks
87 def getVersionData(self, cpv):
88 @@ -603,16 +651,38 @@ class CheckEmergeLogs(BuildStep):
89 self.addFileUploade(sourcefile, destfile)
90
91 @defer.inlineCallbacks
92 - def getEmergeFiles(self, faild_version_data):
93 + def getElogFiles(self, cpv):
94 + workdir = yield os.path.join('/', 'var', 'cache', 'portage', 'logs', 'elog')
95 + elog_cpv = cpv.replace('/', ':')
96 + shell_commad_list = []
97 + shell_commad_list.append('ls')
98 + #shell_commad_list.append(elog_cpv + '*')
99 + self.aftersteps_list.append(
100 + steps.SetPropertyFromCommand(
101 + command=shell_commad_list,
102 + strip=True,
103 + extract_fn=PersOutputOfElogLs,
104 + workdir=workdir,
105 + timeout=None
106 + ))
107 + self.aftersteps_list.append(CheckElogLogs())
108 +
109 + @defer.inlineCallbacks
110 + def getEmergeFiles(self, cpv):
111 # get emerge info
112 destfile = yield os.path.join(self.masterdest, 'emerge_info.txt')
113 sourcefile = yield os.path.join('/', 'tmp', 'emerge_info.txt')
114 self.addFileUploade(sourcefile, destfile)
115 - #FIXME:
116 - # if faild_version_data:
117 # get emerge.log
118 - # get elogs
119 + destfile2 = yield os.path.join(self.masterdest, 'emerge.log')
120 + sourcefile2 = yield os.path.join('/', 'var', 'log', 'emerge.log')
121 + self.addFileUploade(sourcefile2, destfile2)
122 # world file
123 + destfile3 = yield os.path.join(self.masterdest, 'world')
124 + sourcefile3 = yield os.path.join('/', 'var', 'lib', 'portage', 'world')
125 + self.addFileUploade(sourcefile3, destfile3)
126 + # get elogs
127 + self.getElogFiles(cpv)
128
129 def getBuildWorkdirFiles(self):
130 #FIXME:
131 @@ -625,6 +695,8 @@ class CheckEmergeLogs(BuildStep):
132 project_data = self.getProperty('project_data')
133 projects_emerge_options = yield self.gentooci.db.projects.getProjectEmergeOptionsByUuid(project_data['uuid'])
134 emerge_output = self.getProperty('emerge_output')
135 + self.faild_cpv = emerge_output['failed']
136 + self.setProperty('faild_cpv', self.faild_cpv, 'faild_cpv')
137 shell_commad_list = [
138 'emerge',
139 '-v'
140 @@ -632,6 +704,7 @@ class CheckEmergeLogs(BuildStep):
141 package_dict = emerge_output['packages']
142
143 self.masterdest = yield os.path.join(self.master.basedir, 'workers', self.getProperty('workername'), str(self.getProperty("buildnumber")))
144 + self.setProperty('masterdest', self.masterdest, 'masterdest')
145
146 #FIXME: Prosees the logs and do stuff
147 # preserved-libs
148 @@ -730,8 +803,8 @@ class CheckEmergeLogs(BuildStep):
149 else:
150 # trigger parse_build_log with info about pre-build and it fail
151 pass
152 - # Check if extra build did work
153 - if self.step == 'extra-build':
154 + # Make Logfile dict
155 + if self.step == 'extra-build' or self.step == 'build':
156 print(emerge_output)
157 log_dict = {}
158 # get cpv, logname and log path
159 @@ -746,11 +819,8 @@ class CheckEmergeLogs(BuildStep):
160 full_logname = full_logname
161 )
162 print(log_dict)
163 - # Find log for cpv that was requested or did failed
164 - if not log_dict == {}:
165 - # requested cpv
166 - print(log_dict)
167 - faild_cpv = emerge_output['failed']
168 + if self.step == 'extra-build':
169 + #FIXME: Check if extra build did work
170 self.aftersteps_list.append(RunEmerge(step='pre-build'))
171 self.setProperty('rerun', self.getProperty('rerun') + 1, 'rerun')
172
173 @@ -760,43 +830,29 @@ class CheckEmergeLogs(BuildStep):
174 # local_log_path dir set in config
175 # format /var/cache/portage/logs/build/gui-libs/egl-wayland-1.1.6:20210321-173525.log.gz
176 if self.step == 'build':
177 - print(emerge_output)
178 - log_dict = {}
179 - # get cpv, logname and log path
180 - for log_path in emerge_output['log_paths']:
181 - c = log_path.split('/')[6]
182 - full_logname = log_path.split('/')[7]
183 - print(full_logname)
184 - pv = full_logname.split(':')[0]
185 - cpv = c + '/' + pv
186 - log_dict[cpv] = dict(
187 - log_path = log_path,
188 - full_logname = full_logname
189 - )
190 - print(log_dict)
191 # Find log for cpv that was requested or did failed
192 if not log_dict == {}:
193 # requested cpv
194 - print(log_dict)
195 cpv = self.getProperty('cpv')
196 - faild_cpv = emerge_output['failed']
197 faild_version_data = False
198 - if cpv in log_dict or faild_cpv in log_dict:
199 + if cpv in log_dict or self.faild_cpv in log_dict:
200 yield self.createDistDir()
201 if cpv in log_dict:
202 self.log_data[cpv] = log_dict[cpv]
203 yield self.getLogFile(cpv, log_dict)
204 - if faild_cpv:
205 + if self.faild_cpv:
206 # failed and build requested cpv
207 - if cpv == faild_cpv:
208 + if cpv == self.faild_cpv:
209 faild_version_data = self.getProperty("version_data")
210 else:
211 # failed but not build requested cpv
212 - self.log_data[faild_cpv] = log_dict[faild_cpv]
213 - yield self.getLogFile(faild_cpv, log_dict)
214 - faild_version_data = yield self.getVersionData(faild_cpv)
215 + self.log_data[self.faild_cpv] = log_dict[self.faild_cpv]
216 + yield self.getLogFile(self.faild_cpv, log_dict)
217 + faild_version_data = yield self.getVersionData(self.faild_cpv)
218 + self.getEmergeFiles(self.faild_cpv)
219 self.getBuildWorkdirFiles()
220 - self.getEmergeFiles(faild_version_data)
221 + else:
222 + self.getEmergeFiles(cpv)
223 self.aftersteps_list.append(steps.Trigger(
224 schedulerNames=['parse_build_log'],
225 waitForFinish=False,
226 @@ -808,7 +864,7 @@ class CheckEmergeLogs(BuildStep):
227 'log_build_data' : self.log_data,
228 'pkg_check_log_data' : self.getProperty("pkg_check_log_data"),
229 'repository_data' : self.getProperty('repository_data'),
230 - 'faild_cpv' : faild_cpv,
231 + 'faild_cpv' : self.faild_cpv,
232 'step' : self.step,
233 'build_workername' : self.getProperty('workername')
234 }