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: Tue, 18 Jan 2022 19:17:00
Message-Id: 1642533404.1fc28f8dc77b5ef0c9d2d6eac054d91b455d9048.zorry@gentoo
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(