[oe-commits] [openembedded-core] 01/09: oeqa: reproducible: Do two clean builds

git at git.openembedded.org git at git.openembedded.org
Fri Aug 30 16:11:03 UTC 2019


This is an automated email from the git hooks/post-receive script.

rpurdie pushed a commit to branch master
in repository openembedded-core.

commit e97c529bfa4e1d0038ea44f15ee3298003daf981
Author: Joshua Watt <jpewhacker at gmail.com>
AuthorDate: Thu Aug 29 10:31:06 2019 -0500

    oeqa: reproducible: Do two clean builds
    
    Perform two clean builds without sstate instead of one partial rebuild
    with sstate and one clean build without. There are some classes of
    reproducibility issues that this solves, and while we would like to
    resolve them in the long term the direction to do so is not currently
    clear.
    
    Signed-off-by: Joshua Watt <JPEWhacker at gmail.com>
    Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 meta/lib/oeqa/selftest/cases/reproducible.py | 48 ++++++++++++++++------------
 1 file changed, 28 insertions(+), 20 deletions(-)

diff --git a/meta/lib/oeqa/selftest/cases/reproducible.py b/meta/lib/oeqa/selftest/cases/reproducible.py
index c6cc0b7..b3bbb70 100644
--- a/meta/lib/oeqa/selftest/cases/reproducible.py
+++ b/meta/lib/oeqa/selftest/cases/reproducible.py
@@ -123,45 +123,53 @@ class ReproducibleTests(OESelftestTestCase):
     def test_reproducible_builds(self):
         capture_vars = ['DEPLOY_DIR_' + c.upper() for c in self.package_classes]
 
+        # Build native utilities
+        self.write_config('')
+        bitbake("diffutils-native -c addto_recipe_sysroot")
+        diffutils_sysroot = get_bb_var("RECIPE_SYSROOT_NATIVE", "diffutils-native")
+
+        # Reproducible builds should not pull from sstate or mirrors, but
+        # sharing DL_DIR is fine
         common_config = textwrap.dedent('''\
             INHERIT += "reproducible_build"
             PACKAGE_CLASSES = "%s"
+            SSTATE_DIR = "${TMPDIR}/sstate"
+            SSTATE_MIRROR = ""
             ''') % (' '.join('package_%s' % c for c in self.package_classes))
 
-        # Do an initial build. It's acceptable for this build to use sstate
-        self.write_config(common_config)
-        vars_reference = get_bb_vars(capture_vars)
-        bitbake(' '.join(self.images))
+        # Perform a build.
+        reproducibleA_tmp = os.path.join(self.topdir, 'reproducibleA', 'tmp')
+        if os.path.exists(reproducibleA_tmp):
+            bb.utils.remove(reproducibleA_tmp, recurse=True)
 
-        # Build native utilities
-        bitbake("diffutils-native -c addto_recipe_sysroot")
-        diffutils_sysroot = get_bb_var("RECIPE_SYSROOT_NATIVE", "diffutils-native")
+        self.write_config((textwrap.dedent('''\
+            TMPDIR = "%s"
+            ''') % reproducibleA_tmp) + common_config)
+        vars_A = get_bb_vars(capture_vars)
+        bitbake(' '.join(self.images))
 
-        reproducible_tmp = os.path.join(self.topdir, 'reproducible', 'tmp')
-        if os.path.exists(reproducible_tmp):
-            bb.utils.remove(reproducible_tmp, recurse=True)
+        # Perform another build.
+        reproducibleB_tmp = os.path.join(self.topdir, 'reproducibleB', 'tmp')
+        if os.path.exists(reproducibleB_tmp):
+            bb.utils.remove(reproducibleB_tmp, recurse=True)
 
-        # Perform another build. This build should *not* share sstate or pull
-        # from any mirrors, but sharing a DL_DIR is fine
         self.write_config((textwrap.dedent('''\
             TMPDIR = "%s"
-            SSTATE_DIR = "${TMPDIR}/sstate"
-            SSTATE_MIRROR = ""
-            ''') % reproducible_tmp) + common_config)
-        vars_test = get_bb_vars(capture_vars)
+            ''') % reproducibleB_tmp) + common_config)
+        vars_B = get_bb_vars(capture_vars)
         bitbake(' '.join(self.images))
 
-        # NOTE: The temp directory from the reproducible build is purposely
+        # NOTE: The temp directories from the reproducible build are purposely
         # kept after the build so it can be diffed for debugging.
 
         for c in self.package_classes:
             with self.subTest(package_class=c):
                 package_class = 'package_' + c
 
-                deploy_reference = vars_reference['DEPLOY_DIR_' + c.upper()]
-                deploy_test = vars_test['DEPLOY_DIR_' + c.upper()]
+                deploy_A = vars_A['DEPLOY_DIR_' + c.upper()]
+                deploy_B = vars_B['DEPLOY_DIR_' + c.upper()]
 
-                result = self.compare_packages(deploy_reference, deploy_test, diffutils_sysroot)
+                result = self.compare_packages(deploy_A, deploy_B, diffutils_sysroot)
 
                 self.logger.info('Reproducibility summary for %s: %s' % (c, result))
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list