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/config/, buildbot_gentoo_ci/steps/
Date: Sat, 17 Apr 2021 17:25:21
Message-Id: 1618680288.bfa939daa5d6aad8f4a7b129bced7e9dba796828.zorry@gentoo
1 commit: bfa939daa5d6aad8f4a7b129bced7e9dba796828
2 Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
3 AuthorDate: Sat Apr 17 17:24:48 2021 +0000
4 Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
5 CommitDate: Sat Apr 17 17:24:48 2021 +0000
6 URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=bfa939da
7
8 Add support for more LocalWorkers
9
10 Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
11
12 buildbot_gentoo_ci/config/builders.py | 28 +++++++-------
13 buildbot_gentoo_ci/config/buildfactorys.py | 8 ----
14 buildbot_gentoo_ci/config/schedulers.py | 10 ++---
15 buildbot_gentoo_ci/config/workers.py | 3 ++
16 buildbot_gentoo_ci/steps/category.py | 2 +-
17 buildbot_gentoo_ci/steps/package.py | 32 +++++++--------
18 buildbot_gentoo_ci/steps/portage.py | 3 +-
19 buildbot_gentoo_ci/steps/update_db.py | 62 ++++++++++--------------------
20 buildbot_gentoo_ci/steps/version.py | 46 +++++++++++-----------
21 9 files changed, 85 insertions(+), 109 deletions(-)
22
23 diff --git a/buildbot_gentoo_ci/config/builders.py b/buildbot_gentoo_ci/config/builders.py
24 index d022ac7..56cdde1 100644
25 --- a/buildbot_gentoo_ci/config/builders.py
26 +++ b/buildbot_gentoo_ci/config/builders.py
27 @@ -4,8 +4,14 @@
28 from buildbot.plugins import util
29 from buildbot_gentoo_ci.config import buildfactorys
30
31 +# FIXME: get workers from db or file
32 +LocalWorkers = []
33 +LocalWorkers.append('updatedb_1')
34 +LocalWorkers.append('updatedb_2')
35 +LocalWorkers.append('updatedb_3')
36 +LocalWorkers.append('updatedb_4')
37 +
38 def gentoo_builders(b=[]):
39 - # FIXME: get workers from db
40 b.append(util.BuilderConfig(
41 name='update_db_check',
42 workername='updatedb_1',
43 @@ -14,47 +20,44 @@ def gentoo_builders(b=[]):
44 factory=buildfactorys.update_db_check()
45 )
46 )
47 - # FIXME: get workers from db
48 b.append(util.BuilderConfig(
49 name='update_repo_check',
50 - workername='updatedb_1',
51 + workername='updatedb_2',
52 workerbuilddir='builds',
53 collapseRequests=True,
54 factory=buildfactorys.update_repo_check()
55 )
56 )
57 - # FIXME: get workers from db
58 - # Use multiplay workers depend on Property(cpv)
59 + # Use multiplay workers depend on Property(cp)
60 # if cp do not match next one, use diffrent worker then
61 # or first cp have done its buildsteps.
62 + # first LocalWorker need to be done before we can use mulitplay workers (git pull)
63 b.append(util.BuilderConfig(
64 name='update_cpv_data',
65 - workername='updatedb_1',
66 + workernames=LocalWorkers,
67 workerbuilddir='builds',
68 collapseRequests=False,
69 factory=buildfactorys.update_db_cp()
70 )
71 )
72 - # FIXME: get workers from db
73 # Use multiplay workers
74 b.append(util.BuilderConfig(
75 name='update_v_data',
76 - workername='updatedb_1',
77 + workernames=LocalWorkers,
78 workerbuilddir='builds',
79 collapseRequests=False,
80 factory=buildfactorys.update_db_v()
81 )
82 )
83 - # FIXME: get workers from db
84 # Use multiplay workers
85 b.append(util.BuilderConfig(
86 name='build_request_data',
87 - workername='updatedb_1',
88 + workernames=LocalWorkers,
89 collapseRequests=False,
90 factory=buildfactorys.build_request_check()
91 )
92 )
93 - # FIXME: get workers from db
94 + # FIXME: get workers from db or file
95 # Use multiplay workers
96 b.append(util.BuilderConfig(
97 name='run_build_request',
98 @@ -63,11 +66,10 @@ def gentoo_builders(b=[]):
99 factory=buildfactorys.run_build_request()
100 )
101 )
102 - # FIXME: get workers from db
103 # Use multiplay workers
104 b.append(util.BuilderConfig(
105 name='parse_build_log',
106 - workername='updatedb_1',
107 + workernames=LocalWorkers,
108 collapseRequests=False,
109 factory=buildfactorys.parse_build_log()
110 )
111
112 diff --git a/buildbot_gentoo_ci/config/buildfactorys.py b/buildbot_gentoo_ci/config/buildfactorys.py
113 index 962eeb0..e08127b 100644
114 --- a/buildbot_gentoo_ci/config/buildfactorys.py
115 +++ b/buildbot_gentoo_ci/config/buildfactorys.py
116 @@ -21,14 +21,6 @@ def update_db_check():
117 f.addStep(update_db.GetDataGentooCiProject())
118 # update the repos
119 f.addStep(update_db.TriggerUpdateRepositorys())
120 - # Check if needed path is there
121 - f.addStep(portage.CheckPathLocal())
122 - # setup the profile
123 - f.addStep(portage.SetMakeProfileLocal())
124 - # setup repos.conf dir
125 - f.addStep(portage.SetReposConfLocal())
126 - # setup make.conf
127 - f.addStep(portage.SetMakeConfLocal())
128 # Make a for loop and trigger new builders with cpv from git_changes
129 # return cpv, repository, project_data
130 f.addStep(update_db.TriggerCheckForCPV())
131
132 diff --git a/buildbot_gentoo_ci/config/schedulers.py b/buildbot_gentoo_ci/config/schedulers.py
133 index 107bb3c..e520076 100644
134 --- a/buildbot_gentoo_ci/config/schedulers.py
135 +++ b/buildbot_gentoo_ci/config/schedulers.py
136 @@ -12,7 +12,7 @@ def builderUpdateDbNames(props):
137 return list(builders)
138
139 @util.renderer
140 -def gitUpdateDb(props):
141 +def getGitChanges(props):
142 k = props.changes[0]
143 change_data = {}
144 print(k)
145 @@ -23,7 +23,6 @@ def gitUpdateDb(props):
146 p = v.split('/')[1]
147 pv = v.split('/')[2][:-7]
148 cpv = c + '/' + pv
149 - print(cpv)
150 change_data['cp'] = c + '/' + p
151 change_data['cpvs'].append(cpv)
152 if k['repository'].endswith('.git'):
153 @@ -35,16 +34,15 @@ def gitUpdateDb(props):
154 change_data['comments'] = k['comments']
155 change_data['revision'] = k['revision']
156 change_data['timestamp'] =k['when_timestamp']
157 - print(change_data)
158 return change_data
159
160 def gentoo_schedulers():
161 scheduler_update_db = schedulers.SingleBranchScheduler(
162 name='scheduler_update_db',
163 treeStableTimer=0,
164 - properties = {
165 - 'git_change' : gitUpdateDb,
166 - },
167 + properties = dict(
168 + change_data = getGitChanges
169 + ),
170 builderNames = builderUpdateDbNames,
171 change_filter=util.ChangeFilter(branch='master'),
172 )
173
174 diff --git a/buildbot_gentoo_ci/config/workers.py b/buildbot_gentoo_ci/config/workers.py
175 index a566b79..6141d89 100644
176 --- a/buildbot_gentoo_ci/config/workers.py
177 +++ b/buildbot_gentoo_ci/config/workers.py
178 @@ -6,5 +6,8 @@ from buildbot.plugins import worker
179 def gentoo_workers(w=[]):
180 # FIXME: Get workers from db
181 w.append(worker.LocalWorker('updatedb_1'))
182 + w.append(worker.LocalWorker('updatedb_2'))
183 + w.append(worker.LocalWorker('updatedb_3'))
184 + w.append(worker.LocalWorker('updatedb_4'))
185 w.append(worker.Worker('bot-test', 'test1234'))
186 return w
187
188 diff --git a/buildbot_gentoo_ci/steps/category.py b/buildbot_gentoo_ci/steps/category.py
189 index 81061e6..946dc63 100644
190 --- a/buildbot_gentoo_ci/steps/category.py
191 +++ b/buildbot_gentoo_ci/steps/category.py
192 @@ -49,7 +49,7 @@ class CheckC(BuildStep):
193 @defer.inlineCallbacks
194 def run(self):
195 self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
196 - self.category = yield self.getProperty("cpv").split('/')[0]
197 + self.category = self.getProperty("change_data")['cp'].split('/')[0]
198 print(self.category)
199 self.category_data = yield self.gentooci.db.categorys.getCategoryByName(self.category)
200 print(self.category_data)
201
202 diff --git a/buildbot_gentoo_ci/steps/package.py b/buildbot_gentoo_ci/steps/package.py
203 index b4e06b7..76c90cc 100644
204 --- a/buildbot_gentoo_ci/steps/package.py
205 +++ b/buildbot_gentoo_ci/steps/package.py
206 @@ -57,7 +57,7 @@ class CheckP(BuildStep):
207 @defer.inlineCallbacks
208 def run(self):
209 self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
210 - self.package = yield catpkgsplit(self.getProperty("cpv"))[1]
211 + self.package = self.getProperty("change_data")['cp'].split('/')[1]
212 print(self.package)
213 self.package_data = yield self.gentooci.db.packages.getPackageByName(self.package,
214 self.getProperty("category_data")['uuid'],
215 @@ -86,20 +86,22 @@ class TriggerCheckForV(BuildStep):
216 @defer.inlineCallbacks
217 def run(self):
218 addStepUpdateVData = []
219 - addStepUpdateVData.append(
220 - steps.Trigger(
221 - schedulerNames=['update_v_data'],
222 - waitForFinish=False,
223 - updateSourceStamp=False,
224 - set_properties={
225 - 'cpv' : self.getProperty("cpv"),
226 - 'package_data' : self.getProperty("package_data"),
227 - 'repository_data' : self.getProperty("repository_data"),
228 - 'category_data' : self.getProperty("category_data"),
229 - 'revision_data' : self.getProperty("revision_data"),
230 - 'project_data' : self.getProperty("project_data"),
231 - }
232 - )
233 + for cpv in self.getProperty("change_data")['cpvs']:
234 + print(cpv)
235 + addStepUpdateVData.append(
236 + steps.Trigger(
237 + schedulerNames=['update_v_data'],
238 + waitForFinish=False,
239 + updateSourceStamp=False,
240 + set_properties={
241 + 'cpv' : cpv,
242 + 'package_data' : self.getProperty("package_data"),
243 + 'repository_data' : self.getProperty("repository_data"),
244 + 'category_data' : self.getProperty("category_data"),
245 + 'change_data' : self.getProperty("change_data"),
246 + 'project_data' : self.getProperty("project_data"),
247 + }
248 )
249 + )
250 yield self.build.addStepsAfterCurrentStep(addStepUpdateVData)
251 return SUCCESS
252
253 diff --git a/buildbot_gentoo_ci/steps/portage.py b/buildbot_gentoo_ci/steps/portage.py
254 index c7e82ce..37f7342 100644
255 --- a/buildbot_gentoo_ci/steps/portage.py
256 +++ b/buildbot_gentoo_ci/steps/portage.py
257 @@ -407,11 +407,12 @@ class SetMakeProfileLocal(BuildStep):
258 if os.path.isfile(parent_path):
259 return SKIPPED
260 self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
261 + self.profile_repository_data = yield self.gentooci.db.repositorys.getRepositoryByUuid(self.getProperty('project_data')['profile_repository_uuid'])
262 self.repository_basedir = self.gentooci.config.project['repository_basedir']
263 makeprofiles_paths = []
264 makeprofiles_data = yield self.gentooci.db.projects.getAllProjectPortageByUuidAndDirectory(self.getProperty('project_data')['uuid'], 'make.profile')
265 for makeprofile in makeprofiles_data:
266 - makeprofile_path = yield os.path.join(self.repository_basedir, self.getProperty("profile_repository_data")['name'], 'profiles', makeprofile['value'], '')
267 + makeprofile_path = yield os.path.join(self.repository_basedir, self.profile_repository_data['name'], 'profiles', makeprofile['value'], '')
268 makeprofiles_paths.append('../../../' + makeprofile_path)
269 yield WriteTextToFile(parent_path, makeprofiles_paths)
270 return SUCCESS
271
272 diff --git a/buildbot_gentoo_ci/steps/update_db.py b/buildbot_gentoo_ci/steps/update_db.py
273 index b19d0e7..8e7f8ee 100644
274 --- a/buildbot_gentoo_ci/steps/update_db.py
275 +++ b/buildbot_gentoo_ci/steps/update_db.py
276 @@ -25,11 +25,13 @@ class GetDataGentooCiProject(BuildStep):
277 return FAILURE
278 self.profile_repository_data = yield self.gentooci.db.repositorys.getRepositoryByUuid(self.project_data['profile_repository_uuid'])
279 if self.profile_repository_data is None:
280 - log.err('No data for repository in the database')
281 + log.err('No data for profile repository in the database')
282 + return FAILURE
283 + if not isinstance(self.getProperty("change_data"), dict):
284 return FAILURE
285 print(self.project_data)
286 print(self.profile_repository_data)
287 - print(self.getProperty("git_change"))
288 + print(self.getProperty("change_data"))
289 print(self.getProperty("repository"))
290 repository = False
291 self.repository_data = False
292 @@ -39,6 +41,9 @@ class GetDataGentooCiProject(BuildStep):
293 repository = v[:-4]
294 if repository:
295 self.repository_data = yield self.gentooci.db.repositorys.getRepositoryByName(repository)
296 + if self.getProperty("change_data")['repository'] != self.repository_data['name']:
297 + log.msg("%s don't match" % self.getProperty("change_data")['repository'])
298 + return FAILURE
299 self.setProperty("project_data", self.project_data, 'project_data')
300 self.setProperty("profile_repository_data", self.profile_repository_data, 'profile_repository_data')
301 self.setProperty("repository_data", self.repository_data, 'repository_data')
302 @@ -65,7 +70,7 @@ class TriggerUpdateRepositorys(BuildStep):
303 set_properties={
304 'profile_repository_uuid' : self.getProperty("profile_repository_data")['uuid'],
305 'repository_uuid' : self.getProperty("repository_data")['uuid'],
306 - 'commit_time' : self.getProperty("git_change")['timestamp'],
307 + 'commit_time' : self.getProperty("change_data")['timestamp'],
308 }
309 )
310 ])
311 @@ -84,43 +89,16 @@ class TriggerCheckForCPV(BuildStep):
312
313 @defer.inlineCallbacks
314 def run(self):
315 - change_data = self.getProperty("git_change")
316 - # check if git_change is a dict
317 - if not isinstance(change_data, dict):
318 - return FAILURE
319 - addStepUpdateCPVData = []
320 - # make a trigger for all cpv in the list
321 - for cpv in change_data['cpvs']:
322 - self.success = True
323 - if change_data['repository'] != self.getProperty("repository_data")['name']:
324 - log.msg("%s don't match" % change_data['repository'])
325 - self.success = False
326 - # Trigger cpv builds and update db if we are working with ebuilds
327 - # check that cpv is valied
328 - if catpkgsplit(cpv) is None:
329 - log.msg("%s is not vaild package name" % cpv)
330 - self.success = False
331 - if self.success:
332 - revision_data = {}
333 - revision_data['author'] = change_data['author']
334 - revision_data['committer'] = change_data['committer']
335 - revision_data['comments'] = change_data['comments']
336 - revision_data['revision'] = change_data['revision']
337 - addStepUpdateCPVData.append(
338 - steps.Trigger(
339 - schedulerNames=['update_cpv_data'],
340 - waitForFinish=False,
341 - updateSourceStamp=False,
342 - set_properties={
343 - 'cpv' : cpv,
344 - 'project_data' : self.getProperty("project_data"),
345 - 'repository_data' : self.getProperty("repository_data"),
346 - 'revision_data' : revision_data,
347 - }
348 - )
349 - )
350 - print(addStepUpdateCPVData)
351 - yield self.build.addStepsAfterCurrentStep(addStepUpdateCPVData)
352 - if self.success is False:
353 - return FAILURE
354 + yield self.build.addStepsAfterCurrentStep([
355 + steps.Trigger(
356 + schedulerNames=['update_cpv_data'],
357 + waitForFinish=False,
358 + updateSourceStamp=False,
359 + set_properties={
360 + 'project_data' : self.getProperty("project_data"),
361 + 'repository_data' : self.getProperty("repository_data"),
362 + 'change_data' : self.getProperty("change_data"),
363 + }
364 + )
365 + ])
366 return SUCCESS
367
368 diff --git a/buildbot_gentoo_ci/steps/version.py b/buildbot_gentoo_ci/steps/version.py
369 index e6a927a..df97536 100644
370 --- a/buildbot_gentoo_ci/steps/version.py
371 +++ b/buildbot_gentoo_ci/steps/version.py
372 @@ -15,6 +15,7 @@ from twisted.python import log
373 from buildbot.process.buildstep import BuildStep
374 from buildbot.process.results import SUCCESS
375 from buildbot.process.results import FAILURE
376 +from buildbot.process.results import WARNINGS
377 from buildbot.plugins import steps
378
379 from buildbot_gentoo_ci.steps import portage as portage_steps
380 @@ -36,6 +37,7 @@ class GetVData(BuildStep):
381 # set cwd to builddir
382 yield os.chdir(self.getProperty("builddir"))
383 self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
384 + print(self.getProperty("cpv"))
385 self.version = yield cpv_getversion(self.getProperty("cpv"))
386 print(self.version)
387 self.old_version_data = yield self.gentooci.db.versions.getVersionByName(self.version, self.getProperty("package_data")['uuid'])
388 @@ -90,8 +92,8 @@ class GetCommitdata(BuildStep):
389
390 #@defer.inlineCallbacks
391 def run(self):
392 - print(self.getProperty("revision_data"))
393 - self.setProperty('commit_id', self.getProperty("revision_data")['revision'], 'commit_id')
394 + print(self.getProperty("change_data"))
395 + self.setProperty('commit_id', self.getProperty("change_data")['revision'], 'commit_id')
396 return SUCCESS
397
398 class AddVersionKeyword(BuildStep):
399 @@ -243,32 +245,30 @@ class CheckV(BuildStep):
400
401 @defer.inlineCallbacks
402 def run(self):
403 - self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
404 - self.old_version_data = self.getProperty("old_version_data")
405 - self.ebuild_file = self.getProperty("ebuild_file")
406 addStepVData = []
407 - print(self.ebuild_file)
408 - print(self.old_version_data)
409 + print(self.getProperty("ebuild_file"))
410 + print(self.getProperty("old_version_data"))
411 print(self.getProperty("ebuild_file_hash"))
412 - if self.getProperty("ebuild_file") is None and self.getProperty("old_version_data") is not None:
413 - addStepVData.append(TriggerBuildCheck())
414 - addStepVData.append(DeleteOldVersion())
415 - if self.getProperty("ebuild_file") is not None and self.getProperty("old_version_data") is not None:
416 - if self.getProperty("ebuild_file_hash") != self.getProperty("old_version_data")['file_hash']:
417 - addStepVData.append(GetCommitdata())
418 - #FIXME: use GetAuxMetadata insted of bugy SetEnvForEbuildSH
419 - #addStepVData.append(portage_steps.SetEnvForEbuildSH())
420 - addStepVData.append(portage_steps.GetAuxMetadata())
421 - addStepVData.append(AddVersion())
422 - addStepVData.append(AddVersionKeyword())
423 + if self.getProperty("ebuild_file") is None:
424 + if self.getProperty("old_version_data") is None:
425 + return WARNINGS
426 + else:
427 addStepVData.append(TriggerBuildCheck())
428 addStepVData.append(DeleteOldVersion())
429 - else:
430 - return SUCCESS
431 - if self.getProperty("ebuild_file") is not None and self.getProperty("old_version_data") is None:
432 + else:
433 + if self.getProperty("old_version_data") is not None:
434 + if self.getProperty("ebuild_file_hash") == self.getProperty("old_version_data")['file_hash']:
435 + return WARNINGS
436 + else:
437 + addStepVData.append(DeleteOldVersion())
438 + # setup /etc/portage
439 + addStepVData.append(portage_steps.CheckPathLocal())
440 + addStepVData.append(portage_steps.SetMakeProfileLocal())
441 + addStepVData.append(portage_steps.SetReposConfLocal())
442 + addStepVData.append(portage_steps.SetMakeConfLocal())
443 + # get commit data
444 addStepVData.append(GetCommitdata())
445 - #FIXME: use GetAuxMetadata insted of bugy SetEnvForEbuildSH
446 - #addStepVData.append(portage_steps.SetEnvForEbuildSH())
447 + # get ebuild aux metadata
448 addStepVData.append(portage_steps.GetAuxMetadata())
449 addStepVData.append(AddVersion())
450 addStepVData.append(AddVersionKeyword())