1 |
commit: 3791e957fd2bb28f350f0ff7399c0c6e43b561d6 |
2 |
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org> |
3 |
AuthorDate: Fri Aug 5 18:32:11 2022 +0000 |
4 |
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org> |
5 |
CommitDate: Fri Aug 5 18:32:11 2022 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=3791e957 |
7 |
|
8 |
Add haskell-updater for haskell packages |
9 |
|
10 |
Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org> |
11 |
|
12 |
buildbot_gentoo_ci/steps/builders.py | 147 ++++++++++++++++++++++------------- |
13 |
1 file changed, 91 insertions(+), 56 deletions(-) |
14 |
|
15 |
diff --git a/buildbot_gentoo_ci/steps/builders.py b/buildbot_gentoo_ci/steps/builders.py |
16 |
index a54c68c..3b6a8d0 100644 |
17 |
--- a/buildbot_gentoo_ci/steps/builders.py |
18 |
+++ b/buildbot_gentoo_ci/steps/builders.py |
19 |
@@ -4,6 +4,7 @@ |
20 |
import os |
21 |
import re |
22 |
import json |
23 |
+from pathlib import Path |
24 |
|
25 |
from portage.versions import catpkgsplit, cpv_getversion |
26 |
from portage.dep import dep_getcpv, dep_getslot, dep_getrepo |
27 |
@@ -90,6 +91,8 @@ def PersOutputOfEmerge(rc, stdout, stderr): |
28 |
# split the lines |
29 |
#FIXME: Handling of stderr output |
30 |
stderr_line_list = [] |
31 |
+ if stderr != '' and not emerge_output['failed']: |
32 |
+ emerge_output['failed'] = True |
33 |
for line in stderr.split('\n'): |
34 |
if 'Change USE:' in line: |
35 |
line_list = line.split(' ') |
36 |
@@ -340,6 +343,7 @@ class SetupPropertys(BuildStep): |
37 |
print(self.getProperty("project_build_data")) |
38 |
self.masterdest = yield os.path.join(self.master.basedir, 'workers', self.getProperty('workername'), str(self.getProperty("buildnumber"))) |
39 |
self.setProperty('masterdest', self.masterdest, 'masterdest') |
40 |
+ self.setProperty('build_env', {}, 'build_env') |
41 |
self.descriptionDone = ' '.join([self.getProperty("cpv"), 'for project', self.getProperty('project_data')['name']]) |
42 |
return SUCCESS |
43 |
|
44 |
@@ -355,7 +359,6 @@ class RunEmerge(BuildStep): |
45 |
super().__init__(**kwargs) |
46 |
self.descriptionSuffix = self.step |
47 |
self.name = 'Setup emerge for ' + self.step + ' step' |
48 |
- self.build_env = {} |
49 |
self.build_timeout = 0 |
50 |
|
51 |
@defer.inlineCallbacks |
52 |
@@ -374,25 +377,28 @@ class RunEmerge(BuildStep): |
53 |
aftersteps_list = [] |
54 |
#FIXME: Set build timeout in config |
55 |
self.build_timeout = 6600 |
56 |
- # set env |
57 |
- # https://bugs.gentoo.org/683118 |
58 |
- # export TERM=linux |
59 |
- # export TERMINFO=/etc/terminfo |
60 |
- self.build_env['TERM'] = 'linux' |
61 |
- self.build_env['TERMINFO'] = '/etc/terminfo' |
62 |
- # Lang |
63 |
- self.build_env['LANG'] = 'C.utf8' |
64 |
- self.build_env['LC_MESSAGES'] = 'C' |
65 |
- # no color |
66 |
- self.build_env['CARGO_TERM_COLOR'] = 'never' |
67 |
- self.build_env['GCC_COLORS'] = '0' |
68 |
- self.build_env['OCAML_COLOR'] = 'never' |
69 |
- self.build_env['PY_FORCE_COLOR'] = '0' |
70 |
- self.build_env['PYTEST_ADDOPTS'] = '--color=no' |
71 |
- self.build_env['NO_COLOR'] = '1' |
72 |
- # not all terms support urls |
73 |
- self.build_env['GCC_URLS'] = 'no' |
74 |
- self.build_env['TERM_URLS'] = 'no' |
75 |
+ if self.step == 'update': |
76 |
+ # set env |
77 |
+ build_env = {} |
78 |
+ # https://bugs.gentoo.org/683118 |
79 |
+ # export TERM=linux |
80 |
+ # export TERMINFO=/etc/terminfo |
81 |
+ build_env['TERM'] = 'linux' |
82 |
+ build_env['TERMINFO'] = '/etc/terminfo' |
83 |
+ # Lang |
84 |
+ build_env['LANG'] = 'C.utf8' |
85 |
+ build_env['LC_MESSAGES'] = 'C' |
86 |
+ # no color |
87 |
+ build_env['CARGO_TERM_COLOR'] = 'never' |
88 |
+ build_env['GCC_COLORS'] = '0' |
89 |
+ build_env['OCAML_COLOR'] = 'never' |
90 |
+ build_env['PY_FORCE_COLOR'] = '0' |
91 |
+ build_env['PYTEST_ADDOPTS'] = '--color=no' |
92 |
+ build_env['NO_COLOR'] = '1' |
93 |
+ # not all terms support urls |
94 |
+ build_env['GCC_URLS'] = 'no' |
95 |
+ build_env['TERM_URLS'] = 'no' |
96 |
+ self.setProperty('build_env', build_env, 'build_env') |
97 |
|
98 |
if self.step == 'pre-update': |
99 |
shell_commad_list.append('-uDN') |
100 |
@@ -432,6 +438,7 @@ class RunEmerge(BuildStep): |
101 |
strip=True, |
102 |
extract_fn=PersOutputOfEmerge, |
103 |
workdir='/', |
104 |
+ env=self.getProperty("build_env"), |
105 |
timeout=self.build_timeout |
106 |
)) |
107 |
aftersteps_list.append(CheckEmergeLogs('update')) |
108 |
@@ -548,7 +555,7 @@ class RunEmerge(BuildStep): |
109 |
strip=True, |
110 |
extract_fn=PersOutputOfEmerge, |
111 |
workdir='/', |
112 |
- env=self.build_env, |
113 |
+ env=self.getProperty("build_env"), |
114 |
timeout=self.build_timeout |
115 |
)) |
116 |
aftersteps_list.append(CheckEmergeLogs('build')) |
117 |
@@ -682,11 +689,9 @@ class CheckEmergeLogs(BuildStep): |
118 |
@defer.inlineCallbacks |
119 |
def createDistDir(self): |
120 |
workdir = yield os.path.join(self.master.basedir, 'workers', self.getProperty('workername')) |
121 |
- self.aftersteps_list.append(steps.MasterShellCommand( |
122 |
- name = 'Make directory for Uploaded files', |
123 |
- command = ['mkdir', str(self.getProperty("buildnumber"))], |
124 |
- workdir = workdir |
125 |
- )) |
126 |
+ check_dir = yield os.path.join(workdir, str(self.getProperty("buildnumber"))) |
127 |
+ if not Path(check_dir).is_dir(): |
128 |
+ yield Path(check_dir).mkdir(parents=True) |
129 |
|
130 |
def addFileUploade(self, sourcefile, destfile, name, url, urlText): |
131 |
self.aftersteps_list.append(steps.FileUpload( |
132 |
@@ -814,7 +819,7 @@ class CheckEmergeLogs(BuildStep): |
133 |
print(emerge_output) |
134 |
# this should be set in the config |
135 |
retrays = 5 |
136 |
- if self.getProperty('rerun') <= retrays: |
137 |
+ if self.getProperty('rerun') <= retrays and self.faild_cpv: |
138 |
# when we need to change use. we could rerun pre-build with |
139 |
# --autounmask-use=y --autounmask-write=y --autounmask-only=y |
140 |
# but we use --binpkg--respect-use=y in EMERGE_DEFAULT_OPTS |
141 |
@@ -895,7 +900,9 @@ class CheckEmergeLogs(BuildStep): |
142 |
self.aftersteps_list.append(CheckEmergeLogs('extra-build')) |
143 |
else: |
144 |
# trigger parse_build_log with info about pre-build and it fail |
145 |
- pass |
146 |
+ if self.faild_cpv: |
147 |
+ pass |
148 |
+ self.setProperty('rerun', 0, 'rerun') |
149 |
# Make Logfile dict |
150 |
if self.step == 'extra-build' or self.step == 'build': |
151 |
print(emerge_output) |
152 |
@@ -922,7 +929,9 @@ class CheckEmergeLogs(BuildStep): |
153 |
# trigger a logparser |
154 |
# local_log_path dir set in config |
155 |
# format /var/cache/portage/logs/build/gui-libs/egl-wayland-1.1.6:20210321-173525.log.gz |
156 |
+ rebuild = False |
157 |
if self.step == 'build': |
158 |
+ retrays = 1 |
159 |
# Find log for cpv that was requested or did failed |
160 |
if not log_dict == {}: |
161 |
# requested cpv |
162 |
@@ -934,36 +943,62 @@ class CheckEmergeLogs(BuildStep): |
163 |
self.log_data[cpv] = log_dict[cpv] |
164 |
yield self.getLogFile(cpv, log_dict) |
165 |
if self.faild_cpv: |
166 |
- # failed and build requested cpv |
167 |
- if cpv == self.faild_cpv: |
168 |
- faild_version_data = self.getProperty("version_data") |
169 |
- else: |
170 |
- # failed but not build requested cpv |
171 |
- self.log_data[self.faild_cpv] = log_dict[self.faild_cpv] |
172 |
- yield self.getLogFile(self.faild_cpv, log_dict) |
173 |
- faild_version_data = yield self.getVersionData(self.faild_cpv) |
174 |
- self.setProperty('faild_cpv', self.faild_cpv, 'faild_cpv') |
175 |
- self.getEmergeFiles(self.faild_cpv) |
176 |
- self.getBuildWorkDirs(self.faild_cpv) |
177 |
+ c = yield catpkgsplit(self.faild_cpv)[0] |
178 |
+ if c == 'dev-haskell': |
179 |
+ rebuild = 'haskell' |
180 |
+ if not rebuild or self.getProperty('rerun') >= retrays: |
181 |
+ # failed and build requested cpv |
182 |
+ if cpv == self.faild_cpv: |
183 |
+ faild_version_data = self.getProperty("version_data") |
184 |
+ else: |
185 |
+ # failed but not build requested cpv |
186 |
+ self.log_data[self.faild_cpv] = log_dict[self.faild_cpv] |
187 |
+ yield self.getLogFile(self.faild_cpv, log_dict) |
188 |
+ faild_version_data = yield self.getVersionData(self.faild_cpv) |
189 |
+ self.setProperty('faild_cpv', self.faild_cpv, 'faild_cpv') |
190 |
+ self.getEmergeFiles(self.faild_cpv) |
191 |
+ self.getBuildWorkDirs(self.faild_cpv) |
192 |
+ rebuild = False |
193 |
else: |
194 |
self.getEmergeFiles(cpv) |
195 |
- self.aftersteps_list.append(steps.Trigger( |
196 |
- name = 'Setup properties for log parser and trigger it', |
197 |
- schedulerNames=['parse_build_log'], |
198 |
- waitForFinish=False, |
199 |
- updateSourceStamp=False, |
200 |
- set_properties={ |
201 |
- 'cpv' : self.getProperty("cpv"), |
202 |
- 'faild_version_data' : faild_version_data, |
203 |
- 'project_build_data' : self.getProperty('project_build_data'), |
204 |
- 'log_build_data' : self.log_data, |
205 |
- 'pkg_check_log_data' : self.getProperty("pkg_check_log_data"), |
206 |
- 'repository_data' : self.getProperty('repository_data'), |
207 |
- 'faild_cpv' : self.faild_cpv, |
208 |
- 'step' : self.step, |
209 |
- 'build_workername' : self.getProperty('workername') |
210 |
- } |
211 |
- )) |
212 |
+ if not rebuild: |
213 |
+ self.aftersteps_list.append(steps.Trigger( |
214 |
+ name = 'Setup properties for log parser and trigger it', |
215 |
+ schedulerNames=['parse_build_log'], |
216 |
+ waitForFinish=False, |
217 |
+ updateSourceStamp=False, |
218 |
+ set_properties={ |
219 |
+ 'cpv' : self.getProperty("cpv"), |
220 |
+ 'faild_version_data' : faild_version_data, |
221 |
+ 'project_build_data' : self.getProperty('project_build_data'), |
222 |
+ 'log_build_data' : self.log_data, |
223 |
+ 'pkg_check_log_data' : self.getProperty("pkg_check_log_data"), |
224 |
+ 'repository_data' : self.getProperty('repository_data'), |
225 |
+ 'faild_cpv' : self.faild_cpv, |
226 |
+ 'step' : self.step, |
227 |
+ 'build_workername' : self.getProperty('workername') |
228 |
+ } |
229 |
+ )) |
230 |
+ if rebuild: |
231 |
+ #FIXME: Set build timeout in config |
232 |
+ build_timeout = 6600 |
233 |
+ shell_commad_list = [] |
234 |
+ # rebuild broken haskell |
235 |
+ if rebuild == 'haskell': |
236 |
+ shell_commad_list.append('haskell-updater') |
237 |
+ shell_commad_list.append('--') |
238 |
+ shell_commad_list.append('--usepkg=n') |
239 |
+ if shell_commad_list != []: |
240 |
+ self.aftersteps_list.append( |
241 |
+ steps.ShellCommand( |
242 |
+ command=shell_commad_list, |
243 |
+ workdir='/', |
244 |
+ env=self.getProperty("build_env"), |
245 |
+ timeout=build_timeout |
246 |
+ )) |
247 |
+ self.aftersteps_list.append(RunEmerge(step='build')) |
248 |
+ self.aftersteps_list.append(CheckEmergeLogs('build')) |
249 |
+ self.setProperty('rerun', self.getProperty('rerun') + 1, 'rerun') |
250 |
if not self.step is None and self.aftersteps_list != []: |
251 |
yield self.build.addStepsAfterCurrentStep(self.aftersteps_list) |
252 |
return SUCCESS |