diff options
-rw-r--r-- | meta/classes/image.bbclass | 30 | ||||
-rw-r--r-- | meta/lib/oe/utils.py | 13 |
2 files changed, 43 insertions, 0 deletions
diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index 30dfd64828..af789f4588 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 cecddc657f..19db540779 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 |