1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- #
- # Copyright OpenEmbedded Contributors
- #
- # SPDX-License-Identifier: MIT
- #
- # This class is used by the yocto-check-layer script for additional
- # per-recipe tests.
- #
- # It adds an anonymous python function with extra processing to all recipes,
- # globally inheriting this class isn't advisable - yocto-check-layer script
- # handles that during its signature dump
- # Ensure that recipes don't skip required QA checks as listed
- # in CHECKLAYER_REQUIRED_TESTS, defined by insane.bbclass
- def check_insane_skip(d):
- required_tests = set((d.getVar('CHECKLAYER_REQUIRED_TESTS') or '').split())
- packages = set((d.getVar('PACKAGES') or '').split())
- for package in packages:
- skip = set((d.getVar('INSANE_SKIP') or "").split() +
- (d.getVar('INSANE_SKIP:' + package) or "").split())
- skip_required = skip & required_tests
- if skip_required:
- oe.qa.write_error(" ".join(skip_required), 'Package %s is skipping required QA tests.' % package, d)
- bb.error("QA Issue: %s [%s]" % ('Package %s is skipping required QA tests.' % package, " ".join(skip_required)))
- d.setVar("QA_ERRORS_FOUND", "True")
- # Check that no tasks (with rare exceptions) between do_fetch and do_build
- # use the network.
- def check_network_flag(d):
- # BPN:task names that are allowed to reach the network, using fnmatch to compare.
- allowed = []
- # build-appliance-image uses pip at image time
- allowed += ["build-appliance-image:do_image"]
- def is_allowed(bpn, task):
- from fnmatch import fnmatch
- name = f"{bpn}:{task}"
- return any(fnmatch(name, pattern) for pattern in allowed)
- bpn = d.getVar("BPN")
- seen = set()
- stack = {"do_build"}
- while stack:
- task = stack.pop()
- if task == "do_fetch":
- continue
- seen.add(task)
- deps = d.getVarFlag(task, "deps") or []
- stack |= {d for d in deps if d not in seen}
- network = bb.utils.to_boolean(d.getVarFlag(task, "network"))
- if network and not is_allowed(bpn, task):
- bb.error(f"QA Issue: task {task} has network enabled")
- python () {
- check_insane_skip(d)
- check_network_flag(d)
- }
|