1 |
commit: 1fc28f8dc77b5ef0c9d2d6eac054d91b455d9048 |
2 |
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org> |
3 |
AuthorDate: Tue Jan 18 19:16:44 2022 +0000 |
4 |
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org> |
5 |
CommitDate: Tue Jan 18 19:16:44 2022 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=1fc28f8d |
7 |
|
8 |
Add support for find logfiles |
9 |
|
10 |
Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org> |
11 |
|
12 |
buildbot_gentoo_ci/steps/builders.py | 110 ++++++++++++++++++++++++++++++----- |
13 |
1 file changed, 97 insertions(+), 13 deletions(-) |
14 |
|
15 |
diff --git a/buildbot_gentoo_ci/steps/builders.py b/buildbot_gentoo_ci/steps/builders.py |
16 |
index d8314e4..dd2fbc2 100644 |
17 |
--- a/buildbot_gentoo_ci/steps/builders.py |
18 |
+++ b/buildbot_gentoo_ci/steps/builders.py |
19 |
@@ -181,6 +181,19 @@ def PersOutputOfElogLs(rc, stdout, stderr): |
20 |
'elog_ls_output' : elog_ls_output |
21 |
} |
22 |
|
23 |
+def PersOutputOfBuildWorkdir(rc, stdout, stderr): |
24 |
+ build_workdir_find_output = {} |
25 |
+ build_workdir_find_output['rc'] = rc |
26 |
+ build_workdir_find_list = [] |
27 |
+ for line in stdout.split('\n'): |
28 |
+ find_line = line.replace('./', '') |
29 |
+ if find_line != '': |
30 |
+ build_workdir_find_list.append(find_line) |
31 |
+ build_workdir_find_output['build_workdir_find'] = build_workdir_find_list |
32 |
+ return { |
33 |
+ 'build_workdir_find_output' : build_workdir_find_output |
34 |
+ } |
35 |
+ |
36 |
class TriggerRunBuildRequest(BuildStep): |
37 |
|
38 |
name = 'TriggerRunBuildRequest' |
39 |
@@ -317,6 +330,9 @@ class SetupPropertys(BuildStep): |
40 |
project_build_data['buildbot_build_id']) |
41 |
self.setProperty('project_build_data', project_build_data, 'project_build_data') |
42 |
print(self.getProperty("project_build_data")) |
43 |
+ self.masterdest = yield os.path.join(self.master.basedir, 'workers', self.getProperty('workername'), str(self.getProperty("buildnumber"))) |
44 |
+ self.setProperty('masterdest', self.masterdest, 'masterdest') |
45 |
+ |
46 |
return SUCCESS |
47 |
|
48 |
class UpdateRepos(BuildStep): |
49 |
@@ -578,6 +594,7 @@ class CheckElogLogs(BuildStep): |
50 |
|
51 |
def addFileUploade(self, sourcefile, destfile): |
52 |
self.aftersteps_list.append(steps.FileUpload( |
53 |
+ mode = 0o644, |
54 |
workersrc=sourcefile, |
55 |
masterdest=destfile |
56 |
)) |
57 |
@@ -600,6 +617,51 @@ class CheckElogLogs(BuildStep): |
58 |
yield self.build.addStepsAfterCurrentStep(self.aftersteps_list) |
59 |
return SUCCESS |
60 |
|
61 |
+class CheckBuildWorkDirs(BuildStep): |
62 |
+ |
63 |
+ name = 'CheckBuildWorkdir' |
64 |
+ description = 'Running' |
65 |
+ descriptionDone = 'Ran' |
66 |
+ haltOnFailure = True |
67 |
+ flunkOnFailure = True |
68 |
+ |
69 |
+ def __init__(self, **kwargs): |
70 |
+ super().__init__(**kwargs) |
71 |
+ self.aftersteps_list = [] |
72 |
+ |
73 |
+ @defer.inlineCallbacks |
74 |
+ def run(self): |
75 |
+ cpv = self.getProperty('faild_cpv') |
76 |
+ cpv_build_dir = yield os.path.join('/', 'var', 'tmp', 'portage', self.getProperty('cpv_build_dir')) |
77 |
+ compressed_log_file = cpv.replace('/', '_') + '.' + str(self.getProperty("buildnumber")) + '.logs.tar.bz2' |
78 |
+ masterdest_file = yield os.path.join(self.getProperty('masterdest'), compressed_log_file) |
79 |
+ # cpv_build_work_dir = yield os.path.join(cpv_build_dir, 'work') |
80 |
+ if self.getProperty('build_workdir_find_output')['build_workdir_find'] != []: |
81 |
+ shell_commad_list = [] |
82 |
+ shell_commad_list.append('tar') |
83 |
+ shell_commad_list.append('-cjpf') |
84 |
+ shell_commad_list.append(compressed_log_file) |
85 |
+ for find_line in sorted(self.getProperty('build_workdir_find_output')['build_workdir_find']): |
86 |
+ print(find_line) |
87 |
+ filename = yield os.path.join('work', find_line) |
88 |
+ shell_commad_list.append(filename) |
89 |
+ self.aftersteps_list.append( |
90 |
+ steps.ShellCommand( |
91 |
+ name = 'Tarlogs', |
92 |
+ command = shell_commad_list, |
93 |
+ workdir = cpv_build_dir |
94 |
+ )) |
95 |
+ self.aftersteps_list.append(steps.FileUpload( |
96 |
+ name = 'UploadFindlogs', |
97 |
+ mode = 0o644, |
98 |
+ workersrc = compressed_log_file, |
99 |
+ masterdest = masterdest_file, |
100 |
+ workdir = cpv_build_dir |
101 |
+ )) |
102 |
+ if self.aftersteps_list != []: |
103 |
+ yield self.build.addStepsAfterCurrentStep(self.aftersteps_list) |
104 |
+ return SUCCESS |
105 |
+ |
106 |
class CheckEmergeLogs(BuildStep): |
107 |
|
108 |
name = 'CheckEmergeLogs' |
109 |
@@ -640,13 +702,14 @@ class CheckEmergeLogs(BuildStep): |
110 |
|
111 |
def addFileUploade(self, sourcefile, destfile): |
112 |
self.aftersteps_list.append(steps.FileUpload( |
113 |
+ mode = 0o644, |
114 |
workersrc=sourcefile, |
115 |
masterdest=destfile |
116 |
)) |
117 |
|
118 |
@defer.inlineCallbacks |
119 |
def getLogFile(self, cpv, log_dict): |
120 |
- destfile = yield os.path.join(self.masterdest, log_dict[cpv]['full_logname']) |
121 |
+ destfile = yield os.path.join(self.getProperty('masterdest'), log_dict[cpv]['full_logname']) |
122 |
sourcefile = log_dict[cpv]['log_path'] |
123 |
self.addFileUploade(sourcefile, destfile) |
124 |
|
125 |
@@ -670,42 +733,62 @@ class CheckEmergeLogs(BuildStep): |
126 |
@defer.inlineCallbacks |
127 |
def getEmergeFiles(self, cpv): |
128 |
# get emerge info |
129 |
- destfile = yield os.path.join(self.masterdest, 'emerge_info.txt') |
130 |
+ destfile = yield os.path.join(self.getProperty('masterdest'), 'emerge_info.txt') |
131 |
sourcefile = yield os.path.join('/', 'tmp', 'emerge_info.txt') |
132 |
self.addFileUploade(sourcefile, destfile) |
133 |
# get emerge.log |
134 |
- destfile2 = yield os.path.join(self.masterdest, 'emerge.log') |
135 |
+ destfile2 = yield os.path.join(self.getProperty('masterdest'), 'emerge.log') |
136 |
sourcefile2 = yield os.path.join('/', 'var', 'log', 'emerge.log') |
137 |
self.addFileUploade(sourcefile2, destfile2) |
138 |
# world file |
139 |
- destfile3 = yield os.path.join(self.masterdest, 'world') |
140 |
+ destfile3 = yield os.path.join(self.getProperty('masterdest'), 'world') |
141 |
sourcefile3 = yield os.path.join('/', 'var', 'lib', 'portage', 'world') |
142 |
self.addFileUploade(sourcefile3, destfile3) |
143 |
# get elogs |
144 |
self.getElogFiles(cpv) |
145 |
|
146 |
- def getBuildWorkdirFiles(self): |
147 |
+ @defer.inlineCallbacks |
148 |
+ def getBuildWorkDirs(self, cpv): |
149 |
#FIXME: |
150 |
# get files from the build workdir |
151 |
- pass |
152 |
+ cpv_build_dir = yield os.path.join('/', 'var', 'tmp', 'portage', cpv) |
153 |
+ print(cpv_build_dir) |
154 |
+ self.setProperty('cpv_build_dir', cpv_build_dir, 'cpv_build_dir') |
155 |
+ cpv_build_work_dir = yield os.path.join(cpv_build_dir, 'work') |
156 |
+ #FIXME: take find pattern from db or config |
157 |
+ find_pattern_list = ['meson-log.txt', 'CMakeCache.txt'] |
158 |
+ shell_commad_list = [] |
159 |
+ # we have *.log as default |
160 |
+ shell_commad_list.append('find') |
161 |
+ shell_commad_list.append('-name') |
162 |
+ shell_commad_list.append('*.log') |
163 |
+ for find_pattern in find_pattern_list: |
164 |
+ shell_commad_list.append('-o') |
165 |
+ shell_commad_list.append('-name') |
166 |
+ shell_commad_list.append(find_pattern) |
167 |
+ self.aftersteps_list.append( |
168 |
+ steps.SetPropertyFromCommand( |
169 |
+ name = 'FindLogs', |
170 |
+ command = shell_commad_list, |
171 |
+ strip = True, |
172 |
+ extract_fn = PersOutputOfBuildWorkdir, |
173 |
+ workdir = cpv_build_work_dir |
174 |
+ )) |
175 |
+ self.aftersteps_list.append(CheckBuildWorkDirs()) |
176 |
|
177 |
@defer.inlineCallbacks |
178 |
def run(self): |
179 |
self.gentooci = self.master.namedServices['services'].namedServices['gentooci'] |
180 |
project_data = self.getProperty('project_data') |
181 |
projects_emerge_options = yield self.gentooci.db.projects.getProjectEmergeOptionsByUuid(project_data['uuid']) |
182 |
- emerge_output = self.getProperty('emerge_output') |
183 |
- self.faild_cpv = emerge_output['failed'] |
184 |
- self.setProperty('faild_cpv', self.faild_cpv, 'faild_cpv') |
185 |
shell_commad_list = [ |
186 |
'emerge', |
187 |
'-v' |
188 |
] |
189 |
+ emerge_output = self.getProperty('emerge_output') |
190 |
+ self.faild_cpv = emerge_output['failed'] |
191 |
package_dict = emerge_output['packages'] |
192 |
|
193 |
- self.masterdest = yield os.path.join(self.master.basedir, 'workers', self.getProperty('workername'), str(self.getProperty("buildnumber"))) |
194 |
- self.setProperty('masterdest', self.masterdest, 'masterdest') |
195 |
- |
196 |
#FIXME: Prosees the logs and do stuff |
197 |
# preserved-libs |
198 |
if emerge_output['preserved_libs'] and projects_emerge_options['preserved_libs']: |
199 |
@@ -849,8 +932,9 @@ class CheckEmergeLogs(BuildStep): |
200 |
self.log_data[self.faild_cpv] = log_dict[self.faild_cpv] |
201 |
yield self.getLogFile(self.faild_cpv, log_dict) |
202 |
faild_version_data = yield self.getVersionData(self.faild_cpv) |
203 |
+ self.setProperty('faild_cpv', self.faild_cpv, 'faild_cpv') |
204 |
self.getEmergeFiles(self.faild_cpv) |
205 |
- self.getBuildWorkdirFiles() |
206 |
+ self.getBuildWorkDirs(self.faild_cpv) |
207 |
else: |
208 |
self.getEmergeFiles(cpv) |
209 |
self.aftersteps_list.append(steps.Trigger( |