commit:     c138ea64173bbc73930199f07f9eb6814ebc43f6
Author:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 23 22:26:57 2021 +0000
Commit:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Tue Feb 23 22:26:57 2021 +0000
URL:        
https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=c138ea64

Add RunBuild

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

 buildbot_gentoo_ci/config/buildfactorys.py | 11 ++++
 buildbot_gentoo_ci/db/model.py             |  1 +
 buildbot_gentoo_ci/db/projects.py          |  3 +-
 buildbot_gentoo_ci/steps/builders.py       | 84 +++++++++++++++++++++++++++++-
 4 files changed, 96 insertions(+), 3 deletions(-)

diff --git a/buildbot_gentoo_ci/config/buildfactorys.py 
b/buildbot_gentoo_ci/config/buildfactorys.py
index cfe4131..b22e1dc 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -139,4 +139,15 @@ def run_build_request():
     # run pkgcheck if wanted
     #   check log
     f.addStep(builders.RunPkgCheck())
+    # check cpv match
+    f.addStep(builders.RunEmerge(step='match'))
+    # Add the needed steps for build
+    f.addStep(builders.RunBuild())
+    # clean up the worker
+    f.addStep(builders.RunEmerge(step='pre-depclean'))
+    #   look at the log to see if we need to do stuff
+    #   depclean
+    f.addStep(builders.RunEmerge(step='depclean'))
+    f.addStep(builders.RunEmerge(step='preserved-libs'))
+    f.addStep(builders.RunEmerge(step='depclean'))
     return f

diff --git a/buildbot_gentoo_ci/db/model.py b/buildbot_gentoo_ci/db/model.py
index 4d691ea..2153b79 100644
--- a/buildbot_gentoo_ci/db/model.py
+++ b/buildbot_gentoo_ci/db/model.py
@@ -129,6 +129,7 @@ class Model(base.DBConnectorComponent):
                   nullable=False),
         sa.Column('auto', sa.Boolean, default=False),
         sa.Column('pkgcheck', sa.Enum('package','full','none'), 
default='none'),
+        sa.Column('build', sa.Boolean, default=False),
     )
 
     # projects etc/portage settings

diff --git a/buildbot_gentoo_ci/db/projects.py 
b/buildbot_gentoo_ci/db/projects.py
index 9aeca50..37d401c 100644
--- a/buildbot_gentoo_ci/db/projects.py
+++ b/buildbot_gentoo_ci/db/projects.py
@@ -169,7 +169,8 @@ class ProjectsConnectorComponent(base.DBConnectorComponent):
             project_uuid=row.project_uuid,
             repository_uuid=row.repository_uuid,
             auto=row.auto,
-            pkgcheck=pkgcheck
+            pkgcheck=pkgcheck,
+            build=row.build
             )
 
     def _row2dict_projects_portage(self, conn, row):

diff --git a/buildbot_gentoo_ci/steps/builders.py 
b/buildbot_gentoo_ci/steps/builders.py
index 6d46ae6..3ecb78b 100644
--- a/buildbot_gentoo_ci/steps/builders.py
+++ b/buildbot_gentoo_ci/steps/builders.py
@@ -21,6 +21,7 @@ def PersOutputOfEmerge(rc, stdout, stderr):
     emerge_output['depclean'] = False
     package_dict = {}
     print(stderr)
+    emerge_output['stderr'] = stderr
     # split the lines
     for line in stdout.split('\n'):
         # package list
@@ -69,6 +70,7 @@ def PersOutputOfEmerge(rc, stdout, stderr):
             if line.startswith('!!! existing preserved libs'):
                 pass
         #FIXME: Handling of depclean output dict of packages that get removed 
or saved
+    emerge_output['package'] = package_dict
     # split the lines
     #FIXME: Handling of stderr output
     for line in stderr.split('\n'):
@@ -191,6 +193,7 @@ class SetupPropertys(BuildStep):
         self.setProperty('project_data', project_data, 'project_data')
         self.setProperty('preserved_libs', False, 'preserved-libs')
         self.setProperty('depclean', False, 'depclean')
+        self.setProperty('cpv_build', False, 'cpv_build')
         return SUCCESS
 
 class SetMakeProfile(BuildStep):
@@ -511,7 +514,51 @@ class RunEmerge(BuildStep):
                         workdir='/'
                 ))
             aftersteps_list.append(CheckEmergeLogs('depclean'))
-        if not self.step is None:
+
+        if self.step == 'match':
+            cpv = self.getProperty("cpv")
+            c = yield catpkgsplit(cpv)[0]
+            p = yield catpkgsplit(cpv)[1]
+            shell_commad_list.append('-pO')
+            shell_commad_list.append(c + '/' + p)
+            aftersteps_list.append(
+                steps.SetPropertyFromCommandNewStyle(
+                        command=shell_commad_list,
+                        strip=True,
+                        extract_fn=PersOutputOfEmerge,
+                        workdir='/',
+                        timeout=None
+                ))
+            aftersteps_list.append(CheckEmergeLogs('match'))
+
+        if self.step == 'pre-build':
+            shell_commad_list.append('-p')
+            shell_commad_list.append('=' + self.getProperty('cpv'))
+            aftersteps_list.append(
+                steps.SetPropertyFromCommandNewStyle(
+                        command=shell_commad_list,
+                        strip=True,
+                        extract_fn=PersOutputOfEmerge,
+                        workdir='/',
+                        timeout=None
+                ))
+            aftersteps_list.append(CheckEmergeLogs('pre-build'))
+
+        if self.step == 'build':
+            shell_commad_list.append('-q')
+            shell_commad_list.append('-1')
+            shell_commad_list.append('=' + self.getProperty('cpv'))
+            aftersteps_list.append(
+                steps.SetPropertyFromCommandNewStyle(
+                        command=shell_commad_list,
+                        strip=True,
+                        extract_fn=PersOutputOfEmerge,
+                        workdir='/',
+                        timeout=None
+                ))
+            aftersteps_list.append(CheckEmergeLogs('build'))
+
+        if not self.step is None and aftersteps_list != []:
             yield self.build.addStepsAfterCurrentStep(aftersteps_list)
         return SUCCESS
 
@@ -549,7 +596,18 @@ class CheckEmergeLogs(BuildStep):
         if emerge_output['depclean'] and projects_emerge_options['depclean']:
             self.setProperty('depclean', True, 'depclean')
 
-        if not self.step is None:
+        # FIXME: check if cpv match
+        if self.step == 'match'and 
self.getProperty('projectrepository_data')['build']:
+            if emerge_output['package'][self.getProperty('cpv')]:
+                self.setProperty('cpv_build', True, 'cpv_build')
+            print(self.getProperty('cpv_build'))
+
+        #FIXME:
+        # update package.* if needed and rerun pre-build max X times
+        if self.step == 'pre-build':
+            print(emerge_output)
+
+        if not self.step is None and aftersteps_list != []:
             yield self.build.addStepsAfterCurrentStep(aftersteps_list)
         return SUCCESS
 
@@ -623,3 +681,25 @@ class CheckPkgCheckLogs(BuildStep):
         # Perse the logs
         # tripp irc request with pkgcheck info
         return SUCCESS
+
+class RunBuild(BuildStep):
+
+    name = 'RunBuild'
+    description = 'Running'
+    descriptionDone = 'Ran'
+    descriptionSuffix = None
+    haltOnFailure = True
+    flunkOnFailure = True
+
+    def __init__(self, **kwargs):
+        super().__init__(**kwargs)
+
+    @defer.inlineCallbacks
+    def run(self):
+        if not self.getProperty('cpv_build'):
+            return SUCCESS
+        aftersteps_list = []
+        aftersteps_list.append(RunEmerge(step='pre-build'))
+        aftersteps_list.append(RunEmerge(step='build'))
+        yield self.build.addStepsAfterCurrentStep(aftersteps_list)
+        return SUCCESS

Reply via email to