aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'buildbot_gentoo_ci/steps/nodes.py')
-rw-r--r--buildbot_gentoo_ci/steps/nodes.py121
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