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' |