commit:     a4a5adaa76b48ae04c142f0c1bf602c210892731
Author:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Mon Jan 11 17:45:46 2021 +0000
Commit:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Mon Jan 11 17:45:46 2021 +0000
URL:        
https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=a4a5adaa

Add CheckPGentooCiProject on BuildFactory update_db_cp

Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>

 buildbot_gentoo_ci/config/buildfactorys.py |  5 +-
 buildbot_gentoo_ci/db/connector.py         |  2 +
 buildbot_gentoo_ci/db/packages.py          | 80 ++++++++++++++++++++++++++++++
 buildbot_gentoo_ci/steps/category.py       | 10 ++--
 buildbot_gentoo_ci/steps/package.py        | 65 ++++++++++++++++++++++++
 buildbot_gentoo_ci/steps/update_db.py      | 30 +++++------
 6 files changed, 170 insertions(+), 22 deletions(-)

diff --git a/buildbot_gentoo_ci/config/buildfactorys.py 
b/buildbot_gentoo_ci/config/buildfactorys.py
index 4a0ffcd..4038bb1 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -6,7 +6,7 @@ from buildbot.plugins import util
 
 from buildbot_gentoo_ci.steps import update_db
 from buildbot_gentoo_ci.steps import category
-#from buildbot_gentoo_ci.steps import package
+from buildbot_gentoo_ci.steps import package
 
 def update_db_check():
     f = util.BuildFactory()
@@ -44,7 +44,8 @@ def update_db_cp():
     # else
     #   add package to db step
     #   return package_data
-    #f.addStep(package.CheckPGentooCiProject())
+    f.addStep(package.CheckPGentooCiProject())
     # Make a for loop and trigger new builders with v from cpv
     #   return package_data, cpv, repository, project_data, config_root
+    #f.addStep(package.TriggerVGentooCiProject())
     return f

diff --git a/buildbot_gentoo_ci/db/connector.py 
b/buildbot_gentoo_ci/db/connector.py
index c10fc49..0121d11 100644
--- a/buildbot_gentoo_ci/db/connector.py
+++ b/buildbot_gentoo_ci/db/connector.py
@@ -33,6 +33,7 @@ from buildbot_gentoo_ci.db import model
 from buildbot_gentoo_ci.db import projects
 from buildbot_gentoo_ci.db import repositorys
 from buildbot_gentoo_ci.db import categorys
+from buildbot_gentoo_ci.db import packages
 
 upgrade_message = textwrap.dedent("""\
 
@@ -75,6 +76,7 @@ class DBConnector(service.ReconfigurableServiceMixin,
         self.projects = projects.ProjectsConnectorComponent(self)
         self.repositorys = repositorys.RepositorysConnectorComponent(self)
         self.categorys = categorys.CategorysConnectorComponent(self)
+        self.packages = packages.PackagesConnectorComponent(self)
 
     @defer.inlineCallbacks
     def setup(self, config, check_version=True, verbose=True):

diff --git a/buildbot_gentoo_ci/db/packages.py 
b/buildbot_gentoo_ci/db/packages.py
new file mode 100644
index 0000000..13cc267
--- /dev/null
+++ b/buildbot_gentoo_ci/db/packages.py
@@ -0,0 +1,80 @@
+# This file has parts from Buildbot and is modifyed by Gentoo Authors. 
+# Buildbot is free software: you can redistribute it and/or modify it 
+# under the terms of the GNU General Public License as published by the 
+# Free Software Foundation, version 2.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 51
+# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright Buildbot Team Members
+# Origins: buildbot.db.*
+# Modifyed by Gentoo Authors.
+# Copyright 2021 Gentoo Authors
+
+import uuid
+import sqlalchemy as sa
+
+from twisted.internet import defer
+
+from buildbot.db import base
+
+class PackagesConnectorComponent(base.DBConnectorComponent):
+
+    @defer.inlineCallbacks
+    def getPackageByName(self, name):
+        def thd(conn):
+            tbl = self.db.model.packages
+            q = tbl.select()
+            q = q.where(tbl.c.name == name)
+            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
+
+    @defer.inlineCallbacks
+    def getPackageByUuid(self, uuid):
+        def thd(conn):
+            tbl = self.db.model.packages
+            q = tbl.select()
+            q = q.where(tbl.c.uuid == uuid)
+            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
+
+    @defer.inlineCallbacks
+    def addPackage(self, name, repository_uuid, category_uuid):
+        def thd(conn, no_recurse=False):
+            try:
+                tbl = self.db.model.packages
+                q = tbl.insert()
+                r = conn.execute(q, dict(name=name,
+                                         repository_uuid=repository_uuid,
+                                         category_uuid=category_uuid))
+            except (sa.exc.IntegrityError, sa.exc.ProgrammingError):
+                uuid = None
+            else:
+                uuid = r.inserted_primary_key[0]
+            return uuid
+        res = yield self.db.pool.do(thd)
+        return res
+
+    def _row2dict(self, conn, row):
+        return dict(
+            uuid=row.uuid,
+            name=row.name,
+            repository_uuid=row.repository_uuid,
+            category_uuid=row.category_uuid
+            )

diff --git a/buildbot_gentoo_ci/steps/category.py 
b/buildbot_gentoo_ci/steps/category.py
index e641a97..1aca99a 100644
--- a/buildbot_gentoo_ci/steps/category.py
+++ b/buildbot_gentoo_ci/steps/category.py
@@ -21,15 +21,14 @@ class AddCategory(BuildStep):
     @defer.inlineCallbacks
     def run(self):
         self.gentooci = 
self.master.namedServices['services'].namedServices['gentooci']
-        self.category = self.getProperty("category")
         self.category_data = {}
-        self.category_data['name'] = self.category
-        self.category_data['uuid'] = yield 
self.gentooci.db.categorys.addCategory(self.category)
+        self.category_data['name'] = self.getProperty("category")
+        self.category_data['uuid'] = yield 
self.gentooci.db.categorys.addCategory(self.category_data['name'])
         print(self.category_data)
         self.setProperty("category_data", self.category_data, 'category_data')
         self.setProperty("config_root", self.getProperty("config_root"), 
'config_root')
         self.setProperty("project_data", self.getProperty("project_data"), 
'project_data')
-        self.setProperty("repository", self.getProperty("repository"), 
'repository')
+        self.setProperty("repository_data", 
self.getProperty("repository_data"), 'repository_data')
         self.setProperty("cpv", self.getProperty("cpv"), 'cpv')
         return SUCCESS
 
@@ -42,10 +41,11 @@ class CheckCGentooCiProject(BuildStep):
         self.gentooci = 
self.master.namedServices['services'].namedServices['gentooci']
         self.category = yield self.getProperty("cpv").split('/')[0]
         print(self.category)
+        print(self.getProperty("repository"))
         self.category_data = yield 
self.gentooci.db.categorys.getCategoryByName(self.category)
         self.setProperty("config_root", self.getProperty("config_root"), 
'config_root')
         self.setProperty("project_data", self.getProperty("project_data"), 
'project_data')
-        self.setProperty("repository", self.getProperty("repository"), 
'repository')
+        self.setProperty("repository_data", 
self.getProperty("repository_data"), 'repository_data')
         self.setProperty("cpv", self.getProperty("cpv"), 'cpv')
         print(self.category_data)
         if self.category_data is None:

diff --git a/buildbot_gentoo_ci/steps/package.py 
b/buildbot_gentoo_ci/steps/package.py
new file mode 100644
index 0000000..916bb73
--- /dev/null
+++ b/buildbot_gentoo_ci/steps/package.py
@@ -0,0 +1,65 @@
+# Copyright 2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+import re
+import os
+
+from portage.xml.metadata import MetaDataXML
+from portage.checksum import perform_checksum
+from portage.versions import catpkgsplit
+
+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
+
+class AddPackage(BuildStep):
+    def __init__(self, **kwargs):
+        super().__init__(**kwargs)
+
+    @defer.inlineCallbacks
+    def run(self):
+        self.gentooci = 
self.master.namedServices['services'].namedServices['gentooci']
+        self.package_data = {}
+        self.package_data['name'] = self.getProperty("package")
+        self.package_data['repository_uuid'] = 
self.getProperty("repository_data")['uuid']
+        self.package_data['category_uuid'] = 
self.getProperty("category_data")['uuid']
+        self.package_data['uuid'] = yield self.gentooci.db.packages.addPackage(
+                                            self.package_data['name'],
+                                            
self.package_data['repository_uuid'],
+                                            self.package_data['category_uuid']
+                                            )
+        print(self.package_data)
+        self.setProperty("package_data", self.package_data, 'package_data')
+        self.setProperty("config_root", self.getProperty("config_root"), 
'config_root')
+        self.setProperty("project_data", self.getProperty("project_data"), 
'project_data')
+        self.setProperty("repository_data", 
self.getProperty("repository_data"), 'repository_data')
+        self.setProperty("cpv", self.getProperty("cpv"), 'cpv')
+        return SUCCESS
+
+class CheckPGentooCiProject(BuildStep):
+    def __init__(self, **kwargs):
+        super().__init__(**kwargs)
+
+    @defer.inlineCallbacks
+    def run(self):
+        self.gentooci = 
self.master.namedServices['services'].namedServices['gentooci']
+        self.package = yield catpkgsplit(self.getProperty("cpv"))[1]
+        print(self.package)
+        self.package_data = yield 
self.gentooci.db.packages.getPackageByName(self.package)
+        self.setProperty("config_root", self.getProperty("config_root"), 
'config_root')
+        self.setProperty("project_data", self.getProperty("project_data"), 
'project_data')
+        self.setProperty("repository_data", 
self.getProperty("repository_data"), 'repository_data')
+        self.setProperty("cpv", self.getProperty("cpv"), 'cpv')
+        print(self.package_data)
+        if self.package_data is None:
+            self.setProperty("category_data", 
self.getProperty("category_data"), 'category_data')
+            self.setProperty("package", self.package, 'package')
+            yield self.build.addStepsAfterCurrentStep([AddPackage()])
+            #yield self.build.addStepsAfterLastStep([AddMetadataPackage()])
+            return SUCCESS
+        self.setProperty("package_data", self.package_data, 'package_data')
+        #yield self.build.addStepsAfterLastStep([CheckPathPackage()])
+        return SUCCESS

diff --git a/buildbot_gentoo_ci/steps/update_db.py 
b/buildbot_gentoo_ci/steps/update_db.py
index df28f35..d00407c 100644
--- a/buildbot_gentoo_ci/steps/update_db.py
+++ b/buildbot_gentoo_ci/steps/update_db.py
@@ -1,5 +1,6 @@
 # Copyright 2021 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
+
 import os
 
 from portage import config as portage_config
@@ -36,16 +37,19 @@ class GetDataGentooCiProject(BuildStep):
         if self.profile_repository_data is None:
             log.err('No data for repository in the database')
             return FAILURE
+        #self.repository = self.getProperty("repository")
+        self.repository = 'gentoo'
+        self.repository_data = yield 
self.gentooci.db.repositorys.getRepositoryByName(self.repository)
         print(self.project_data)
         print(self.project_repository_data)
         print(self.profile_repository_data)
         print(self.getProperty("cpv_changes"))
-        print(self.getProperty("repository"))
+        print(self.repository_data)
         self.setProperty("project_data", self.project_data, 'project_data')
         self.setProperty("project_repository_data", 
self.project_repository_data, 'project_repository_data')
         self.setProperty("profile_repository_data", 
self.profile_repository_data, 'profile_repository_data')
         self.setProperty("cpv_changes", self.getProperty("cpv_changes"), 
'cpv_changes')
-        self.setProperty("repository", self.getProperty("repository"), 
'repository')
+        self.setProperty("repository_data", self.repository_data, 
'repository_data')
         return SUCCESS
 
 class CheckPathGentooCiProject(BuildStep):
@@ -59,18 +63,17 @@ class CheckPathGentooCiProject(BuildStep):
         self.repository_basedir = 
self.gentooci.config.project['repository_basedir']
         self.profile_repository_data = 
self.getProperty("profile_repository_data")
         self.project_repository_data = 
self.getProperty("project_repository_data")
-        #self.repository = self.getProperty("repository")
-        self.repository = 'gentoo'
+        self.repository_data = self.getProperty("repository_data")
         self.project_data = self.getProperty("project_data")
         self.project_path = yield os.path.join(self.repository_basedir, 
self.project_repository_data['name'] + '.git')
-        self.repository_path = yield os.path.join(self.repository_basedir, 
self.repository + '.git')
+        self.repository_path = yield os.path.join(self.repository_basedir, 
self.repository_data['name'] + '.git')
         self.portage_path = yield os.path.join(self.project_path, 
self.project_data['name'], 'etc/portage')
         success = True
         for x in [
                   os.path.join(self.repository_basedir, 
self.profile_repository_data['name'] + '.git'),
                   self.project_path,
                   self.portage_path,
-                  os.path.join(self.portage_path, 'make.profile')
+                  os.path.join(self.portage_path, 'make.profile'),
                   self.repository_path
                   # check the path of make.profile is project_data['profile']
                  ]:
@@ -84,7 +87,7 @@ class CheckPathGentooCiProject(BuildStep):
         self.setProperty("project_data", self.project_data, 'project_data')
         self.setProperty("project_repository_data", 
self.project_repository_data, 'project_repository_data')
         self.setProperty("cpv_changes", self.getProperty("cpv_changes"), 
'cpv_changes')
-        self.setProperty("repository", self.repository, 'repository')
+        self.setProperty("repository_data", self.repository_data, 
'repository_data')
         return SUCCESS
 
 class CheckProjectGentooCiProject(BuildStep):
@@ -110,7 +113,7 @@ class CheckProjectGentooCiProject(BuildStep):
         self.setProperty("config_root", self.config_root, 'config_root')
         self.setProperty("project_data", self.project_data, 'project_data')
         self.setProperty("cpv_changes", self.getProperty("cpv_changes"), 
'cpv_changes')
-        self.setProperty("repository", self.getProperty("repository"), 
'repository')
+        self.setProperty("repository_data", 
self.getProperty("repository_data"), 'repository')
         return SUCCESS
 
 class CheckCPVGentooCiProject(BuildStep):
@@ -119,15 +122,12 @@ class CheckCPVGentooCiProject(BuildStep):
 
     @defer.inlineCallbacks
     def run(self):
-        self.config_root = self.getProperty("config_root")
         #self.cpv_changes = self.getProperty("cpv_changes")
         self.cpv_changes = []
-        self.project_data = self.getProperty("project_data")
         self.cpv_changes.append('dev-lang/python-3.8')
         self.cpv_changes.append('dev-python/prust-3.9')
         print(self.cpv_changes)
-        self.repository = self.getProperty("repository")
-        print(self.repository)
+        print(self.getProperty("repository_data"))
         # check if cpv_change is a string or a list
         if isinstance(self.cpv_changes, list):
             self.cpv_list = self.cpv_changes
@@ -150,9 +150,9 @@ class CheckCPVGentooCiProject(BuildStep):
                         updateSourceStamp=False,
                         set_properties={
                             'cpv' : cpv,
-                            'config_root' : self.config_root,
-                            'project_data' : self.project_data,
-                            'repository' : self.repository
+                            'config_root' : self.getProperty("config_root"),
+                            'project_data' : self.getProperty("project_data"),
+                            'repository_data' : 
self.getProperty("repository_data"),
                         }
                     )
                 )

Reply via email to