commit: f5cbe07ace4abc03c04e21a43e028f1edc24121d
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Mon Oct 25 21:24:51 2021 +0000
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Mon Oct 25 21:24:51 2021 +0000
URL:
https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=f5cbe07a
Add AddVersionRestrictions and AddVersionIUse to Version buildstep
Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
buildbot_gentoo_ci/db/model.py | 10 ++++++
buildbot_gentoo_ci/db/versions.py | 38 ++++++++++++++++++++
buildbot_gentoo_ci/steps/version.py | 72 +++++++++++++++++++++++++++++++++++++
3 files changed, 120 insertions(+)
diff --git a/buildbot_gentoo_ci/db/model.py b/buildbot_gentoo_ci/db/model.py
index 12d5ee9..9e380c8 100644
--- a/buildbot_gentoo_ci/db/model.py
+++ b/buildbot_gentoo_ci/db/model.py
@@ -301,6 +301,16 @@ class Model(base.DBConnectorComponent):
sa.Column('status', sa.Enum('stable','unstable','negative','all'),
nullable=False),
)
+ versions_metadata = sautils.Table(
+ "versions_metadata", metadata,
+ # unique id per project
+ sa.Column('id', sa.Integer, primary_key=True),
+ sa.Column('version_uuid', sa.String(36),
+ sa.ForeignKey('versions.uuid', ondelete='CASCADE')),
+ sa.Column('metadata', sa.Enum('restrict', 'properties', 'iuse',
'required use', 'keyword'), nullable=False),
+ sa.Column('value', sa.String(255), nullable=False),
+ )
+
workers = sautils.Table(
"workers", metadata,
# unique id per project
diff --git a/buildbot_gentoo_ci/db/versions.py
b/buildbot_gentoo_ci/db/versions.py
index fcc19ee..6b534f3 100644
--- a/buildbot_gentoo_ci/db/versions.py
+++ b/buildbot_gentoo_ci/db/versions.py
@@ -101,6 +101,36 @@ class
VersionsConnectorComponent(base.DBConnectorComponent):
res = yield self.db.pool.do(thd)
return res
+ @defer.inlineCallbacks
+ def addMetadata(self, version_uuid, metadata, value):
+ def thd(conn, no_recurse=False):
+ try:
+ tbl = self.db.model.versions_metadata
+ q = tbl.insert()
+ r = conn.execute(q, dict(version_uuid=version_uuid,
+ metadata=metadata,
+ value=value))
+ except (sa.exc.IntegrityError, sa.exc.ProgrammingError):
+ id = None
+ else:
+ id = r.inserted_primary_key[0]
+ return uuid
+ res = yield self.db.pool.do(thd)
+ return res
+
+ #FIXME: return sorted by id
+ @defer.inlineCallbacks
+ def getMetadataByUuidAndMatadata(self, uuid, metadata):
+ def thd(conn):
+ tbl = self.db.model.versions_metadata
+ q = tbl.select()
+ q = q.where(tbl.c.version_uuid == uuid)
+ q = q.where(tbl.c.metadata == metadata)
+ return [self._row2dict_version_metadata(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,
@@ -111,3 +141,11 @@ class
VersionsConnectorComponent(base.DBConnectorComponent):
deleted=row.deleted,
deleted_at=row.deleted_at
)
+
+ def _row2dict_version_metadata(self, conn, row):
+ return dict(
+ id=row.id,
+ version_uuid=row.version_uuid,
+ metadata=row.metadata,
+ value=row.value
+ )
diff --git a/buildbot_gentoo_ci/steps/version.py
b/buildbot_gentoo_ci/steps/version.py
index df97536..bff1e57 100644
--- a/buildbot_gentoo_ci/steps/version.py
+++ b/buildbot_gentoo_ci/steps/version.py
@@ -16,10 +16,21 @@ from buildbot.process.buildstep import BuildStep
from buildbot.process.results import SUCCESS
from buildbot.process.results import FAILURE
from buildbot.process.results import WARNINGS
+from buildbot.process.results import SKIPPED
from buildbot.plugins import steps
from buildbot_gentoo_ci.steps import portage as portage_steps
+def getIUseValue(auxdb_iuse):
+ status = False
+ if auxdb_iuse[0] in ['+']:
+ status = True
+ if auxdb_iuse[0] in ['+'] or auxdb_iuse[0] in ['-']:
+ iuse = auxdb_iuse[1:]
+ else:
+ iuse = auxdb_iuse
+ return iuse, status
+
class GetVData(BuildStep):
name = 'GetVData'
@@ -96,6 +107,7 @@ class GetCommitdata(BuildStep):
self.setProperty('commit_id',
self.getProperty("change_data")['revision'], 'commit_id')
return SUCCESS
+#FIXME: use versions_metadata table
class AddVersionKeyword(BuildStep):
name = 'AddVersionKeyword'
@@ -155,6 +167,64 @@ class AddVersionKeyword(BuildStep):
self.setProperty('version_keyword_dict', self.version_keyword_dict,
'version_keyword_dict')
return SUCCESS
+class AddVersionRestrictions(BuildStep):
+
+ name = 'AddVersionRestrictions'
+ 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']
+ auxdb = self.getProperty("auxdb")['RESTRICT']
+ if auxdb is None or not isinstance(auxdb, list):
+ return SKIPPED
+ for restrict in auxdb:
+ version_metadata_data = {}
+ version_metadata_data['version_uuid'] =
self.getProperty("version_data")['uuid']
+ version_metadata_data['metadata'] = 'restrict'
+ version_metadata_data['value'] = restrict
+ version_metadata_data['id'] = yield
self.gentooci.db.versions.addMetadata(
+
version_metadata_data['version_uuid'],
+
version_metadata_data['metadata'],
+ version_metadata_data['value'])
+ return SUCCESS
+
+class AddVersionIUse(BuildStep):
+
+ name = 'AddVersionIUse'
+ 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']
+ auxdb = self.getProperty("auxdb")['IUSE']
+ if auxdb is None or not isinstance(auxdb, list):
+ return SKIPPED
+ for iuse in auxdb:
+ version_metadata_data = {}
+ version_metadata_data['version_uuid'] =
self.getProperty("version_data")['uuid']
+ version_metadata_data['metadata'] = 'iuse'
+ version_metadata_data['value'] = iuse
+ version_metadata_data['id'] = yield
self.gentooci.db.versions.addMetadata(
+
version_metadata_data['version_uuid'],
+
version_metadata_data['metadata'],
+ version_metadata_data['value'])
+ return SUCCESS
+
class CheckPathHash(BuildStep):
name = 'CheckPathHash'
@@ -272,6 +342,8 @@ class CheckV(BuildStep):
addStepVData.append(portage_steps.GetAuxMetadata())
addStepVData.append(AddVersion())
addStepVData.append(AddVersionKeyword())
+ addStepVData.append(AddVersionRestrictions())
+ addStepVData.append(AddVersionIUse())
addStepVData.append(TriggerBuildCheck())
yield self.build.addStepsAfterCurrentStep(addStepVData)
return SUCCESS