commit: dfb70ebe084176e56f39b71545b9bd71196b1c93
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 25 19:51:56 2021 +0000
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Sat Sep 25 19:51:56 2021 +0000
URL:
https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=dfb70ebe
Add support for package.use and exclude package to build
Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
buildbot_gentoo_ci/config/buildfactorys.py | 10 +++------
buildbot_gentoo_ci/db/model.py | 10 ++++-----
buildbot_gentoo_ci/db/projects.py | 24 +++++++++++++++------
buildbot_gentoo_ci/steps/builders.py | 16 +++++++++++++-
buildbot_gentoo_ci/steps/portage.py | 34 ++++++++++++++++++------------
5 files changed, 62 insertions(+), 32 deletions(-)
diff --git a/buildbot_gentoo_ci/config/buildfactorys.py
b/buildbot_gentoo_ci/config/buildfactorys.py
index d2e195c..41c3171 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -152,13 +152,9 @@ def run_build_request():
f.addStep(builders.RunEmerge(step='match'))
# Add the needed steps for build
f.addStep(builders.RunBuild())
- # clean up the worker
- # look at the log to see if we need to do stuff
- # run pre-depclean and depclean if set
- f.addStep(builders.RunEmerge(step='pre-depclean'))
- # run preserved-libs and depclean
- f.addStep(builders.RunEmerge(step='preserved-libs'))
- f.addStep(builders.RunEmerge(step='depclean'))
+ # run eclean pkg and dist
+ #f.addStep(builders.RunEclean(step='pkg')
+ #f.addStep(builders.RunEclean(step='dist')
return f
def parse_build_log():
diff --git a/buildbot_gentoo_ci/db/model.py b/buildbot_gentoo_ci/db/model.py
index e2cbc8d..12d5ee9 100644
--- a/buildbot_gentoo_ci/db/model.py
+++ b/buildbot_gentoo_ci/db/model.py
@@ -178,15 +178,15 @@ class Model(base.DBConnectorComponent):
)
# projects etc/portage/package.* settings
- projects_portage_package = sautils.Table(
- "projects_portage_package", metadata,
+ projects_portages_package = sautils.Table(
+ "projects_portages_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),
+ sa.Column('directory', sa.Enum('use', 'accept_keywords', 'env',
'exclude'), nullable=False),
+ sa.Column('package', sa.String(255), nullable=False),
+ sa.Column('value', sa.String(255), nullable=True),
)
projects_emerge_options = sautils.Table(
diff --git a/buildbot_gentoo_ci/db/projects.py
b/buildbot_gentoo_ci/db/projects.py
index 408450e..48d4288 100644
--- a/buildbot_gentoo_ci/db/projects.py
+++ b/buildbot_gentoo_ci/db/projects.py
@@ -152,6 +152,18 @@ class
ProjectsConnectorComponent(base.DBConnectorComponent):
res = yield self.db.pool.do(thd)
return res
+ @defer.inlineCallbacks
+ def getProjectPortagePackageByUuidAndExclude(self, uuid):
+ def thd(conn):
+ tbl = self.db.model.projects_portages_package
+ q = tbl.select()
+ q = q.where(tbl.c.project_uuid == uuid)
+ q = q.where(tbl.c.directory == 'exclude')
+ 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):
@@ -263,16 +275,16 @@ class
ProjectsConnectorComponent(base.DBConnectorComponent):
)
def _row2dict_projects_portages_package(self, conn, row):
- if row.value2 == '':
- value2 = None
+ if row.value == '':
+ value = None
else:
- value2 = row.value2
+ value = row.value
return dict(
id=row.id,
project_uuid=row.project_uuid,
- directorys=row.directorys,
- value1=row.value1,
- value2=value2
+ directory=row.directory,
+ package=row.package,
+ value=value
)
def _row2dict_projects_emerge_options(self, conn, row):
diff --git a/buildbot_gentoo_ci/steps/builders.py
b/buildbot_gentoo_ci/steps/builders.py
index 7732f39..4f2b1b6 100644
--- a/buildbot_gentoo_ci/steps/builders.py
+++ b/buildbot_gentoo_ci/steps/builders.py
@@ -13,6 +13,7 @@ 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.process.results import SKIPPED
from buildbot.plugins import steps
def PersOutputOfEmerge(rc, stdout, stderr):
@@ -451,9 +452,19 @@ class RunEmerge(BuildStep):
aftersteps_list.append(CheckDepcleanLogs('depclean'))
if self.step == 'match':
+ packages_excludes = yield
self.gentooci.db.projects.getProjectPortagePackageByUuidAndExclude(self.getProperty('project_data')['uuid'])
cpv = self.getProperty("cpv")
c = yield catpkgsplit(cpv)[0]
p = yield catpkgsplit(cpv)[1]
+ # Check if package is on the exclude list
+ if packages_excludes != []:
+ for package_exclude in packages_excludes:
+ if '/' not in package_exclude:
+ if package_exclude == p:
+ return SKIPPED
+ else:
+ if package_exclude == c + '/' + p:
+ return SKIPPED
shell_commad_list.append('-pO')
# don't use bin for match
shell_commad_list.append('--usepkg=n')
@@ -900,11 +911,14 @@ class RunBuild(BuildStep):
if not self.getProperty('cpv_build'):
#FIXME:
# trigger pars_build_log if we have any logs to check
- return SUCCESS
+ return SKIPPED
aftersteps_list = []
aftersteps_list.append(RunEmergeInfo())
aftersteps_list.append(RunEmerge(step='pre-build'))
aftersteps_list.append(RunEmerge(step='build'))
+ aftersteps_list.append(RunEmerge(step='pre-depclean'))
+ aftersteps_list.append(RunEmerge(step='preserved-libs'))
+ aftersteps_list.append(RunEmerge(step='depclean'))
self.setProperty('depclean', False, 'depclean')
self.setProperty('preserved_libs', False, 'preserved-libs')
yield self.build.addStepsAfterCurrentStep(aftersteps_list)
diff --git a/buildbot_gentoo_ci/steps/portage.py
b/buildbot_gentoo_ci/steps/portage.py
index 03552b6..94323ba 100644
--- a/buildbot_gentoo_ci/steps/portage.py
+++ b/buildbot_gentoo_ci/steps/portage.py
@@ -252,20 +252,28 @@ class SetPackageDefault(BuildStep):
@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')
- packagedir_list.append('use')
- #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:
+ separator1 = '\n'
+ separator2 = ' '
+ self.aftersteps_list = []
+ #FIXME: accept_keywords, env
# add the needed package.* settings from db
- yield self.build.addStepsAfterCurrentStep(aftersteps_list)
+ package_conf_use_list = []
+ package_settings = yield
self.gentooci.db.projects.getProjectPortagePackageByUuid(self.getProperty('project_data')['uuid'])
+ for package_setting in package_settings:
+ if package_setting['directory'] == 'use':
+
package_conf_use_list.append(separator2.join(package_setting['package'],package_setting['value']))
+ if package_conf_use_list != []:
+ package_conf_use_string = separator1.join(package_conf_use_list)
+ self.aftersteps_list.append(
+ steps.StringDownload(package_conf_use_string +
separator1,
+ workerdest='default.conf',
+ workdir='/etc/portage/package.use/'
+ )
+ )
+ # create the dir
+ aftersteps_list.append(steps.MakeDirectory(dir='package.use',
+ workdir='/etc/portage/'))
+ yield self.build.addStepsAfterCurrentStep(self.aftersteps_list)
return SUCCESS
class SetEnvDefault(BuildStep):