commit: 81e7f0bdd56bf11fdbc0990191273ad59c1a3b01 Author: Magnus Granberg <zorry <AT> gentoo <DOT> org> AuthorDate: Sun Apr 4 20:29:38 2021 +0000 Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org> CommitDate: Sun Apr 4 20:29:38 2021 +0000 URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=81e7f0bd
Add support for Change USE, one use only Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org> buildbot_gentoo_ci/config/buildfactorys.py | 2 +- buildbot_gentoo_ci/steps/builders.py | 58 ++++++++++++++++++++++++++---- buildbot_gentoo_ci/steps/portage.py | 1 + 3 files changed, 54 insertions(+), 7 deletions(-) diff --git a/buildbot_gentoo_ci/config/buildfactorys.py b/buildbot_gentoo_ci/config/buildfactorys.py index 6e8baf6..fddfa2b 100644 --- a/buildbot_gentoo_ci/config/buildfactorys.py +++ b/buildbot_gentoo_ci/config/buildfactorys.py @@ -120,7 +120,7 @@ def run_build_request(): # setup env f.addStep(portage.SetEnvDefault()) # setup package.* - #f.addStep(portage.SetPackageDefault()) + f.addStep(portage.SetPackageDefault()) # setup files in /etc if needed # run --regen if needed on repo # update packages before any tests diff --git a/buildbot_gentoo_ci/steps/builders.py b/buildbot_gentoo_ci/steps/builders.py index b28d7e5..96572c0 100644 --- a/buildbot_gentoo_ci/steps/builders.py +++ b/buildbot_gentoo_ci/steps/builders.py @@ -19,6 +19,7 @@ def PersOutputOfEmerge(rc, stdout, stderr): emerge_output['rc'] = rc emerge_output['preserved_libs'] = False emerge_output['depclean'] = False + emerge_output['change_use'] = False package_dict = {} log_path_list = [] print(stderr) @@ -82,7 +83,20 @@ def PersOutputOfEmerge(rc, stdout, stderr): # split the lines #FIXME: Handling of stderr output for line in stderr.split('\n'): - pass + if 'Change USE:' in line: + line_list = line.split(' ') + change_use_list = [] + # get cpv + cpv_split = line_list[1].split(':') + change_use_list.append(cpv_split[0]) + # add use flags + if line_list[4].startswith('+') or line_list[4].startswith('-'): + # we only support one for now + if line_list[4].endswith(')'): + change_use_list.append(line_list[4].replace(')', '')) + else: + change_use_list = False + emerge_output['change_use'] = change_use_list return { 'emerge_output' : emerge_output } @@ -209,6 +223,7 @@ class SetupPropertys(BuildStep): self.setProperty('cpv_build', False, 'cpv_build') self.setProperty('pkg_check_log_data', None, 'pkg_check_log_data') self.setProperty('faild_version_data', None, 'faild_version_data') + self.setProperty('rerun', 0, 'rerun') print(self.getProperty("buildnumber")) if self.getProperty('project_build_data') is None: project_build_data = {} @@ -268,13 +283,13 @@ class RunEmerge(BuildStep): name = 'RunEmerge' description = 'Running' descriptionDone = 'Ran' - descriptionSuffix = None haltOnFailure = True flunkOnFailure = True def __init__(self, step=None,**kwargs): self.step = step super().__init__(**kwargs) + self.descriptionSuffix = self.step @defer.inlineCallbacks def run(self): @@ -388,7 +403,6 @@ class RunEmerge(BuildStep): cpv = self.getProperty("cpv") c = yield catpkgsplit(cpv)[0] p = yield catpkgsplit(cpv)[1] - shell_commad_list.append('-p') shell_commad_list.append('=' + self.getProperty('cpv')) # we don't use the bin for the requsted cpv shell_commad_list.append('--usepkg-exclude') @@ -398,6 +412,7 @@ class RunEmerge(BuildStep): shell_commad_list.append('virtual') shell_commad_list.append('--buildpkg-exclude') shell_commad_list.append('acct-*') + shell_commad_list.append('-p') aftersteps_list.append( steps.SetPropertyFromCommandNewStyle( command=shell_commad_list, @@ -444,13 +459,13 @@ class CheckEmergeLogs(BuildStep): name = 'CheckLogs' description = 'Running' descriptionDone = 'Ran' - descriptionSuffix = None haltOnFailure = True flunkOnFailure = True def __init__(self, step=None,**kwargs): self.step = step super().__init__(**kwargs) + self.descriptionSuffix = self.step @defer.inlineCallbacks def run(self): @@ -480,10 +495,41 @@ class CheckEmergeLogs(BuildStep): print(self.getProperty('cpv_build')) #FIXME: - # update package.* if needed and rerun pre-build max X times + # update package.* if needed and rerun pre-build max 3 times if self.step == 'pre-build': print(emerge_output) - + if self.getProperty('rerun') <= 3: + # 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 + # read man emerge for more + if emerge_output['change_use']: + # add a zz file for autounmask use + separator = '\n' + separator2 = ' ' + change_use_list = [] + cpv = emerge_output['change_use'][0] + c = yield catpkgsplit(cpv)[0] + p = yield catpkgsplit(cpv)[1] + change_use_list.append(c + '/' + p) + # we only support one use + use_flag = emerge_output['change_use'][1] + if use_flag.startswith('+'): + change_use_list.append(use_flag.replace('+', '')) + else: + change_use_list.append(use_flag) + change_use_string = separator2.join(change_use_list) + aftersteps_list.append( + steps.StringDownload(change_use_string + separator, + workerdest='zz_autouse' + str(self.getProperty('rerun')), + workdir='/etc/portage/package.use/') + ) + # rerun + aftersteps_list.append(RunEmerge(step='pre-build')) + self.setProperty('rerun', self.getProperty('rerun') + 1, 'rerun') + else: + # trigger parse_build_log with info about pre-build and it fail + pass #FIXME: # Look for FAILURE and logname and download needed logfile and # trigger a logparser diff --git a/buildbot_gentoo_ci/steps/portage.py b/buildbot_gentoo_ci/steps/portage.py index d66c952..7822af1 100644 --- a/buildbot_gentoo_ci/steps/portage.py +++ b/buildbot_gentoo_ci/steps/portage.py @@ -286,6 +286,7 @@ class SetPackageDefault(BuildStep): aftersteps_list = [] packagedir_list = [] packagedir_list.append('env') + packagedir_list.append('use') #FIXME: # get list what dir we need to make from db # create the dirs