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