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/db/, buildbot_gentoo_ci/config/, buildbot_gentoo_ci/steps/
Date: Wed,  3 Mar 2021 23:15:15 +0000 (UTC)	[thread overview]
Message-ID: <1614813272.2b37e2f71e33f58d1ee3a3af5d6994c3dccd0357.zorry@gentoo> (raw)

commit:     2b37e2f71e33f58d1ee3a3af5d6994c3dccd0357
Author:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Wed Mar  3 23:14:32 2021 +0000
Commit:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Wed Mar  3 23:14:32 2021 +0000
URL:        https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=2b37e2f7

Add Project build id

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

 buildbot_gentoo_ci/config/buildfactorys.py |  1 +
 buildbot_gentoo_ci/db/builds.py            | 81 ++++++++++++++++++++++++++++++
 buildbot_gentoo_ci/db/connector.py         |  2 +
 buildbot_gentoo_ci/db/model.py             | 19 +++++++
 buildbot_gentoo_ci/steps/builders.py       | 47 +++++++++++++++++
 5 files changed, 150 insertions(+)

diff --git a/buildbot_gentoo_ci/config/buildfactorys.py b/buildbot_gentoo_ci/config/buildfactorys.py
index b592541..31543f9 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -158,4 +158,5 @@ def run_build_request():
     f.addStep(builders.RunEmerge(step='depclean'))
     f.addStep(builders.RunEmerge(step='preserved-libs'))
     f.addStep(builders.RunEmerge(step='depclean'))
+    f.addStep(builders.setBuildStatus())
     return f

diff --git a/buildbot_gentoo_ci/db/builds.py b/buildbot_gentoo_ci/db/builds.py
new file mode 100644
index 0000000..79814b7
--- /dev/null
+++ b/buildbot_gentoo_ci/db/builds.py
@@ -0,0 +1,81 @@
+# 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 BuildsConnectorComponent(base.DBConnectorComponent):
+
+    #@defer.inlineCallbacks
+    def addBuild(self, project_build_data):
+        created_at = epoch2datetime(int(self.master.reactor.seconds()))
+        def thd(conn, no_recurse=False):
+            tbl = self.db.model.projects_builds
+            # get the highest current number
+            r = conn.execute(sa.select([sa.func.max(tbl.c.build_id)],
+                                       whereclause=(tbl.c.project_uuid == project_build_data['project_uuid'])))
+            number = r.scalar()
+            new_number = 1 if number is None else number + 1
+            try:
+                q = tbl.insert()
+                r = conn.execute(q, dict(project_uuid=project_build_data['project_uuid'],
+                                         version_uuid=project_build_data['version_uuid'],
+                                         buildbot_build_id=project_build_data['buildbot_build_id'],
+                                         status=project_build_data['status'],
+                                         requested=project_build_data['requested'],
+                                         created_at=created_at,
+                                         build_id=new_number))
+            except (sa.exc.IntegrityError, sa.exc.ProgrammingError):
+                id = None
+                new_number = None
+            else:
+                id = r.inserted_primary_key[0]
+            return id, new_number
+        return self.db.pool.do(thd)
+
+    @defer.inlineCallbacks
+    def setSatusBuilds(self, build_id, project_uuid, status):
+        updated_at = epoch2datetime(int(self.master.reactor.seconds()))
+        def thd(conn, no_recurse=False):
+        
+                tbl = self.db.model.projects_builds
+                q = tbl.update()
+                q = q.where(tbl.c.build_id == build_id)
+                q = q.where(tbl.c.project_uuid == project_uuid)
+                conn.execute(q, updated_at=updated_at,
+                                status=status)
+        yield self.db.pool.do(thd)
+
+    @defer.inlineCallbacks
+    def setBuildbotBuildIdBuilds(self, build_id, project_uuid, buildbot_build_id):
+        updated_at = epoch2datetime(int(self.master.reactor.seconds()))
+        def thd(conn, no_recurse=False):
+        
+                tbl = self.db.model.projects_builds
+                q = tbl.update()
+                q = q.where(tbl.c.build_id == build_id)
+                q = q.where(tbl.c.project_uuid == project_uuid)
+                conn.execute(q, updated_at=updated_at,
+                                buildbot_build_id=buildbot_build_id)
+        yield self.db.pool.do(thd)

diff --git a/buildbot_gentoo_ci/db/connector.py b/buildbot_gentoo_ci/db/connector.py
index 7d218ab..7256cab 100644
--- a/buildbot_gentoo_ci/db/connector.py
+++ b/buildbot_gentoo_ci/db/connector.py
@@ -37,6 +37,7 @@ from buildbot_gentoo_ci.db import packages
 from buildbot_gentoo_ci.db import versions
 from buildbot_gentoo_ci.db import keywords
 from buildbot_gentoo_ci.db import portages
+from buildbot_gentoo_ci.db import builds
 
 upgrade_message = textwrap.dedent("""\
 
@@ -83,6 +84,7 @@ class DBConnector(service.ReconfigurableServiceMixin,
         self.versions = versions.VersionsConnectorComponent(self)
         self.keywords = keywords.KeywordsConnectorComponent(self)
         self.portages = portages.PortagesConnectorComponent(self)
+        self.builds = builds.BuildsConnectorComponent(self)
 
     @defer.inlineCallbacks
     def setup(self, config, check_version=True, verbose=True):

diff --git a/buildbot_gentoo_ci/db/model.py b/buildbot_gentoo_ci/db/model.py
index aa4eabc..2221ba4 100644
--- a/buildbot_gentoo_ci/db/model.py
+++ b/buildbot_gentoo_ci/db/model.py
@@ -198,6 +198,25 @@ class Model(base.DBConnectorComponent):
         sa.Column('preserved_libs', sa.Boolean, default=True),
     )
 
+    projects_builds = sautils.Table(
+        "projects_builds", metadata,
+        sa.Column('id', sa.Integer, primary_key=True),
+        sa.Column('build_id', sa.Integer),
+        sa.Column('project_uuid', sa.String(36),
+                  sa.ForeignKey('projects.uuid', ondelete='CASCADE'),
+                  nullable=False),
+        sa.Column('version_uuid', sa.String(36),
+                  sa.ForeignKey('versions.uuid', ondelete='CASCADE'),
+                  nullable=False),
+        sa.Column('buildbot_build_id', sa.Integer),
+        sa.Column('status', sa.Enum('failed','completed','in-progress','waiting', 'warning'), nullable=False),
+        sa.Column('requested', sa.Boolean, default=False),
+        sa.Column('created_at', sa.DateTime, nullable=True),
+        sa.Column('updated_at', sa.DateTime, nullable=True),
+        sa.Column('deleted', sa.Boolean, default=False),
+        sa.Column('deleted_at', sa.DateTime, nullable=True),
+    )
+
     keywords = sautils.Table(
         "keywords", metadata,
         # unique uuid per keyword

diff --git a/buildbot_gentoo_ci/steps/builders.py b/buildbot_gentoo_ci/steps/builders.py
index 21472c7..d09c4b6 100644
--- a/buildbot_gentoo_ci/steps/builders.py
+++ b/buildbot_gentoo_ci/steps/builders.py
@@ -124,6 +124,7 @@ class TriggerRunBuildRequest(BuildStep):
                             'projectrepository_data' : self.getProperty('projectrepository_data'),
                             'use_data' : self.getProperty("use_data"),
                             'fullcheck' : self.getProperty("fullcheck"),
+                            'project_build_data' : None
                         }
                 )])
         return SUCCESS
@@ -194,6 +195,28 @@ class SetupPropertys(BuildStep):
         self.setProperty('preserved_libs', False, 'preserved-libs')
         self.setProperty('depclean', False, 'depclean')
         self.setProperty('cpv_build', False, 'cpv_build')
+        print(self.getProperty("buildnumber"))
+        if self.getProperty('project_build_data') is None:
+            project_build_data = {}
+            project_build_data['project_uuid'] = project_data['uuid']
+            project_build_data['version_uuid'] = self.getProperty("version_data")['uuid']
+            project_build_data['status'] = 'in-progress'
+            project_build_data['requested'] = False
+            project_build_data['buildbot_build_id'] = self.getProperty("buildnumber")
+            project_build_data['id'], project_build_data['build_id'] = yield self.gentooci.db.builds.addBuild(
+                                                                                            project_build_data)
+        else:
+            project_build_data = self.getProperty('project_build_data')
+            yield self.gentooci.db.builds.setSatusBuilds(
+                                                    project_build_data['build_id'],
+                                                    project_build_data['project_uuid'],
+                                                    'in-progress')
+            yield self.gentooci.db.builds.setBuildbotBuildIdBuilds(
+                                                    project_build_data['build_id'],
+                                                    project_build_data['project_uuid'],
+                                                    self.getProperty("buildnumber"))
+        self.setProperty('project_build_data', project_build_data, 'project_build_data')
+        print(self.getProperty("project_build_data"))
         return SUCCESS
 
 class UpdateRepos(BuildStep):
@@ -546,3 +569,27 @@ class RunBuild(BuildStep):
         self.setProperty('preserved_libs', False, 'preserved-libs')
         yield self.build.addStepsAfterCurrentStep(aftersteps_list)
         return SUCCESS
+
+class setBuildStatus(BuildStep):
+
+    name = 'setBuildStatus'
+    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']
+        project_build_data = self.getProperty('project_build_data')
+        if project_build_data['status'] == 'in-progress':
+            yield self.gentooci.db.builds.setSatusBuilds(
+                                                    project_build_data['build_id'],
+                                                    project_build_data['project_uuid'],
+                                                    'completed')
+            self.setProperty('project_build_data', project_build_data, 'project_build_data')
+        return SUCCESS


             reply	other threads:[~2021-03-03 23:15 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-03 23:15 Magnus Granberg [this message]
  -- strict thread matches above, loose matches on Subject: below --
2021-03-28  8:38 [gentoo-commits] proj/tinderbox-cluster:master commit in: buildbot_gentoo_ci/db/, buildbot_gentoo_ci/config/, buildbot_gentoo_ci/steps/ Magnus Granberg
2021-02-07  9:00 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=1614813272.2b37e2f71e33f58d1ee3a3af5d6994c3dccd0357.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