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/steps/
Date: Tue, 18 Jan 2022 19:16:56 +0000 (UTC)	[thread overview]
Message-ID: <1642533404.1fc28f8dc77b5ef0c9d2d6eac054d91b455d9048.zorry@gentoo> (raw)

commit:     1fc28f8dc77b5ef0c9d2d6eac054d91b455d9048
Author:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Tue Jan 18 19:16:44 2022 +0000
Commit:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Tue Jan 18 19:16:44 2022 +0000
URL:        https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=1fc28f8d

Add support for find logfiles

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

 buildbot_gentoo_ci/steps/builders.py | 110 ++++++++++++++++++++++++++++++-----
 1 file changed, 97 insertions(+), 13 deletions(-)

diff --git a/buildbot_gentoo_ci/steps/builders.py b/buildbot_gentoo_ci/steps/builders.py
index d8314e4..dd2fbc2 100644
--- a/buildbot_gentoo_ci/steps/builders.py
+++ b/buildbot_gentoo_ci/steps/builders.py
@@ -181,6 +181,19 @@ def PersOutputOfElogLs(rc, stdout, stderr):
         'elog_ls_output' : elog_ls_output
         }
 
+def PersOutputOfBuildWorkdir(rc, stdout, stderr):
+    build_workdir_find_output = {}
+    build_workdir_find_output['rc'] = rc
+    build_workdir_find_list = []
+    for line in stdout.split('\n'):
+        find_line = line.replace('./', '')
+        if find_line != '':
+            build_workdir_find_list.append(find_line)
+    build_workdir_find_output['build_workdir_find'] = build_workdir_find_list
+    return {
+        'build_workdir_find_output' : build_workdir_find_output
+        }
+
 class TriggerRunBuildRequest(BuildStep):
     
     name = 'TriggerRunBuildRequest'
@@ -317,6 +330,9 @@ class SetupPropertys(BuildStep):
                                                     project_build_data['buildbot_build_id'])
         self.setProperty('project_build_data', project_build_data, 'project_build_data')
         print(self.getProperty("project_build_data"))
+        self.masterdest = yield os.path.join(self.master.basedir, 'workers', self.getProperty('workername'), str(self.getProperty("buildnumber")))
+        self.setProperty('masterdest', self.masterdest, 'masterdest')
+
         return SUCCESS
 
 class UpdateRepos(BuildStep):
@@ -578,6 +594,7 @@ class CheckElogLogs(BuildStep):
 
     def addFileUploade(self, sourcefile, destfile):
         self.aftersteps_list.append(steps.FileUpload(
+            mode = 0o644,
             workersrc=sourcefile,
             masterdest=destfile
         ))
@@ -600,6 +617,51 @@ class CheckElogLogs(BuildStep):
             yield self.build.addStepsAfterCurrentStep(self.aftersteps_list)
         return SUCCESS
 
+class CheckBuildWorkDirs(BuildStep):
+
+    name = 'CheckBuildWorkdir'
+    description = 'Running'
+    descriptionDone = 'Ran'
+    haltOnFailure = True
+    flunkOnFailure = True
+
+    def __init__(self, **kwargs):
+        super().__init__(**kwargs)
+        self.aftersteps_list = []
+
+    @defer.inlineCallbacks
+    def run(self):
+        cpv = self.getProperty('faild_cpv')
+        cpv_build_dir = yield os.path.join('/', 'var', 'tmp', 'portage', self.getProperty('cpv_build_dir'))
+        compressed_log_file = cpv.replace('/', '_') + '.' + str(self.getProperty("buildnumber")) + '.logs.tar.bz2'
+        masterdest_file = yield os.path.join(self.getProperty('masterdest'), compressed_log_file)
+        # cpv_build_work_dir = yield os.path.join(cpv_build_dir, 'work')
+        if self.getProperty('build_workdir_find_output')['build_workdir_find'] != []:
+            shell_commad_list = []
+            shell_commad_list.append('tar')
+            shell_commad_list.append('-cjpf')
+            shell_commad_list.append(compressed_log_file)
+            for find_line in sorted(self.getProperty('build_workdir_find_output')['build_workdir_find']):
+                print(find_line)
+                filename = yield os.path.join('work', find_line)
+                shell_commad_list.append(filename)
+            self.aftersteps_list.append(
+                steps.ShellCommand(
+                        name = 'Tarlogs',
+                        command = shell_commad_list,
+                        workdir = cpv_build_dir
+            ))
+            self.aftersteps_list.append(steps.FileUpload(
+                name = 'UploadFindlogs',
+                mode = 0o644,
+                workersrc = compressed_log_file,
+                masterdest = masterdest_file,
+                workdir = cpv_build_dir
+            ))
+        if self.aftersteps_list != []:
+            yield self.build.addStepsAfterCurrentStep(self.aftersteps_list)
+        return SUCCESS
+
 class CheckEmergeLogs(BuildStep):
 
     name = 'CheckEmergeLogs'
@@ -640,13 +702,14 @@ class CheckEmergeLogs(BuildStep):
 
     def addFileUploade(self, sourcefile, destfile):
         self.aftersteps_list.append(steps.FileUpload(
+            mode = 0o644,
             workersrc=sourcefile,
             masterdest=destfile
         ))
 
     @defer.inlineCallbacks
     def getLogFile(self, cpv, log_dict):
-        destfile = yield os.path.join(self.masterdest, log_dict[cpv]['full_logname'])
+        destfile = yield os.path.join(self.getProperty('masterdest'), log_dict[cpv]['full_logname'])
         sourcefile = log_dict[cpv]['log_path']
         self.addFileUploade(sourcefile, destfile)
 
@@ -670,42 +733,62 @@ class CheckEmergeLogs(BuildStep):
     @defer.inlineCallbacks
     def getEmergeFiles(self, cpv):
         # get emerge info
-        destfile = yield os.path.join(self.masterdest, 'emerge_info.txt')
+        destfile = yield os.path.join(self.getProperty('masterdest'), 'emerge_info.txt')
         sourcefile = yield os.path.join('/', 'tmp', 'emerge_info.txt')
         self.addFileUploade(sourcefile, destfile)
         # get emerge.log
-        destfile2 = yield os.path.join(self.masterdest, 'emerge.log')
+        destfile2 = yield os.path.join(self.getProperty('masterdest'), 'emerge.log')
         sourcefile2 = yield os.path.join('/', 'var', 'log', 'emerge.log')
         self.addFileUploade(sourcefile2, destfile2)
         # world file
-        destfile3 = yield os.path.join(self.masterdest, 'world')
+        destfile3 = yield os.path.join(self.getProperty('masterdest'), 'world')
         sourcefile3 = yield os.path.join('/', 'var', 'lib', 'portage', 'world')
         self.addFileUploade(sourcefile3, destfile3)
         # get elogs
         self.getElogFiles(cpv)
 
-    def getBuildWorkdirFiles(self):
+    @defer.inlineCallbacks
+    def getBuildWorkDirs(self, cpv):
         #FIXME:
         # get files from the build workdir
-        pass
+        cpv_build_dir = yield os.path.join('/', 'var', 'tmp', 'portage', cpv)
+        print(cpv_build_dir)
+        self.setProperty('cpv_build_dir', cpv_build_dir, 'cpv_build_dir')
+        cpv_build_work_dir = yield os.path.join(cpv_build_dir, 'work')
+        #FIXME: take find pattern from db or config
+        find_pattern_list = ['meson-log.txt', 'CMakeCache.txt']
+        shell_commad_list = []
+        # we have *.log as default
+        shell_commad_list.append('find')
+        shell_commad_list.append('-name')
+        shell_commad_list.append('*.log')
+        for find_pattern in find_pattern_list:
+            shell_commad_list.append('-o')
+            shell_commad_list.append('-name')
+            shell_commad_list.append(find_pattern)
+        self.aftersteps_list.append(
+                steps.SetPropertyFromCommand(
+                        name = 'FindLogs',
+                        command = shell_commad_list,
+                        strip = True,
+                        extract_fn = PersOutputOfBuildWorkdir,
+                        workdir = cpv_build_work_dir
+                ))
+        self.aftersteps_list.append(CheckBuildWorkDirs())
 
     @defer.inlineCallbacks
     def run(self):
         self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
         project_data = self.getProperty('project_data')
         projects_emerge_options = yield self.gentooci.db.projects.getProjectEmergeOptionsByUuid(project_data['uuid'])
-        emerge_output = self.getProperty('emerge_output')
-        self.faild_cpv = emerge_output['failed']
-        self.setProperty('faild_cpv', self.faild_cpv, 'faild_cpv')
         shell_commad_list = [
                     'emerge',
                     '-v'
                     ]
+        emerge_output = self.getProperty('emerge_output')
+        self.faild_cpv = emerge_output['failed']
         package_dict = emerge_output['packages']
 
-        self.masterdest = yield os.path.join(self.master.basedir, 'workers', self.getProperty('workername'), str(self.getProperty("buildnumber")))
-        self.setProperty('masterdest', self.masterdest, 'masterdest')
-
         #FIXME: Prosees the logs and do stuff
         # preserved-libs
         if emerge_output['preserved_libs'] and projects_emerge_options['preserved_libs']:
@@ -849,8 +932,9 @@ class CheckEmergeLogs(BuildStep):
                             self.log_data[self.faild_cpv] = log_dict[self.faild_cpv]
                             yield self.getLogFile(self.faild_cpv, log_dict)
                             faild_version_data = yield self.getVersionData(self.faild_cpv)
+                        self.setProperty('faild_cpv', self.faild_cpv, 'faild_cpv')
                         self.getEmergeFiles(self.faild_cpv)
-                        self.getBuildWorkdirFiles()
+                        self.getBuildWorkDirs(self.faild_cpv)
                     else:
                         self.getEmergeFiles(cpv)
                     self.aftersteps_list.append(steps.Trigger(


             reply	other threads:[~2022-01-18 19:17 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-18 19:16 Magnus Granberg [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-10-16 20:50 [gentoo-commits] proj/tinderbox-cluster:master commit in: buildbot_gentoo_ci/steps/ Magnus Granberg
2024-03-31 19:40 Magnus Granberg
2024-03-31 19:40 Magnus Granberg
2024-03-23 14:13 Magnus Granberg
2024-03-21 16:56 Magnus Granberg
2024-03-19 17:19 Magnus Granberg
2024-03-17 20:40 Magnus Granberg
2024-03-16  8:49 Magnus Granberg
2024-02-05 18:54 Magnus Granberg
2024-02-04 11:32 Magnus Granberg
2024-02-04  9:49 Magnus Granberg
2024-02-03 10:02 Magnus Granberg
2023-07-26  9:23 Magnus Granberg
2023-06-10 10:08 Magnus Granberg
2023-06-05  8:09 Magnus Granberg
2023-06-05  8:09 Magnus Granberg
2023-05-08 20:19 Magnus Granberg
2023-03-10 22:36 Magnus Granberg
2023-03-10 22:36 Magnus Granberg
2023-03-10  1:47 Magnus Granberg
2023-02-28 21:41 Magnus Granberg
2023-02-28 21:41 Magnus Granberg
2022-09-25 11:46 Magnus Granberg
2022-08-10 21:51 Magnus Granberg
2022-08-05 18:32 Magnus Granberg
2022-07-30 22:40 Magnus Granberg
2022-07-27 11:02 Magnus Granberg
2022-07-27 11:02 Magnus Granberg
2022-07-27 11:02 Magnus Granberg
2022-07-27 11:02 Magnus Granberg
2022-07-26 11:54 Magnus Granberg
2022-07-13 20:01 Magnus Granberg
2022-07-08 21:54 Magnus Granberg
2022-07-06 18:44 Magnus Granberg
2022-07-04 17:44 Magnus Granberg
2022-06-28 23:26 Magnus Granberg
2022-06-01  0:19 Magnus Granberg
2022-04-22 12:34 Magnus Granberg
2022-01-28 10:09 Magnus Granberg
2022-01-24  8:41 Magnus Granberg
2022-01-24  0:42 Magnus Granberg
2022-01-22 20:50 Magnus Granberg
2022-01-18 20:20 Magnus Granberg
2022-01-18 19:38 Magnus Granberg
2022-01-08 17:25 Magnus Granberg
2021-11-01  2:22 Magnus Granberg
2021-10-23 22:26 Magnus Granberg
2021-10-23 22:24 Magnus Granberg
2021-10-06  1:35 Magnus Granberg
2021-10-02 20:52 Magnus Granberg
2021-09-28 22:16 Magnus Granberg
2021-09-22  0:04 Magnus Granberg
2021-09-21  1:29 Magnus Granberg
2021-09-20 23:28 Magnus Granberg
2021-09-07  0:46 Magnus Granberg
2021-07-17  8:14 Magnus Granberg
2021-05-18  8:55 Magnus Granberg
2021-04-26 20:26 Magnus Granberg
2021-04-20  7:05 Magnus Granberg
2021-04-13 19:03 Magnus Granberg
2021-04-02 22:12 Magnus Granberg
2021-04-02 22:12 Magnus Granberg
2021-04-02 22:12 Magnus Granberg
2021-04-02 22:12 Magnus Granberg
2021-03-29  0:34 Magnus Granberg
2021-03-29  0:34 Magnus Granberg
2021-03-20 13:42 Magnus Granberg
2021-03-20 13:42 Magnus Granberg
2021-03-20 13:42 Magnus Granberg
2021-02-28 18:48 Magnus Granberg
2021-02-24 21:27 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=1642533404.1fc28f8dc77b5ef0c9d2d6eac054d91b455d9048.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