1
0
mirror of https://git.yoctoproject.org/poky synced 2026-04-20 11:28:58 +00:00

oeqa: reproducible: Run diffoscope on saved output

If there are differing packages and they are being saved for review,
automatically run diffoscope on them and include the output in the saved
output. The output is currently done in HTML format since these are
typically published on a webpage by the autobuilder.

(From OE-Core rev: 6e1d5e8b58f0940ba6dfd99536159dd974e6f24c)

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Joshua Watt
2020-02-11 21:14:35 -06:00
committed by Richard Purdie
parent 2c3b751a12
commit d59bfa1334

View File

@@ -1,7 +1,7 @@
#
# SPDX-License-Identifier: MIT
#
# Copyright 2019 by Garmin Ltd. or its subsidiaries
# Copyright 2019-2020 by Garmin Ltd. or its subsidiaries
from oeqa.selftest.case import OESelftestTestCase
from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars
@@ -167,10 +167,16 @@ class ReproducibleTests(OESelftestTestCase):
return d
def test_reproducible_builds(self):
def strip_topdir(s):
if s.startswith(self.topdir):
return s[len(self.topdir):]
return s
# Build native utilities
self.write_config('')
bitbake("diffutils-native -c addto_recipe_sysroot")
bitbake("diffoscope-native diffutils-native -c addto_recipe_sysroot")
diffutils_sysroot = get_bb_var("RECIPE_SYSROOT_NATIVE", "diffutils-native")
diffoscope_sysroot = get_bb_var("RECIPE_SYSROOT_NATIVE", "diffoscope-native")
if self.save_results:
os.makedirs(self.save_results, exist_ok=True)
@@ -206,18 +212,22 @@ class ReproducibleTests(OESelftestTestCase):
if self.save_results:
for d in result.different:
self.copy_file(d.reference, '/'.join([save_dir, d.reference]))
self.copy_file(d.test, '/'.join([save_dir, d.test]))
self.copy_file(d.reference, '/'.join([save_dir, 'packages', strip_topdir(d.reference)]))
self.copy_file(d.test, '/'.join([save_dir, 'packages', strip_topdir(d.test)]))
if result.missing or result.different:
fails.append("The following %s packages are missing or different: %s" %
(c, '\n'.join(r.test for r in (result.missing + result.different))))
if fails:
self.fail('\n'.join(fails))
# Clean up empty directories
if self.save_results:
if not os.listdir(save_dir):
os.rmdir(save_dir)
else:
self.logger.info('Running diffoscope')
runCmd(['diffoscope', '--no-default-limits', '--exclude-directory-metadata', '--html-dir', 'diff-html', 'reproducibleA', 'reproducibleB'],
native_sysroot=diffoscope_sysroot, ignore_status=True, cwd=os.path.join(save_dir, 'packages'))
if fails:
self.fail('\n'.join(fails))