Files
CASAN/packages/casan-harness/scripts/bash/verify-harness-reuse.sh
T

41 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# Verify CASAN Level 5 shared harness reuse across more than one project.
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/casan-paths.sh"
PROJECT_ROOT="$CASAN_APP_ROOT"
REGISTRY="$CASAN_HARNESS_ROOT/level5/project-registry.json"
PACKAGE="$CASAN_HARNESS_ROOT/level5/harness-package.json"
python - "$REGISTRY" "$PACKAGE" <<'PY'
import json
import os
import sys
registry = json.load(open(sys.argv[1], encoding="utf-8"))
package = json.load(open(sys.argv[2], encoding="utf-8"))
name = package["package"]
version = package["version"]
projects = [
p for p in registry["projects"]
if p.get("status") == "active"
and p.get("harness_package") == name and p.get("harness_version") == version
]
if len(projects) < 2:
raise SystemExit(f"HARNESS_REUSE_INSUFFICIENT package={name} version={version} count={len(projects)}")
roots = set()
required = ("domain-pack.yaml", "input", "golden-runs", "corpus", "traceability-map.json")
hub = os.path.abspath(os.path.join(os.path.dirname(registry_path := sys.argv[1]), "..", "..", ".."))
for project in projects:
root = project.get("domain_root", "")
if not root or root in roots:
raise SystemExit(f"HARNESS_REUSE_INVALID_DOMAIN_ROOT project={project.get('project_id')} root={root}")
roots.add(root)
full = os.path.join(hub, root)
missing = [entry for entry in required if not os.path.exists(os.path.join(full, entry))]
if missing:
raise SystemExit(f"HARNESS_REUSE_DOMAIN_INCOMPLETE project={project.get('project_id')} missing={','.join(missing)}")
print(f"HARNESS_REUSE_VALID package={name} version={version} project_count={len(projects)} active_projects={','.join(p['project_id'] for p in projects)}")
PY