From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <gentoo-commits+bounces-1425494-garchives=archives.gentoo.org@lists.gentoo.org> Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 49C46158094 for <garchives@archives.gentoo.org>; Fri, 5 Aug 2022 18:32:30 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 26608E09D5; Fri, 5 Aug 2022 18:32:29 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id DEA06E09F7 for <gentoo-commits@lists.gentoo.org>; Fri, 5 Aug 2022 18:32:28 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id D3C82341124 for <gentoo-commits@lists.gentoo.org>; Fri, 5 Aug 2022 18:32:27 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 1AEBF543 for <gentoo-commits@lists.gentoo.org>; Fri, 5 Aug 2022 18:32:26 +0000 (UTC) From: "Magnus Granberg" <zorry@gentoo.org> To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Magnus Granberg" <zorry@gentoo.org> Message-ID: <1659724331.3791e957fd2bb28f350f0ff7399c0c6e43b561d6.zorry@gentoo> Subject: [gentoo-commits] proj/tinderbox-cluster:master commit in: buildbot_gentoo_ci/steps/ X-VCS-Repository: proj/tinderbox-cluster X-VCS-Files: buildbot_gentoo_ci/steps/builders.py X-VCS-Directories: buildbot_gentoo_ci/steps/ X-VCS-Committer: zorry X-VCS-Committer-Name: Magnus Granberg X-VCS-Revision: 3791e957fd2bb28f350f0ff7399c0c6e43b561d6 X-VCS-Branch: master Date: Fri, 5 Aug 2022 18:32:26 +0000 (UTC) Precedence: bulk List-Post: <mailto:gentoo-commits@lists.gentoo.org> List-Help: <mailto:gentoo-commits+help@lists.gentoo.org> List-Unsubscribe: <mailto:gentoo-commits+unsubscribe@lists.gentoo.org> List-Subscribe: <mailto:gentoo-commits+subscribe@lists.gentoo.org> List-Id: Gentoo Linux mail <gentoo-commits.gentoo.org> X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 8e6ee392-1e54-4043-8f41-e69473fe6305 X-Archives-Hash: 74cac264280384127d9fcb3d62582344 commit: 3791e957fd2bb28f350f0ff7399c0c6e43b561d6 Author: Magnus Granberg <zorry <AT> gentoo <DOT> org> AuthorDate: Fri Aug 5 18:32:11 2022 +0000 Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org> CommitDate: Fri Aug 5 18:32:11 2022 +0000 URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=3791e957 Add haskell-updater for haskell packages Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org> buildbot_gentoo_ci/steps/builders.py | 147 ++++++++++++++++++++++------------- 1 file changed, 91 insertions(+), 56 deletions(-) diff --git a/buildbot_gentoo_ci/steps/builders.py b/buildbot_gentoo_ci/steps/builders.py index a54c68c..3b6a8d0 100644 --- a/buildbot_gentoo_ci/steps/builders.py +++ b/buildbot_gentoo_ci/steps/builders.py @@ -4,6 +4,7 @@ import os import re import json +from pathlib import Path from portage.versions import catpkgsplit, cpv_getversion from portage.dep import dep_getcpv, dep_getslot, dep_getrepo @@ -90,6 +91,8 @@ def PersOutputOfEmerge(rc, stdout, stderr): # split the lines #FIXME: Handling of stderr output stderr_line_list = [] + if stderr != '' and not emerge_output['failed']: + emerge_output['failed'] = True for line in stderr.split('\n'): if 'Change USE:' in line: line_list = line.split(' ') @@ -340,6 +343,7 @@ class SetupPropertys(BuildStep): 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') + self.setProperty('build_env', {}, 'build_env') self.descriptionDone = ' '.join([self.getProperty("cpv"), 'for project', self.getProperty('project_data')['name']]) return SUCCESS @@ -355,7 +359,6 @@ class RunEmerge(BuildStep): super().__init__(**kwargs) self.descriptionSuffix = self.step self.name = 'Setup emerge for ' + self.step + ' step' - self.build_env = {} self.build_timeout = 0 @defer.inlineCallbacks @@ -374,25 +377,28 @@ class RunEmerge(BuildStep): aftersteps_list = [] #FIXME: Set build timeout in config self.build_timeout = 6600 - # set env - # https://bugs.gentoo.org/683118 - # export TERM=linux - # export TERMINFO=/etc/terminfo - self.build_env['TERM'] = 'linux' - self.build_env['TERMINFO'] = '/etc/terminfo' - # Lang - self.build_env['LANG'] = 'C.utf8' - self.build_env['LC_MESSAGES'] = 'C' - # no color - self.build_env['CARGO_TERM_COLOR'] = 'never' - self.build_env['GCC_COLORS'] = '0' - self.build_env['OCAML_COLOR'] = 'never' - self.build_env['PY_FORCE_COLOR'] = '0' - self.build_env['PYTEST_ADDOPTS'] = '--color=no' - self.build_env['NO_COLOR'] = '1' - # not all terms support urls - self.build_env['GCC_URLS'] = 'no' - self.build_env['TERM_URLS'] = 'no' + if self.step == 'update': + # set env + build_env = {} + # https://bugs.gentoo.org/683118 + # export TERM=linux + # export TERMINFO=/etc/terminfo + build_env['TERM'] = 'linux' + build_env['TERMINFO'] = '/etc/terminfo' + # Lang + build_env['LANG'] = 'C.utf8' + build_env['LC_MESSAGES'] = 'C' + # no color + build_env['CARGO_TERM_COLOR'] = 'never' + build_env['GCC_COLORS'] = '0' + build_env['OCAML_COLOR'] = 'never' + build_env['PY_FORCE_COLOR'] = '0' + build_env['PYTEST_ADDOPTS'] = '--color=no' + build_env['NO_COLOR'] = '1' + # not all terms support urls + build_env['GCC_URLS'] = 'no' + build_env['TERM_URLS'] = 'no' + self.setProperty('build_env', build_env, 'build_env') if self.step == 'pre-update': shell_commad_list.append('-uDN') @@ -432,6 +438,7 @@ class RunEmerge(BuildStep): strip=True, extract_fn=PersOutputOfEmerge, workdir='/', + env=self.getProperty("build_env"), timeout=self.build_timeout )) aftersteps_list.append(CheckEmergeLogs('update')) @@ -548,7 +555,7 @@ class RunEmerge(BuildStep): strip=True, extract_fn=PersOutputOfEmerge, workdir='/', - env=self.build_env, + env=self.getProperty("build_env"), timeout=self.build_timeout )) aftersteps_list.append(CheckEmergeLogs('build')) @@ -682,11 +689,9 @@ class CheckEmergeLogs(BuildStep): @defer.inlineCallbacks def createDistDir(self): workdir = yield os.path.join(self.master.basedir, 'workers', self.getProperty('workername')) - self.aftersteps_list.append(steps.MasterShellCommand( - name = 'Make directory for Uploaded files', - command = ['mkdir', str(self.getProperty("buildnumber"))], - workdir = workdir - )) + check_dir = yield os.path.join(workdir, str(self.getProperty("buildnumber"))) + if not Path(check_dir).is_dir(): + yield Path(check_dir).mkdir(parents=True) def addFileUploade(self, sourcefile, destfile, name, url, urlText): self.aftersteps_list.append(steps.FileUpload( @@ -814,7 +819,7 @@ class CheckEmergeLogs(BuildStep): print(emerge_output) # this should be set in the config retrays = 5 - if self.getProperty('rerun') <= retrays: + if self.getProperty('rerun') <= retrays and self.faild_cpv: # when we need to change use. we could rerun pre-build with # --autounmask-use=y --autounmask-write=y --autounmask-only=y # but we use --binpkg--respect-use=y in EMERGE_DEFAULT_OPTS @@ -895,7 +900,9 @@ class CheckEmergeLogs(BuildStep): self.aftersteps_list.append(CheckEmergeLogs('extra-build')) else: # trigger parse_build_log with info about pre-build and it fail - pass + if self.faild_cpv: + pass + self.setProperty('rerun', 0, 'rerun') # Make Logfile dict if self.step == 'extra-build' or self.step == 'build': print(emerge_output) @@ -922,7 +929,9 @@ class CheckEmergeLogs(BuildStep): # trigger a logparser # local_log_path dir set in config # format /var/cache/portage/logs/build/gui-libs/egl-wayland-1.1.6:20210321-173525.log.gz + rebuild = False if self.step == 'build': + retrays = 1 # Find log for cpv that was requested or did failed if not log_dict == {}: # requested cpv @@ -934,36 +943,62 @@ class CheckEmergeLogs(BuildStep): self.log_data[cpv] = log_dict[cpv] yield self.getLogFile(cpv, log_dict) if self.faild_cpv: - # failed and build requested cpv - if cpv == self.faild_cpv: - faild_version_data = self.getProperty("version_data") - else: - # failed but not build requested cpv - 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.getBuildWorkDirs(self.faild_cpv) + c = yield catpkgsplit(self.faild_cpv)[0] + if c == 'dev-haskell': + rebuild = 'haskell' + if not rebuild or self.getProperty('rerun') >= retrays: + # failed and build requested cpv + if cpv == self.faild_cpv: + faild_version_data = self.getProperty("version_data") + else: + # failed but not build requested cpv + 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.getBuildWorkDirs(self.faild_cpv) + rebuild = False else: self.getEmergeFiles(cpv) - self.aftersteps_list.append(steps.Trigger( - name = 'Setup properties for log parser and trigger it', - schedulerNames=['parse_build_log'], - waitForFinish=False, - updateSourceStamp=False, - set_properties={ - 'cpv' : self.getProperty("cpv"), - 'faild_version_data' : faild_version_data, - 'project_build_data' : self.getProperty('project_build_data'), - 'log_build_data' : self.log_data, - 'pkg_check_log_data' : self.getProperty("pkg_check_log_data"), - 'repository_data' : self.getProperty('repository_data'), - 'faild_cpv' : self.faild_cpv, - 'step' : self.step, - 'build_workername' : self.getProperty('workername') - } - )) + if not rebuild: + self.aftersteps_list.append(steps.Trigger( + name = 'Setup properties for log parser and trigger it', + schedulerNames=['parse_build_log'], + waitForFinish=False, + updateSourceStamp=False, + set_properties={ + 'cpv' : self.getProperty("cpv"), + 'faild_version_data' : faild_version_data, + 'project_build_data' : self.getProperty('project_build_data'), + 'log_build_data' : self.log_data, + 'pkg_check_log_data' : self.getProperty("pkg_check_log_data"), + 'repository_data' : self.getProperty('repository_data'), + 'faild_cpv' : self.faild_cpv, + 'step' : self.step, + 'build_workername' : self.getProperty('workername') + } + )) + if rebuild: + #FIXME: Set build timeout in config + build_timeout = 6600 + shell_commad_list = [] + # rebuild broken haskell + if rebuild == 'haskell': + shell_commad_list.append('haskell-updater') + shell_commad_list.append('--') + shell_commad_list.append('--usepkg=n') + if shell_commad_list != []: + self.aftersteps_list.append( + steps.ShellCommand( + command=shell_commad_list, + workdir='/', + env=self.getProperty("build_env"), + timeout=build_timeout + )) + self.aftersteps_list.append(RunEmerge(step='build')) + self.aftersteps_list.append(CheckEmergeLogs('build')) + self.setProperty('rerun', self.getProperty('rerun') + 1, 'rerun') if not self.step is None and self.aftersteps_list != []: yield self.build.addStepsAfterCurrentStep(self.aftersteps_list) return SUCCESS