public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Magnus Granberg" <zorry@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/tinderbox-cluster:master commit in: buildbot_gentoo_ci/steps/, buildbot_gentoo_ci/config/, buildbot_gentoo_ci/db/
Date: Sun, 17 Jan 2021 09:25:03 +0000 (UTC)	[thread overview]
Message-ID: <1610875507.81da08ad4476408915e0e082a33f5a1c2ebe159e.zorry@gentoo> (raw)

commit:     81da08ad4476408915e0e082a33f5a1c2ebe159e
Author:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 17 09:25:07 2021 +0000
Commit:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Sun Jan 17 09:25:07 2021 +0000
URL:        https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=81da08ad

Add BuildFactory update_db_v

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

 buildbot_gentoo_ci/config/builders.py      |  16 ++
 buildbot_gentoo_ci/config/buildfactorys.py |  36 +++-
 buildbot_gentoo_ci/config/schedulers.py    |   6 +
 buildbot_gentoo_ci/db/connector.py         |   4 +
 buildbot_gentoo_ci/db/keywords.py          |  76 +++++++++
 buildbot_gentoo_ci/db/model.py             |  28 +--
 buildbot_gentoo_ci/db/versions.py          | 112 ++++++++++++
 buildbot_gentoo_ci/steps/package.py        |  34 +++-
 buildbot_gentoo_ci/steps/update_db.py      |   6 +-
 buildbot_gentoo_ci/steps/version.py        | 264 +++++++++++++++++++++++++++++
 10 files changed, 562 insertions(+), 20 deletions(-)

diff --git a/buildbot_gentoo_ci/config/builders.py b/buildbot_gentoo_ci/config/builders.py
index c069841..9fef46a 100644
--- a/buildbot_gentoo_ci/config/builders.py
+++ b/buildbot_gentoo_ci/config/builders.py
@@ -22,4 +22,20 @@ def gentoo_builders(b=[]):
         factory=buildfactorys.update_db_cp()
         )
     )
+    # FIXME: get workers from db
+    # Use multiplay workers
+    b.append(util.BuilderConfig(
+        name='update_v_data',
+        workername='updatedb_1',
+        factory=buildfactorys.update_db_v()
+        )
+    )
+    # FIXME: get workers from db
+    # Use multiplay workers
+    b.append(util.BuilderConfig(
+        name='build_request_data',
+        workername='updatedb_1',
+        factory=buildfactorys.build_request_check()
+        )
+    )
     return b

diff --git a/buildbot_gentoo_ci/config/buildfactorys.py b/buildbot_gentoo_ci/config/buildfactorys.py
index 4038bb1..ba96e5a 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -7,6 +7,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 version
 
 def update_db_check():
     f = util.BuildFactory()
@@ -45,7 +46,36 @@ def update_db_cp():
     #   add package to db step
     #   return package_data
     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())
+    # Trigger new builders with v from cpv
+    #   return package_data, cpv, repository_data, project_data, config_root
+    f.addStep(package.TriggerCheckVGentooCiProject())
+    return f
+
+def update_db_v():
+    f = util.BuildFactory()
+    # FIXME: 3
+    # if version in db
+    #   return version_data
+    f.addStep(version.GetVData())
+    #   check path and hash
+    f.addStep(version.CheckPathHash())
+    #   if not path
+    #       if not hash
+    #           add deleted stage att end
+    #           add version to db stage
+    #           add version metadata to db
+    #           add version to build check
+    #   else
+    #       add deleted stage att end
+    #       add version to build check stage att end
+    # else
+    #   add version to db
+    #   add version metadata to db
+    #   add version to build check
+    f.addStep(version.CheckV())
+    return f
+
+def build_request_check():
+    f = util.BuildFactory()
+    # FIXME: 4
     return f

diff --git a/buildbot_gentoo_ci/config/schedulers.py b/buildbot_gentoo_ci/config/schedulers.py
index 88d0e49..687b52f 100644
--- a/buildbot_gentoo_ci/config/schedulers.py
+++ b/buildbot_gentoo_ci/config/schedulers.py
@@ -52,8 +52,14 @@ def gentoo_schedulers():
     ])
     update_cpv_data = schedulers.Triggerable(name="update_cpv_data",
                                builderNames=["update_cpv_data"])
+    update_v_data = schedulers.Triggerable(name="update_v_data",
+                               builderNames=["update_v_data"])
+    build_request_data = schedulers.Triggerable(name="build_request_data",
+                               builderNames=["build_request_data"])
     s = []
     s.append(test_updatedb)
     #s.append(scheduler_update_db)
     s.append(update_cpv_data)
+    s.append(update_v_data)
+    s.append(build_request_data)
     return s

diff --git a/buildbot_gentoo_ci/db/connector.py b/buildbot_gentoo_ci/db/connector.py
index 0121d11..35febe6 100644
--- a/buildbot_gentoo_ci/db/connector.py
+++ b/buildbot_gentoo_ci/db/connector.py
@@ -34,6 +34,8 @@ 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
+from buildbot_gentoo_ci.db import versions
+from buildbot_gentoo_ci.db import keywords
 
 upgrade_message = textwrap.dedent("""\
 
@@ -77,6 +79,8 @@ class DBConnector(service.ReconfigurableServiceMixin,
         self.repositorys = repositorys.RepositorysConnectorComponent(self)
         self.categorys = categorys.CategorysConnectorComponent(self)
         self.packages = packages.PackagesConnectorComponent(self)
+        self.versions = versions.VersionsConnectorComponent(self)
+        self.keywords = keywords.KeywordsConnectorComponent(self)
 
     @defer.inlineCallbacks
     def setup(self, config, check_version=True, verbose=True):

diff --git a/buildbot_gentoo_ci/db/keywords.py b/buildbot_gentoo_ci/db/keywords.py
new file mode 100644
index 0000000..165dbe4
--- /dev/null
+++ b/buildbot_gentoo_ci/db/keywords.py
@@ -0,0 +1,76 @@
+# 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 KeywordsConnectorComponent(base.DBConnectorComponent):
+
+    @defer.inlineCallbacks
+    def getKeywordByName(self, name):
+        def thd(conn):
+            tbl = self.db.model.keywords
+            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 getKeywordById(self, id):
+        def thd(conn):
+            tbl = self.db.model.keywords
+            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
+
+    @defer.inlineCallbacks
+    def addKeyword(self, name):
+        def thd(conn, no_recurse=False):
+            try:
+                tbl = self.db.model.keywords
+                q = tbl.insert()
+                r = conn.execute(q, dict(name=name))
+            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(
+            id=row.id,
+            name=row.name
+            )

diff --git a/buildbot_gentoo_ci/db/model.py b/buildbot_gentoo_ci/db/model.py
index e01462f..9ad1331 100644
--- a/buildbot_gentoo_ci/db/model.py
+++ b/buildbot_gentoo_ci/db/model.py
@@ -131,10 +131,10 @@ class Model(base.DBConnectorComponent):
 
     keywords = sautils.Table(
         "keywords", metadata,
-        # unique id per project
+        # unique uuid per keyword
         sa.Column('id', sa.Integer, primary_key=True),
         # project's name
-        sa.Column('keyword', sa.String(255), nullable=False),
+        sa.Column('name', sa.String(255), nullable=False),
     )
 
     categorys = sautils.Table(
@@ -158,11 +158,11 @@ class Model(base.DBConnectorComponent):
                   sa.ForeignKey('repositorys.uuid', ondelete='CASCADE'),
                   nullable=False),
         sa.Column('deleted', sa.Boolean, default=False),
-        sa.Column('deleted_at', sa.Integer, nullable=True),
+        sa.Column('deleted_at', sa.DateTime, nullable=True),
     )
 
-    ebuilds = sautils.Table(
-        "ebuilds", metadata,
+    versions = sautils.Table(
+        "versions", metadata,
         sa.Column('uuid', sa.String(36), primary_key=True,
                   default=lambda: str(uuid.uuid4()),
                   ),
@@ -170,21 +170,23 @@ class Model(base.DBConnectorComponent):
         sa.Column('package_uuid', sa.String(36),
                   sa.ForeignKey('packages.uuid', ondelete='CASCADE'),
                   nullable=False),
-        sa.Column('ebuild_hash', sa.String(255), nullable=False),
+        sa.Column('file_hash', sa.String(255), nullable=False),
         sa.Column('deleted', sa.Boolean, default=False),
-        sa.Column('deleted_at', sa.Integer, nullable=True),
+        sa.Column('deleted_at', sa.DateTime, nullable=True),
     )
 
-    ebuilds_keywords = sautils.Table(
-        "ebuilds_keywords", metadata,
+    versions_keywords = sautils.Table(
+        "versions_keywords", metadata,
         # unique id per project
-        sa.Column('id', sa.Integer, primary_key=True),
+        sa.Column('uuid', sa.String(36), primary_key=True,
+                  default=lambda: str(uuid.uuid4()),
+                  ),
         # project's name
         sa.Column('keyword_id', sa.Integer,
                   sa.ForeignKey('keywords.id', ondelete='CASCADE')),
-        sa.Column('ebuilds_uuid', sa.String(36),
-                  sa.ForeignKey('ebuilds.uuid', ondelete='CASCADE')),
-        sa.Column('status', sa.String(255), nullable=False),
+        sa.Column('versions_uuid', sa.String(36),
+                  sa.ForeignKey('versions.uuid', ondelete='CASCADE')),
+        sa.Column('status', sa.Enum('stable','unstable','negative','all'), nullable=False),
     )
 
     # Tables related to users

diff --git a/buildbot_gentoo_ci/db/versions.py b/buildbot_gentoo_ci/db/versions.py
new file mode 100644
index 0000000..25f2061
--- /dev/null
+++ b/buildbot_gentoo_ci/db/versions.py
@@ -0,0 +1,112 @@
+# 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
+from buildbot.util import epoch2datetime
+
+class VersionsConnectorComponent(base.DBConnectorComponent):
+
+    @defer.inlineCallbacks
+    def getVersionByName(self, name):
+        def thd(conn):
+            tbl = self.db.model.versions
+            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 getVersionByUuid(self, uuid):
+        def thd(conn):
+            tbl = self.db.model.versions
+            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 addVersion(self, name, package_uuid, file_hash):
+        def thd(conn, no_recurse=False):
+            try:
+                tbl = self.db.model.versions
+                q = tbl.insert()
+                r = conn.execute(q, dict(name=name,
+                                         package_uuid=package_uuid,
+                                         file_hash=file_hash))
+            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
+
+    @defer.inlineCallbacks
+    def delVersion(self, uuid):
+        deleted_at = epoch2datetime(int(self.master.reactor.seconds()))
+        def thd(conn, no_recurse=False):
+        
+                tbl = self.db.model.versions
+                q = tbl.update()
+                q = q.where(tbl.c.uuid == uuid)
+                conn.execute(q, deleted=True,
+                                deleted_at=deleted_at)
+        yield self.db.pool.do(thd)
+
+    @defer.inlineCallbacks
+    def addKeyword(self, version_uuid, keyword_id, status):
+        def thd(conn, no_recurse=False):
+            try:
+                tbl = self.db.model.versions_keywords
+                q = tbl.insert()
+                r = conn.execute(q, dict(version_uuid=version_uuid,
+                                         keyword_id=keyword_id,
+                                         status=status))
+            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,
+            package_uuid=row.package_uuid,
+            file_hash=row.file_hash,
+            deleted=row.deleted,
+            deleted_at=row.deleted_at
+            )

diff --git a/buildbot_gentoo_ci/steps/package.py b/buildbot_gentoo_ci/steps/package.py
index 916bb73..3a28da2 100644
--- a/buildbot_gentoo_ci/steps/package.py
+++ b/buildbot_gentoo_ci/steps/package.py
@@ -14,6 +14,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.plugins import steps
 
 class AddPackage(BuildStep):
     def __init__(self, **kwargs):
@@ -36,6 +37,7 @@ class AddPackage(BuildStep):
         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("category_data", self.getProperty("category_data"), 'category_data')
         self.setProperty("cpv", self.getProperty("cpv"), 'cpv')
         return SUCCESS
 
@@ -52,10 +54,10 @@ class CheckPGentooCiProject(BuildStep):
         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("category_data", self.getProperty("category_data"), 'category_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()])
@@ -63,3 +65,33 @@ class CheckPGentooCiProject(BuildStep):
         self.setProperty("package_data", self.package_data, 'package_data')
         #yield self.build.addStepsAfterLastStep([CheckPathPackage()])
         return SUCCESS
+
+class TriggerCheckVGentooCiProject(BuildStep):
+    def __init__(self, **kwargs):
+        super().__init__(**kwargs)
+
+    @defer.inlineCallbacks
+    def run(self):
+        addStepUpdateVData = []
+        addStepUpdateVData.append(
+                    steps.Trigger(
+                        schedulerNames=['update_v_data'],
+                        waitForFinish=False,
+                        updateSourceStamp=False,
+                        set_properties={
+                            'cpv' : self.getProperty("cpv"),
+                            'package_data' : self.getProperty("package_data"),
+                            'config_root' : self.getProperty("config_root"),
+                            'repository_data' : self.getProperty("repository_data"),
+                            'category_data' : self.getProperty("category_data"),
+                        }
+                    )
+                )
+        yield self.build.addStepsAfterCurrentStep(addStepUpdateVData)
+        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("category_data", self.getProperty("category_data"), 'category_data')
+        self.setProperty("package_data", self.getProperty("package_data"), 'package_data')
+        self.setProperty("cpv", self.getProperty("cpv"), 'cpv')
+        return SUCCESS

diff --git a/buildbot_gentoo_ci/steps/update_db.py b/buildbot_gentoo_ci/steps/update_db.py
index d00407c..3817d44 100644
--- a/buildbot_gentoo_ci/steps/update_db.py
+++ b/buildbot_gentoo_ci/steps/update_db.py
@@ -101,7 +101,7 @@ class CheckProjectGentooCiProject(BuildStep):
         self.project_repository_data = self.getProperty("project_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.config_root = yield os.path.join(self.project_path, self.project_data['name'])
+        self.config_root = yield os.path.join(self.project_path, self.project_data['name'], '')
         self.make_conf_file = yield os.path.join(self.config_root, 'etc/portage', '') + 'make.conf'
         try:
             getconfig(self.make_conf_file, tolerant=0, allow_sourcing=True, expand=True)
@@ -124,8 +124,8 @@ class CheckCPVGentooCiProject(BuildStep):
     def run(self):
         #self.cpv_changes = self.getProperty("cpv_changes")
         self.cpv_changes = []
-        self.cpv_changes.append('dev-lang/python-3.8')
-        self.cpv_changes.append('dev-python/prust-3.9')
+        self.cpv_changes.append('dev-lang/python-3.9.1')
+        self.cpv_changes.append('dev-python/scrypt-0.8.16')
         print(self.cpv_changes)
         print(self.getProperty("repository_data"))
         # check if cpv_change is a string or a list

diff --git a/buildbot_gentoo_ci/steps/version.py b/buildbot_gentoo_ci/steps/version.py
new file mode 100644
index 0000000..e274e65
--- /dev/null
+++ b/buildbot_gentoo_ci/steps/version.py
@@ -0,0 +1,264 @@
+# 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 cpv_getversion, pkgsplit
+from portage import auxdbkeys
+from portage import config as portage_config
+from portage import portdbapi
+
+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 GetVData(BuildStep):
+    
+    name = 'GetVData'
+    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']
+        self.version = yield cpv_getversion(self.getProperty("cpv"))
+        print(self.version)
+        self.old_version_data = yield self.gentooci.db.versions.getVersionByName(self.version)
+        print(self.old_version_data)
+        self.setProperty("old_version_data", self.old_version_data, 'old_version_data')
+        self.setProperty("version", self.version, 'version')
+        return SUCCESS
+
+class AddVersion(BuildStep):
+    
+    name = 'AddVersion'
+    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']
+        self.version_data = {}
+        self.version_data['name'] = self.getProperty("version")
+        self.version_data['package_uuid'] = self.getProperty("package_data")['uuid']
+        self.version_data['file_hash'] = self.getProperty("ebuild_file_hash")
+        self.version_data['uuid'] = yield self.gentooci.db.versions.addVersion(
+                                            self.version_data['name'],
+                                            self.version_data['package_uuid'],
+                                            self.version_data['file_hash']
+                                            )
+        print(self.version_data)
+        self.setProperty("version_data", self.version_data, 'version_data')
+        return SUCCESS
+
+class GetAuxMetadata(BuildStep):
+    
+    name = 'GetAuxMetadata'
+    description = 'Running'
+    descriptionDone = 'Ran'
+    descriptionSuffix = None
+    haltOnFailure = True
+    flunkOnFailure = True
+
+    def __init__(self, **kwargs):
+        super().__init__(**kwargs)
+
+    @defer.inlineCallbacks
+    def run(self):
+        self.mysettings = yield portage_config(config_root = self.getProperty("config_root"))
+        self.myportdb = yield portdbapi(mysettings=self.mysettings)
+        try:
+            auxdb_list = yield self.myportdb.aux_get(self.getProperty("cpv"), auxdbkeys, myrepo=self.getProperty("repository_data")['name'])
+        except:
+            print("Failed to get aux data for %s" % self.getProperty("cpv"))
+            yield self.myportdb.close_caches()
+            yield portdbapi.portdbapi_instances.remove(self.myportdb)
+            return FAILURE
+        self.setProperty('aux_metadata', auxdb_list, 'aux_metadata')
+        yield self.myportdb.close_caches()
+        yield portdbapi.portdbapi_instances.remove(self.myportdb)
+        return SUCCESS
+
+class AddVersionKeyword(BuildStep):
+
+    name = 'AddVersionKeyword'
+    description = 'Running'
+    descriptionDone = 'Ran'
+    descriptionSuffix = None
+    haltOnFailure = True
+    flunkOnFailure = True
+    
+    def __init__(self, **kwargs):
+        super().__init__(**kwargs)
+    
+    @defer.inlineCallbacks
+    def add_keyword_data(self, keyword):
+        keyword_data = {}
+        keyword_data['keyword'] = keyword
+        keyword_data['id'] = yield self.gentooci.db.keywords.addKeyword(keyword_data['keyword'])
+        return keyword_data
+    
+    @defer.inlineCallbacks
+    def check_keyword_data(self, keyword):
+        keyword_data = yield self.gentooci.db.keywords.getKeywordByName(keyword)
+        if keyword_data is None:
+            keyword_data = yield self.add_keyword_data(keyword)
+        return keyword_data['id']
+
+    @defer.inlineCallbacks
+    def run(self):
+        self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
+        self.version_keyword_dict = {}
+        for keyword in self.getProperty("aux_metadata")[8].split():
+            status = 'stable'
+            if keyword[0] in ["~"]:
+                keyword = keyword[1:]
+                status = 'unstable'
+            elif keyword[0] in ["-"]:
+                keyword = keyword[1:]
+                status = 'negative'
+            elif keyword[0] in ["*"]:
+                keyword = keyword[1:]
+                status = 'all'
+            version_keyword_data = {}
+            version_keyword_data['version_uuid'] = self.getProperty("version_data")['uuid']
+            version_keyword_data['keyword_id'] = yield self.check_keyword_data(keyword)
+            version_keyword_data['status'] = status
+            version_keyword_data['uuid'] = yield self.gentooci.db.versions.addKeyword(
+                                                version_keyword_data['version_uuid'],
+                                                version_keyword_data['keyword_id'],
+                                                version_keyword_data['status'])
+            self.version_keyword_dict[keyword] = version_keyword_data
+        self.setProperty('version_keyword_dict', self.version_keyword_dict, 'version_keyword_dict')
+        return SUCCESS
+
+class CheckPathHash(BuildStep):
+    
+    name = 'CheckPathHash'
+    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']
+        self.repository_basedir = self.gentooci.config.project['repository_basedir']
+        self.repository_path = yield os.path.join(self.repository_basedir, self.getProperty("repository_data")['name'] + '.git')
+        self.cp_path = yield pkgsplit(self.getProperty("cpv"))[0]
+        self.file_name = yield self.getProperty("package_data")['name'] + '-' + self.getProperty("version") + '.ebuild'
+        self.ebuild_file = yield os.path.join(self.repository_path, self.cp_path, self.file_name)
+        if os.path.isfile(self.ebuild_file):
+            self.ebuild_file_hash = yield perform_checksum(self.ebuild_file, "SHA256")[0]
+        else:
+            self.ebuild_file = None
+            self.ebuild_file_hash = None
+        self.setProperty('ebuild_file', self.ebuild_file, 'ebuild_file')
+        self.setProperty('ebuild_file_hash', self.ebuild_file_hash, 'ebuild_file_hash')
+        return SUCCESS
+
+class TriggerBuildCheck(BuildStep):
+    
+    name = 'TriggerBuildCheck'
+    description = 'Running'
+    descriptionDone = 'Ran'
+    descriptionSuffix = None
+    haltOnFailure = True
+    flunkOnFailure = True
+
+    def __init__(self, **kwargs):
+        super().__init__(**kwargs)
+
+    @defer.inlineCallbacks
+    def run(self):
+        yield steps.Trigger(
+                schedulerNames=['build_request_data'],
+                        waitForFinish=False,
+                        updateSourceStamp=False,
+                        set_properties={
+                            'cpv' : self.getProperty("cpv"),
+                            'version_data' : self.getProperty("version_data"),
+                            'version_keyword_dict' : self.getProperty('version_keyword_dict'),
+                            'repository_data' : self.getProperty("repository_data"),
+                        }
+                )
+        return SUCCESS
+
+class DeleteOldVersion(BuildStep):
+
+    name = 'DeleteOldVersion'
+    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']
+        yield self.gentooci.db.versions.delVersion(self.getProperty("old_version_data")['uuid'])
+        return SUCCESS
+
+class CheckV(BuildStep):
+    
+    name = 'CheckV'
+    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']
+        self.old_version_data = self.getProperty("old_version_data")
+        self.ebuild_file = self.getProperty("ebuild_file")
+        addStepVData = []
+        if self.getProperty("ebuild_file") is None and self.getProperty("old_version_data") is not None:
+            addStepVData.append(TriggerBuildCheck())
+            addStepVData.append(DeleteOldVersion())
+        if self.getProperty("ebuild_file") is not None and self.getProperty("old_version_data") is not None:
+            if self.getProperty("ebuild_file_hash") != self.getProperty("old_version_data")['file_hash']:
+                addStepVData.append(AddVersion())
+                addStepVData.append(GetAuxMetadata())
+                addStepVData.append(AddVersionKeyword())
+                addStepVData.append(TriggerBuildCheck())
+                addStepVData.append(DeleteOldVersion())
+            else:
+                return SUCCESS
+        if self.getProperty("ebuild_file") is not None and self.getProperty("old_version_data") is None:
+            addStepVData.append(AddVersion())
+            addStepVData.append(GetAuxMetadata())
+            addStepVData.append(AddVersionKeyword())
+            addStepVData.append(TriggerBuildCheck())
+        yield self.build.addStepsAfterCurrentStep(addStepVData)
+        return SUCCESS


             reply	other threads:[~2021-01-17  9:25 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-17  9:25 Magnus Granberg [this message]
  -- strict thread matches above, loose matches on Subject: below --
2022-04-22 12:38 [gentoo-commits] proj/tinderbox-cluster:master commit in: buildbot_gentoo_ci/steps/, buildbot_gentoo_ci/config/, buildbot_gentoo_ci/db/ Magnus Granberg
2021-02-22 20:28 Magnus Granberg
2021-01-11 17:45 Magnus Granberg
2021-01-10 21:41 Magnus Granberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1610875507.81da08ad4476408915e0e082a33f5a1c2ebe159e.zorry@gentoo \
    --to=zorry@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox