from pathlib import Path import re import sys root = Path(__file__).resolve().parents[1] text_files = [ *root.glob("core/**/*.c"), *root.glob("drivers/**/*.c"), *root.glob("mm/**/*.c"), *root.glob("arch/**/*.c"), *root.glob("guest/**/*.c"), *root.glob("include/**/*.h"), *root.glob("tools/**/*.py"), *root.glob("scripts/**/*.py"), root / "Makefile", root / "README.md", ] blocked = ["HV_" + "VERSION", "0" + ".1.0", "get_hv_" + "version"] for path in text_files: text = path.read_text() if any(item in text for item in blocked): print(f"project versioning residue in {path.relative_to(root)}") sys.exit(1) for path in [*root.glob("core/**/*.c"), *root.glob("drivers/**/*.c"), *root.glob("mm/**/*.c"), *root.glob("arch/**/*.c"), *root.glob("guest/**/*.c"), *root.glob("include/**/*.h")]: text = path.read_text() if re.search(r"/\*|//", text): print(f"source comment residue in {path.relative_to(root)}") sys.exit(1) config = (root / "include/hv/config.h").read_text() if "#define CONFIG_MONITOR_MUTATION 0" not in config: print("monitor mutation must default off") sys.exit(1) monitor = (root / "core/monitor.c").read_text() required = [ "write64 disabled", "unmap disabled", "irq disabled", "profile disabled", "restore disabled", "log clear disabled", ] for item in required: if item not in monitor: print(f"missing monitor gate: {item}") sys.exit(1) makefile = (root / "Makefile").read_text() for target in ["test-host", "test-diagnostic-smoke", "test-linux-smoke", "ci", "release"]: if f"{target}:" not in makefile: print(f"missing target {target}") sys.exit(1)