41 lines
1.7 KiB
Bash
Executable File
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/config/project-registry.json"
|
|
PACKAGE="$CASAN_HARNESS_ROOT/config/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
|