[oe-commits] [openembedded-core] 109/122: image: add do_image_qa task to run QA checks on the constructed image

git at git.openembedded.org git at git.openembedded.org
Tue Jul 19 14:07:29 UTC 2016


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

commit 0e5ee999e1428fea73158bd4c6bd87b97bf9d2bf
Author: Joshua Lock <joshua.g.lock at intel.com>
AuthorDate: Thu Jul 14 14:36:32 2016 +0100

    image: add do_image_qa task to run QA checks on the constructed image
    
    This task runs all functions in IMAGE_QA_COMMANDS after the image
    construction has completed in order to validate the resulting image.
    
    Image sanity checks should either be Python functions which raise
    bb.build.FuncFailed on failure or shell functions with return a
    non-zero exit code.
    
    Python functions may instead raise an oe.utils.ImageQAFailed
    Exception which takes an extra argument, a description of the
    failure.
    
       python image_check_python_ok () {
           if True:
               raise bb.build.FuncFailed('This check always fails')
           else:
               bb.note("Nothing to see here")
       }
    
       image_check_shell_ok () {
           if true
               exit 1
           else
               exit 0
           fi
       }
    
    [YOCTO #9448]
    
    Signed-off-by: Joshua Lock <joshua.g.lock at intel.com>
    Signed-off-by: Ross Burton <ross.burton at intel.com>
---
 meta/classes/image.bbclass | 30 ++++++++++++++++++++++++++++++
 meta/lib/oe/utils.py       | 13 +++++++++++++
 2 files changed, 43 insertions(+)

diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
index 30dfd64..af789f4 100644
--- a/meta/classes/image.bbclass
+++ b/meta/classes/image.bbclass
@@ -275,6 +275,36 @@ do_image_complete[dirs] = "${TOPDIR}"
 do_image_complete[umask] = "022"
 addtask do_image_complete after do_image before do_build
 
+# Add image-level QA/sanity checks to IMAGE_QA_COMMANDS
+#
+# IMAGE_QA_COMMANDS += " \
+#     image_check_everything_ok \
+# "
+# This task runs all functions in IMAGE_QA_COMMANDS after the image
+# construction has completed in order to validate the resulting image.
+fakeroot python do_image_qa () {
+    from oe.utils import ImageQAFailed
+
+    qa_cmds = (d.getVar('IMAGE_QA_COMMANDS', True) or '').split()
+    qamsg = ""
+
+    for cmd in qa_cmds:
+        try:
+            bb.build.exec_func(cmd, d)
+        except oe.utils.ImageQAFailed as e:
+            qamsg = qamsg + '\tImage QA function %s failed: %s\n' % (e.name, e.description)
+        except bb.build.FuncFailed as e:
+            qamsg = qamsg + '\tImage QA function %s failed' % e.name
+            if e.logfile:
+                qamsg = qamsg + ' (log file is located at %s)' % e.logfile
+            qamsg = qamsg + '\n'
+
+    if qamsg:
+        imgname = d.getVar('IMAGE_NAME', True)
+        bb.fatal("QA errors found whilst validating image: %s\n%s" % (imgname, qamsg))
+}
+addtask do_image_qa after do_image_complete before do_build
+
 #
 # Write environment variables used by wic
 # to tmp/sysroots/<machine>/imgdata/<image>.env
diff --git a/meta/lib/oe/utils.py b/meta/lib/oe/utils.py
index cecddc6..19db540 100644
--- a/meta/lib/oe/utils.py
+++ b/meta/lib/oe/utils.py
@@ -304,3 +304,16 @@ def write_ld_so_conf(d):
     with open(ldsoconf, "w") as f:
         f.write(d.getVar("base_libdir", True) + '\n')
         f.write(d.getVar("libdir", True) + '\n')
+
+class ImageQAFailed(bb.build.FuncFailed):
+    def __init__(self, description, name=None, logfile=None):
+        self.description = description
+        self.name = name
+        self.logfile=logfile
+
+    def __str__(self):
+        msg = 'Function failed: %s' % self.name
+        if self.description:
+            msg = msg + ' (%s)' % self.description
+
+        return msg

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


More information about the Openembedded-commits mailing list