diff options
Diffstat (limited to 'buildbot_gentoo_ci/steps/nodes.py')
-rw-r--r-- | buildbot_gentoo_ci/steps/nodes.py | 121 |
1 files changed, 106 insertions, 15 deletions
diff --git a/buildbot_gentoo_ci/steps/nodes.py b/buildbot_gentoo_ci/steps/nodes.py index 902f7a8..f92727b 100644 --- a/buildbot_gentoo_ci/steps/nodes.py +++ b/buildbot_gentoo_ci/steps/nodes.py @@ -25,7 +25,7 @@ from buildbot_gentoo_ci.steps import portage as portage_steps from buildbot_gentoo_ci.steps import repos as repos_steps class SetupPropertys(BuildStep): - name = 'Setup propertys for stage4 image' + name = 'Setup propertys for images build' description = 'Running' descriptionSuffix = None haltOnFailure = True @@ -40,14 +40,112 @@ class SetupPropertys(BuildStep): self.gentooci = self.master.namedServices['services'].namedServices['gentooci'] project_data = yield self.gentooci.db.projects.getProjectByUuid(self.getProperty('project_uuid')) self.setProperty('project_data', project_data, 'project_data') - #FIXME: set it in db node config - self.workerbase = yield os.path.join('/', 'srv', 'gentoo', 'stage4') - self.workerdest = yield os.path.join(self.workerbase, self.getProperty('project_uuid')) + #FIXME: set it in node config + self.workerbase = yield os.path.join('/', 'srv', 'gentoo') + #self.workerdest = yield os.path.join(self.workerbase, self.getProperty('project_uuid')) self.setProperty('workerbase', self.workerbase, 'workerbase') - self.setProperty('workerdest', self.workerdest, 'workerdest') - self.setProperty('stage3', 'image', 'stage3') - # we only support docker for now - self.setProperty('type', 'docker', 'type') + #self.setProperty('workerdest', self.workerdest, 'workerdest') + node_info = {} + workers = yield self.gentooci.db.projects.getWorkersByProjectUuid(project_data['uuid']) + print(workers) + for worker in workers: + worker_data = yield self.gentooci.db.workers.getWorkerByUuid(worker['worker_uuid']) + print(worker_data) + node_data = yield self.gentooci.db.workers.getNodeByWorkerUuid(worker['worker_uuid']) + print(node_data) + if node_info == {} or node_info['uuid'] != node_data['node_uuid']: + node_info = yield self.gentooci.db.workers.getNodeByUuid(node_data['node_uuid']) + image_info = yield self.gentooci.db.workers.getImageById(worker_data['image_id']) + print(node_info) + print(image_info) + self.setProperty('node_data', node_info, 'node_data') + self.setProperty('image_data', image_info, 'image_data') + return SUCCESS + +class SetupBuildStepsForDocker(BuildStep): + name = 'Setup build steps for building docker images' + description = 'Running' + descriptionSuffix = None + haltOnFailure = True + flunkOnFailure = True + + def __init__(self, **kwargs): + super().__init__(**kwargs) + + @defer.inlineCallbacks + def run(self): + self.gentooci = self.master.namedServices['services'].namedServices['gentooci'] + node_data = self.getProperty("node_data") + image_data = self.getProperty("image_data") + dockerfile = self.getProperty("image_data")['dockerfile'] + '.Dockerfile' + dockerfile_path = os.path.join(self.master.basedir, 'docker') + #FIXME: Set build timeout in config + self.build_timeout = 6600 + aftersteps_list = [] + aftersteps_list.append(steps.FileDownload( + flunkOnFailure=True, + name='Upload Dockerfile', + mastersrc = os.path.join(dockerfile_path, dockerfile), + workerdest = dockerfile + )) + # build the gentoo docker buildbot-worker image + # set the build args + self.buildargs = {} + # set PROJECTUUID + self.buildargs['PROJECTUUID'] = self.getProperty("project_uuid") + # set ACCEPT_KEYWORDS + keyword_data = yield self.gentooci.db.keywords.getKeywordById(self.getProperty('project_data')['keyword_id']) + if self.getProperty('project_data')['status'] == 'unstable': + self.buildargs['KEYWORDS'] = '~' + keyword_data['name'] + else: + self.buildargs['KEYWORDS'] = keyword_data['name'] + # set ARCH + self.buildargs['ARCH'] = keyword_data['name'] + # set MAKEOPTS + # set USE + # set CFLAGS + # set BINHOSTURL + self.buildargs['BINHOSTURL'] = node_data['bin_host_url'] + # set bootstrap image + self.buildargs['BOOTSTRAPTAG'] = image_data['bootstrap_tag'] + # build the gentoo docker buildbot-worker image + aftersteps_list.append(steps.ShellCommand( + flunkOnFailure=True, + name='Build docker buildbot-worker image', + command=['docker', + 'buildx', + 'build', + '--file', dockerfile, + '--build-arg', 'PROJECTUUID='+ self.buildargs['PROJECTUUID'], + '--build-arg', 'KEYWORDS=' + self.buildargs['KEYWORDS'], + '--build-arg', 'ARCH=' + self.buildargs['ARCH'], + '--build-arg', 'BINHOSTURL=' + self.buildargs['BINHOSTURL'], + '--build-arg', 'BOOTSTRAPTAG=' + self.buildargs['BOOTSTRAPTAG'], + '--tag', image_data['tag'], + '.'], + timeout=self.build_timeout + )) + if aftersteps_list != []: + yield self.build.addStepsAfterCurrentStep(aftersteps_list) + return SUCCESS + +class SetupBuildTypeAndSteps(BuildStep): + name = 'Check build type for building images' + description = 'Running' + descriptionSuffix = None + haltOnFailure = True + flunkOnFailure = True + + def __init__(self, **kwargs): + super().__init__(**kwargs) + + @defer.inlineCallbacks + def run(self): + aftersteps_list = [] + if self.getProperty("image_data")['type'] == 'docker': + aftersteps_list.append(SetupBuildStepsForDocker()) + if aftersteps_list != []: + yield self.build.addStepsAfterCurrentStep(aftersteps_list) return SUCCESS class SetupStage4Steps(BuildStep): @@ -204,13 +302,6 @@ class SetupStage4Steps(BuildStep): command=['docker', 'import', 'stage4-' + self.getProperty('project_uuid') + '.tar', 'stage4-' + self.getProperty('project_uuid') + ':latest'], workdir=self.getProperty("workerbase") )) - # gentoo docker buildbot-worker image - aftersteps_list.append(steps.ShellCommand( - flunkOnFailure=True, - name='Build docker buildbot-worker image', - command=['docker', 'buildx', 'build', '--file', '../docker/GentooBuildbotWorker.Docker', '--build-arg', 'PROJECTUUID=' + self.getProperty('project_uuid'), '--tag', 'bb-worker-' + self.getProperty('project_uuid') + ':latest', '.'], - workdir=self.getProperty("workerbase") - )) if aftersteps_list != []: yield self.build.addStepsAfterCurrentStep(aftersteps_list) return SUCCESS |