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: Fri, 05 Aug 2022 18:32:30
Message-Id: 1659724331.3791e957fd2bb28f350f0ff7399c0c6e43b561d6.zorry@gentoo
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