diff options
author | Magnus Granberg <zorry@gentoo.org> | 2021-02-27 23:45:35 +0100 |
---|---|---|
committer | Magnus Granberg <zorry@gentoo.org> | 2021-02-27 23:45:35 +0100 |
commit | 22ad0178cca549026ab51f9f26e3fb9ad28f6374 (patch) | |
tree | ddea323280aa6e7a30b9448e65a6b68b043dfdf7 | |
parent | Remove the symlink for make.profile before we remove the portage dir (diff) | |
download | tinderbox-cluster-22ad0178cca549026ab51f9f26e3fb9ad28f6374.tar.gz tinderbox-cluster-22ad0178cca549026ab51f9f26e3fb9ad28f6374.tar.bz2 tinderbox-cluster-22ad0178cca549026ab51f9f26e3fb9ad28f6374.zip |
Add SetPackageDefault and SetEnvDefault to steps
Signed-off-by: Magnus Granberg <zorry@gentoo.org>
-rw-r--r-- | buildbot_gentoo_ci/config/buildfactorys.py | 6 | ||||
-rw-r--r-- | buildbot_gentoo_ci/db/model.py | 27 | ||||
-rw-r--r-- | buildbot_gentoo_ci/db/portages.py | 14 | ||||
-rw-r--r-- | buildbot_gentoo_ci/db/projects.py | 44 | ||||
-rw-r--r-- | buildbot_gentoo_ci/steps/portage.py | 97 |
5 files changed, 185 insertions, 3 deletions
diff --git a/buildbot_gentoo_ci/config/buildfactorys.py b/buildbot_gentoo_ci/config/buildfactorys.py index ac8bac1..acafed8 100644 --- a/buildbot_gentoo_ci/config/buildfactorys.py +++ b/buildbot_gentoo_ci/config/buildfactorys.py @@ -9,6 +9,7 @@ from buildbot_gentoo_ci.steps import category from buildbot_gentoo_ci.steps import package from buildbot_gentoo_ci.steps import version from buildbot_gentoo_ci.steps import builders +from buildbot_gentoo_ci.steps import portage def update_db_check(): f = util.BuildFactory() @@ -114,9 +115,10 @@ def run_build_request(): f.addStep(builders.UpdateRepos()) # setup make.conf f.addStep(builders.SetMakeConf()) - # setup package.* - #f.addStep(portages.SetPackageUse()) # setup env + f.addStep(portage.SetEnvDefault()) + # setup package.* + #f.addStep(portage.SetPackageDefault()) # setup files in /etc if needed # run --regen if needed on repo # update packages before any tests diff --git a/buildbot_gentoo_ci/db/model.py b/buildbot_gentoo_ci/db/model.py index 2153b79..b91f158 100644 --- a/buildbot_gentoo_ci/db/model.py +++ b/buildbot_gentoo_ci/db/model.py @@ -139,7 +139,6 @@ class Model(base.DBConnectorComponent): sa.Column('project_uuid', sa.String(36), sa.ForeignKey('projects.uuid', ondelete='CASCADE'), nullable=False), - # FIXME: directorys should be moved to own table sa.Column('directorys', sa.Enum('make.profile', 'repos.conf'), nullable=False), sa.Column('value', sa.String(255), nullable=False), ) @@ -162,6 +161,32 @@ class Model(base.DBConnectorComponent): sa.Column('value', sa.String(255), nullable=False), ) + # projects etc/portage/env settings + projects_portages_env = sautils.Table( + "projects_portages_env", metadata, + sa.Column('id', sa.Integer, primary_key=True), + sa.Column('project_uuid', sa.String(36), + sa.ForeignKey('projects.uuid', ondelete='CASCADE'), + nullable=False), + sa.Column('makeconf_id', sa.String(255), + sa.ForeignKey('portages_makeconf.id', ondelete='CASCADE'), + nullable=False), + sa.Column('name', sa.String(255), nullable=False), + sa.Column('value', sa.String(255), nullable=False), + ) + + # projects etc/portage/package.* settings + projects_portage_package = sautils.Table( + "projects_portage_package", metadata, + sa.Column('id', sa.Integer, primary_key=True), + sa.Column('project_uuid', sa.String(36), + sa.ForeignKey('projects.uuid', ondelete='CASCADE'), + nullable=False), + sa.Column('directorys', sa.Enum('use', 'accept_keywords', 'env'), nullable=False), + sa.Column('value1', sa.String(255), nullable=False), + sa.Column('value2', sa.String(255), nullable=True), + ) + projects_emerge_options = sautils.Table( "projects_emerge_options", metadata, sa.Column('id', sa.Integer, primary_key=True), diff --git a/buildbot_gentoo_ci/db/portages.py b/buildbot_gentoo_ci/db/portages.py index 428fb84..86321e3 100644 --- a/buildbot_gentoo_ci/db/portages.py +++ b/buildbot_gentoo_ci/db/portages.py @@ -36,6 +36,20 @@ class PortagesConnectorComponent(base.DBConnectorComponent): res = yield self.db.pool.do(thd) return res + @defer.inlineCallbacks + def getVariableById(self, id): + def thd(conn): + tbl = self.db.model.portages_makeconf + q = tbl.select() + q = q.where(tbl.c.id == id) + res = conn.execute(q) + row = res.fetchone() + if not row: + return None + return self._row2dict(conn, row) + res = yield self.db.pool.do(thd) + return res + def _row2dict(self, conn, row): return dict( id=row.id, diff --git a/buildbot_gentoo_ci/db/projects.py b/buildbot_gentoo_ci/db/projects.py index 37d401c..37ae2f1 100644 --- a/buildbot_gentoo_ci/db/projects.py +++ b/buildbot_gentoo_ci/db/projects.py @@ -131,6 +131,28 @@ class ProjectsConnectorComponent(base.DBConnectorComponent): return res @defer.inlineCallbacks + def getProjectPortageEnvByUuid(self, uuid): + def thd(conn): + tbl = self.db.model.projects_portages_env + q = tbl.select() + q = q.where(tbl.c.project_uuid == uuid) + return [self._row2dict_projects_portages_env(conn, row) + for row in conn.execute(q).fetchall()] + res = yield self.db.pool.do(thd) + return res + + @defer.inlineCallbacks + def getProjectPortagePackageByUuid(self, uuid): + def thd(conn): + tbl = self.db.model.projects_portages_package + q = tbl.select() + q = q.where(tbl.c.project_uuid == uuid) + return [self._row2dict_projects_portages_package(conn, row) + for row in conn.execute(q).fetchall()] + res = yield self.db.pool.do(thd) + return res + + @defer.inlineCallbacks def getProjectEmergeOptionsByUuid(self, uuid): def thd(conn): tbl = self.db.model.projects_emerge_options @@ -190,6 +212,28 @@ class ProjectsConnectorComponent(base.DBConnectorComponent): build_id=0 ) + def _row2dict_projects_portages_env(self, conn, row): + return dict( + id=row.id, + project_uuid=row.project_uuid, + makeconf_id=row.makeconf_id, + name=row.name, + value=row.value + ) + + def _row2dict_projects_portages_package(self, conn, row): + if row.value2 == '': + value2 = None + else: + value2 = row.value2 + return dict( + id=row.id, + project_uuid=row.project_uuid, + directorys=row.directorys, + value1=row.value1, + value2=value2 + ) + def _row2dict_projects_emerge_options(self, conn, row): return dict( id=row.id, diff --git a/buildbot_gentoo_ci/steps/portage.py b/buildbot_gentoo_ci/steps/portage.py new file mode 100644 index 0000000..52daf83 --- /dev/null +++ b/buildbot_gentoo_ci/steps/portage.py @@ -0,0 +1,97 @@ +# Copyright 2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +import os + +from twisted.internet import defer +from twisted.python import log + +from buildbot.process.buildstep import BuildStep +from buildbot.process.results import SUCCESS +from buildbot.process.results import FAILURE +from buildbot.plugins import steps + +class SetPackageDefault(BuildStep): + + name = 'SetPackageDefault' + description = 'Running' + descriptionDone = 'Ran' + 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'] + project_data = self.getProperty('project_data') + aftersteps_list = [] + packagedir_list = [] + packagedir_list.append('env') + #FIXME: + # get list what dir we need to make from db + # create the dirs + for packagedir in packagedir_list: + aftersteps_list.append(steps.MakeDirectory(dir='package.' + packagedir, + workdir='/etc/portage/')) + #FIXME: + # add the needed package.* settings from db + yield self.build.addStepsAfterCurrentStep(aftersteps_list) + return SUCCESS + +class SetEnvDefault(BuildStep): + + name = 'SetEnvDefault' + description = 'Running' + descriptionDone = 'Ran' + descriptionSuffix = None + haltOnFailure = True + flunkOnFailure = True + + def __init__(self, **kwargs): + super().__init__(**kwargs) + + def getPortageEnv(self, portage_env_data, portage_env_dict = {}): + for project_portage_env in portage_env_data: + if not project_portage_env['name'] in portage_env_dict: + portage_env_dict[project_portage_env['name']] = { + project_portage_env['makeconf_id'] : [] + } + if not project_portage_env['makeconf_id'] in portage_env_dict[project_portage_env['name']]: + portage_env_dict[project_portage_env['name']][project_portage_env['makeconf_id']] = [] + portage_env_dict[project_portage_env['name']][project_portage_env['makeconf_id']].append(project_portage_env['value']) + return portage_env_dict + + @defer.inlineCallbacks + def run(self): + self.gentooci = self.master.namedServices['services'].namedServices['gentooci'] + project_data = self.getProperty('project_data') + default_project_data = yield self.gentooci.db.projects.getProjectByName(self.gentooci.config.project['project']) + aftersteps_list = [] + separator1 = '\n' + separator2 = ' ' + # create the dir + aftersteps_list.append(steps.MakeDirectory(dir='env', + workdir='/etc/portage/')) + #FIXME: + # add env settings from the db + default_project_portage_env_data = yield self.gentooci.db.projects.getProjectPortageEnvByUuid(default_project_data['uuid']) + project_portage_env_data = yield self.gentooci.db.projects.getProjectPortageEnvByUuid(project_data['uuid']) + project_portage_env_dict = yield self.getPortageEnv(default_project_portage_env_data, portage_env_dict = {}) + project_portage_env_dict = yield self.getPortageEnv(project_portage_env_data, portage_env_dict = project_portage_env_dict) + print(project_portage_env_dict) + for k, v in project_portage_env_dict.items(): + env_strings = [] + for a, b in v.items(): + variable_data = yield self.gentooci.db.portages.getVariableById(a) + env_variable_string = variable_data['variable'] + '="' + separator2.join(b) + '"' + env_strings.append(env_variable_string) + yield self.build.addStepsAfterCurrentStep([ + steps.StringDownload(separator1.join(env_strings) + separator1, + workerdest=k + '.conf', + workdir='/etc/portage/env/') + ]) + yield self.build.addStepsAfterCurrentStep(aftersteps_list) + return SUCCESS |