From c404b8895904abdb7b67aeaf854805ab40bc2c45 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 24 Oct 2019 13:09:33 -0500 Subject: reproducible: Allow configuration of saved debug output If OEQA_DEBUGGING_SAVED_OUTPUT is set in the environment, use this location to store reproducibile build failure output. This aids debugging on the YP autobuilder in particular. Use a date in the directory name to make it easier to find failure output. Also clean up empty directories as they're unnecessary distracting noise. (From OE-Core rev: 138ed4aa96ec5069f9f7fd02994a42452dbccc2d) Signed-off-by: Richard Purdie --- meta/lib/oeqa/selftest/cases/reproducible.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'meta/lib/oeqa/selftest/cases/reproducible.py') diff --git a/meta/lib/oeqa/selftest/cases/reproducible.py b/meta/lib/oeqa/selftest/cases/reproducible.py index 9c715ef8eb..c261076666 100644 --- a/meta/lib/oeqa/selftest/cases/reproducible.py +++ b/meta/lib/oeqa/selftest/cases/reproducible.py @@ -15,6 +15,7 @@ import tempfile import shutil import stat import os +import datetime MISSING = 'MISSING' DIFFERENT = 'DIFFERENT' @@ -80,6 +81,9 @@ class ReproducibleTests(OESelftestTestCase): package_classes = ['deb', 'ipk'] images = ['core-image-minimal', 'core-image-sato', 'core-image-full-cmdline'] save_results = False + if 'OEQA_DEBUGGING_SAVED_OUTPUT' in os.environ: + save_results = os.environ['OEQA_DEBUGGING_SAVED_OUTPUT'] + # This variable controls if one of the test builds is allowed to pull from # an sstate cache/mirror. The other build is always done clean as a point of # comparison. @@ -168,7 +172,9 @@ class ReproducibleTests(OESelftestTestCase): diffutils_sysroot = get_bb_var("RECIPE_SYSROOT_NATIVE", "diffutils-native") if self.save_results: - save_dir = tempfile.mkdtemp(prefix='oe-reproducible-') + os.makedirs(self.save_results, exist_ok=True) + datestr = datetime.datetime.now().strftime('%Y%m%d') + save_dir = tempfile.mkdtemp(prefix='oe-reproducible-%s-' % datestr, dir=self.save_results) os.chmod(save_dir, stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH) self.logger.info('Non-reproducible packages will be copied to %s', save_dir) @@ -204,3 +210,8 @@ class ReproducibleTests(OESelftestTestCase): self.fail("The following %s packages are missing or different: %s" % (c, ' '.join(r.test for r in (result.missing + result.different)))) + # Clean up empty directories + if self.save_results: + if not os.listdir(save_dir): + os.rmdir(save_dir) + -- cgit v1.2.3-54-g00ecf