#!/usr/bin/env bash # validate-collision-log.sh — Check build output for CollisionTracker findings # # Scans the build directory for any log files containing CollisionTracker # output ([COLLISION-ERROR] or [COLLISION-WARN] markers). The runtime # CollisionTracker runs during image assembly in redox_installer. # # Exit codes: # 0 — No collision errors found # 1 — Collision errors detected set -euo pipefail build_dir="${1:?Usage: validate-collision-log.sh }" errors=0 warnings=0 if [ -d "$build_dir" ]; then while IFS= read -r logfile; do file_errors=$(grep -c '\[COLLISION-ERROR\]' "$logfile" 2>/dev/null || true) file_warnings=$(grep -c '\[COLLISION-WARN\]' "$logfile" 2>/dev/null || true) if [ "$file_errors" -gt 0 ] || [ "$file_warnings" -gt 0 ]; then echo " $logfile: $file_errors error(s), $file_warnings warning(s)" errors=$((errors + file_errors)) warnings=$((warnings + file_warnings)) fi done < <(find "$build_dir" -name '*.log' -type f 2>/dev/null) fi echo "=== CollisionTracker log validation ===" echo " Errors: $errors, Warnings: $warnings" if [ "$errors" -gt 0 ]; then echo "FAILED: $errors collision error(s) in build logs" >&2 echo " The CollisionTracker detected init service or environment file collisions." >&2 echo " Fix: Move config [[files]] init services from /usr/lib/init.d/ to /etc/init.d/" >&2 exit 1 fi if [ "$warnings" -gt 0 ]; then echo "WARN: $warnings non-critical collision(s) detected (not blocking)" fi echo "PASSED: No collision errors"