commit: 5cff75736ed859645d9273888b8c8a4a3f66c07f
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 24 23:17:41 2021 +0000
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Sun Jan 24 23:17:41 2021 +0000
URL:
https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=5cff7573
Add SetMakeProfile
Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
buildbot_gentoo_ci/config/builders.py | 2 +-
buildbot_gentoo_ci/config/buildfactorys.py | 18 ++++++++--
buildbot_gentoo_ci/config/workers.py | 3 +-
buildbot_gentoo_ci/db/model.py | 11 ++++++
buildbot_gentoo_ci/db/projects.py | 20 +++++++++++
buildbot_gentoo_ci/steps/builders.py | 55 ++++++++++++++++++++++++++++--
buildbot_gentoo_ci/steps/update_db.py | 2 +-
7 files changed, 103 insertions(+), 8 deletions(-)
diff --git a/buildbot_gentoo_ci/config/builders.py
b/buildbot_gentoo_ci/config/builders.py
index 69dd840..cba9fcc 100644
--- a/buildbot_gentoo_ci/config/builders.py
+++ b/buildbot_gentoo_ci/config/builders.py
@@ -42,7 +42,7 @@ def gentoo_builders(b=[]):
# Use multiplay workers
b.append(util.BuilderConfig(
name='run_build_request',
- workername='updatedb_1',
+ workername='bot-test',
factory=buildfactorys.run_build_request()
)
)
diff --git a/buildbot_gentoo_ci/config/buildfactorys.py
b/buildbot_gentoo_ci/config/buildfactorys.py
index e0a6634..a6bafb5 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -88,6 +88,20 @@ def build_request_check():
def run_build_request():
f = util.BuildFactory()
# FIXME: 5
- # Check if all is setup on the worker
- f.addStep(builders.SetupBuildWorker())
+ # update repo for the profile
+ f.addStep(builders.UpdateProfileRepo())
+ # Clean and add new /etc/portage
+ f.addStep(buildbot_steps.RemoveDirectory(dir="portage",
+ workdir='/etc/'))
+ f.addStep(buildbot_steps.MakeDirectory(dir="portage",
+ workdir='/etc/'))
+ # setup the profile
+ f.addStep(buildbot_steps.MakeDirectory(dir="make.profile",
+ workdir='/etc/portage/'))
+ f.addStep(builders.SetMakeProfile())
+ # setup repo.conf dir
+ #f.addStep(buildbot_steps.MakeDirectory(dir="repo.conf",
+ workdir='/etc/portage/'))
+ # check if we have all repository's in repos.conf listed in
project_repository's
+ # update all repos listed in project_repository's
return f
diff --git a/buildbot_gentoo_ci/config/workers.py
b/buildbot_gentoo_ci/config/workers.py
index 3005129..a566b79 100644
--- a/buildbot_gentoo_ci/config/workers.py
+++ b/buildbot_gentoo_ci/config/workers.py
@@ -1,4 +1,4 @@
-# Copyright 2020 Gentoo Authors
+# Copyright 2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
from buildbot.plugins import worker
@@ -6,4 +6,5 @@ from buildbot.plugins import worker
def gentoo_workers(w=[]):
# FIXME: Get workers from db
w.append(worker.LocalWorker('updatedb_1'))
+ w.append(worker.Worker('bot-test', 'test1234'))
return w
diff --git a/buildbot_gentoo_ci/db/model.py b/buildbot_gentoo_ci/db/model.py
index b051b23..0defb0c 100644
--- a/buildbot_gentoo_ci/db/model.py
+++ b/buildbot_gentoo_ci/db/model.py
@@ -131,6 +131,17 @@ class Model(base.DBConnectorComponent):
sa.Column('pkgcheck', sa.Boolean, default=False),
)
+ # projects etc/portage settings
+ projects_portage = sautils.Table(
+ "projects_portage", 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('make.profile'), nullable=False),
+ sa.Column('value', sa.String(255), nullable=False),
+ )
+
keywords = sautils.Table(
"keywords", metadata,
# unique uuid per keyword
diff --git a/buildbot_gentoo_ci/db/projects.py
b/buildbot_gentoo_ci/db/projects.py
index 065c9a0..5c3406a 100644
--- a/buildbot_gentoo_ci/db/projects.py
+++ b/buildbot_gentoo_ci/db/projects.py
@@ -79,6 +79,18 @@ class ProjectsConnectorComponent(base.DBConnectorComponent):
res = yield self.db.pool.do(thd)
return res
+ @defer.inlineCallbacks
+ def getProjectPortageByUuidAndDirectory(self, uuid, directory):
+ def thd(conn):
+ tbl = self.db.model.projects_portage
+ q = tbl.select()
+ q = q.where(tbl.c.project_uuid == uuid)
+ q = q.where(tbl.c.directorys == directory)
+ return [self._row2dict_projects_portage(conn, row)
+ for row in conn.execute(q).fetchall()]
+ res = yield self.db.pool.do(thd)
+ return res
+
def _row2dict(self, conn, row):
return dict(
uuid=row.uuid,
@@ -102,3 +114,11 @@ class
ProjectsConnectorComponent(base.DBConnectorComponent):
auto=row.auto,
pkgcheck=row.pkgcheck
)
+
+ def _row2dict_projects_portage(self, conn, row):
+ return dict(
+ id=row.id,
+ project_uuid=row.project_uuid,
+ directorys=row.directorys,
+ value=row.value
+ )
diff --git a/buildbot_gentoo_ci/steps/builders.py
b/buildbot_gentoo_ci/steps/builders.py
index 29389a1..1c8cbb0 100644
--- a/buildbot_gentoo_ci/steps/builders.py
+++ b/buildbot_gentoo_ci/steps/builders.py
@@ -1,6 +1,8 @@
# 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
@@ -32,7 +34,6 @@ class TriggerRunBuildRequest(BuildStep):
'cpv' : self.getProperty("cpv"),
'version_data' : self.getProperty("version_data"),
'projectrepository_data' :
self.getProperty('projectrepository_data'),
- 'repository_data' :
self.getProperty("repository_data"),
'use_data' : self.getProperty("use_data"),
'fullcheck' : self.getProperty("fullcheck"),
}
@@ -79,9 +80,9 @@ class GetProjectRepositoryData(BuildStep):
yield
self.build.addStepsAfterCurrentStep([TriggerRunBuildRequest()])
return SUCCESS
-class SetupBuildWorker(BuildStep):
+class UpdateProfileRepo(BuildStep):
- name = 'SetupBuildWorker'
+ name = 'UpdateProfileRepo'
description = 'Running'
descriptionDone = 'Ran'
descriptionSuffix = None
@@ -89,10 +90,58 @@ class SetupBuildWorker(BuildStep):
flunkOnFailure = True
def __init__(self, **kwargs):
+ # set this in config
+ self.portage_repos_path = '/var/db/repos/'
super().__init__(**kwargs)
@defer.inlineCallbacks
def run(self):
self.gentooci =
self.master.namedServices['services'].namedServices['gentooci']
print('build this %s' % self.getProperty("cpv"))
+ self.setProperty('portage_repos_path', self.portage_repos_path,
'portage_repos_path')
+ projectrepository_data = self.getProperty('projectrepository_data')
+ print(projectrepository_data)
+ repository_data = yield
self.gentooci.db.repositorys.getRepositoryByUuid(projectrepository_data['repository_uuid'])
+ project_data = yield
self.gentooci.db.projects.getProjectByUuid(projectrepository_data['project_uuid'])
+ self.setProperty('project_data', project_data, 'project_data')
+ self.profile_repository_data = yield
self.gentooci.db.repositorys.getRepositoryByUuid(project_data['profile_repository_uuid'])
+ profile_repository_path = yield os.path.join(self.portage_repos_path,
self.profile_repository_data['name'])
+ yield self.build.addStepsAfterCurrentStep([
+ steps.Git(repourl=self.profile_repository_data['mirror_url'],
+ mode='incremental',
+ submodules=True,
+ workdir=os.path.join(profile_repository_path, ''))
+ ])
+ return SUCCESS
+
+class SetMakeProfile(BuildStep):
+
+ name = 'SetMakeProfile'
+ 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']
+ portage_repos_path = self.getProperty('portage_repos_path')
+ project_data = self.getProperty('project_data')
+ profile_repository_data = yield
self.gentooci.db.repositorys.getRepositoryByUuid(project_data['profile_repository_uuid'])
+ makeprofiles_paths = []
+ makeprofiles_data = yield
self.gentooci.db.projects.getProjectPortageByUuidAndDirectory(project_data['uuid'],
'make.profile')
+ for makeprofile in makeprofiles_data:
+ makeprofile_path = yield os.path.join(portage_repos_path,
profile_repository_data['name'], 'profiles', makeprofile['value'], '')
+ makeprofiles_paths.append('../../..' + makeprofile_path)
+ separator = '\n'
+ makeprofile_path_string = separator.join(makeprofiles_paths)
+ yield self.build.addStepsAfterCurrentStep([
+ steps.StringDownload(makeprofile_path_string + separator,
+ workerdest="make.profile/parent",
+ workdir='/etc/portage/')
+ ])
return SUCCESS
diff --git a/buildbot_gentoo_ci/steps/update_db.py
b/buildbot_gentoo_ci/steps/update_db.py
index 3817d44..1ffbbff 100644
--- a/buildbot_gentoo_ci/steps/update_db.py
+++ b/buildbot_gentoo_ci/steps/update_db.py
@@ -124,7 +124,7 @@ class CheckCPVGentooCiProject(BuildStep):
def run(self):
#self.cpv_changes = self.getProperty("cpv_changes")
self.cpv_changes = []
- self.cpv_changes.append('dev-lang/python-3.9.1')
+ self.cpv_changes.append('dev-lang/python-3.9.1-r1')
self.cpv_changes.append('dev-python/scrypt-0.8.16')
print(self.cpv_changes)
print(self.getProperty("repository_data"))