diff --git a/.github/skills/memory-safety/scripts/memory_safety.py b/.github/skills/memory-safety/scripts/memory_safety.py index fa87f8f8c..10fb8ec82 100644 --- a/.github/skills/memory-safety/scripts/memory_safety.py +++ b/.github/skills/memory-safety/scripts/memory_safety.py @@ -18,7 +18,7 @@ import time from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "shared")) -from z3db import Z3DB, setup_logging +from z3db import Z3DB, require_repo_root, setup_logging logger = logging.getLogger("z3agent") @@ -52,19 +52,6 @@ def check_dependencies(): sys.exit(1) -def find_repo_root() -> Path: - d = Path.cwd() - for _ in range(10): - if (d / "CMakeLists.txt").exists() and (d / "src").is_dir(): - return d - parent = d.parent - if parent == d: - break - d = parent - logger.error("could not locate Z3 repository root") - sys.exit(1) - - def build_is_configured(build_dir: Path, sanitizer: str) -> bool: """Check whether the build directory already has a matching cmake config.""" cache = build_dir / "CMakeCache.txt" @@ -220,7 +207,7 @@ def main(): setup_logging(args.debug) check_dependencies() - repo_root = find_repo_root() + repo_root = require_repo_root() sanitizers = ["asan", "ubsan"] if args.sanitizer == "both" else [args.sanitizer] all_findings = [] diff --git a/.github/skills/shared/z3db.py b/.github/skills/shared/z3db.py index f0f7e3ea2..0d49cb7cf 100644 --- a/.github/skills/shared/z3db.py +++ b/.github/skills/shared/z3db.py @@ -3,7 +3,7 @@ z3db: shared library and CLI for Z3 skill scripts. Library usage: - from z3db import Z3DB, find_z3, run_z3 + from z3db import Z3DB, find_z3, find_repo_root, require_repo_root, run_z3 CLI usage: python z3db.py init @@ -131,7 +131,7 @@ class Z3DB: """Write to stderr and to the interaction_log table.""" getattr(logger, level, logger.info)(message) self.conn.execute( - "INSERT INTO interaction_log (run_id, level, message) " "VALUES (?, ?, ?)", + "INSERT INTO interaction_log (run_id, level, message) VALUES (?, ?, ?)", (run_id, level, message), ) self.conn.commit() @@ -182,7 +182,7 @@ def find_z3(hint: str = None) -> str: if hint: candidates.append(hint) - repo_root = _find_repo_root() + repo_root = find_repo_root() if repo_root: for build_dir in ["build", "build/release", "build/debug"]: candidates.append(str(repo_root / build_dir / "z3")) @@ -201,7 +201,8 @@ def find_z3(hint: str = None) -> str: sys.exit(1) -def _find_repo_root() -> Optional[Path]: +def find_repo_root() -> Optional[Path]: + """Best-effort search for the Z3 repository root from the current directory.""" d = Path.cwd() for _ in range(10): if (d / "CMakeLists.txt").exists() and (d / "src").is_dir(): @@ -213,6 +214,15 @@ def _find_repo_root() -> Optional[Path]: return None +def require_repo_root() -> Path: + """Return the Z3 repository root or exit the process if it is not found.""" + repo_root = find_repo_root() + if repo_root is None: + logger.error("could not locate Z3 repository root") + sys.exit(1) + return repo_root + + def run_z3( formula: str, z3_bin: str = None, diff --git a/.github/skills/static-analysis/scripts/static_analysis.py b/.github/skills/static-analysis/scripts/static_analysis.py index 65f87e731..f93e43692 100644 --- a/.github/skills/static-analysis/scripts/static_analysis.py +++ b/.github/skills/static-analysis/scripts/static_analysis.py @@ -176,9 +176,7 @@ def print_findings(findings: list): return for f in findings: - label = f["category"] - if f["type"]: - label = f["type"] + label = f["type"] or f["category"] print(f"[{label}] {f['file']}:{f['line']}: {f['description']}") print()