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