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
next 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