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"))

Reply via email to