diff --git a/scripts/harb-evaluator/red-team-sweep.sh b/scripts/harb-evaluator/red-team-sweep.sh index cea8a9d..81e9223 100755 --- a/scripts/harb-evaluator/red-team-sweep.sh +++ b/scripts/harb-evaluator/red-team-sweep.sh @@ -19,6 +19,15 @@ TIMEOUT_PER="${1:-3600}" log() { echo "[sweep $(date -u +%H:%M:%S)] $*"; } die() { log "FATAL: $*" >&2; exit 1; } +# ── Detect docker compose command (plugin vs legacy standalone) ──────── +if docker compose version &>/dev/null 2>&1; then + COMPOSE_CMD="docker compose" +elif command -v docker-compose &>/dev/null; then + COMPOSE_CMD="docker-compose" +else + die "docker compose not found. Install Docker with the compose plugin." +fi + [[ -f "$INJECT" ]] || die "inject.sh not found at $INJECT" mkdir -p "$ATTACKS_OUT" @@ -51,7 +60,7 @@ SMOKE_SEED="${seeds[$SMOKE_IDX]}" SMOKE_NAME=$(basename "$SMOKE_SEED" .push3) log "Smoke test: $SMOKE_NAME" cp "$OPT_SOL" "${OPT_SOL}.sweep-backup" -trap 'cp "${OPT_SOL}.sweep-backup" "$OPT_SOL" 2>/dev/null; rm -f "${OPT_SOL}.sweep-backup"; docker compose -f "$REPO_ROOT/docker-compose.yml" down -v 2>/dev/null || true' EXIT +trap 'cp "${OPT_SOL}.sweep-backup" "$OPT_SOL" 2>/dev/null; rm -f "${OPT_SOL}.sweep-backup"; $COMPOSE_CMD -f "$REPO_ROOT/docker-compose.yml" down -v 2>/dev/null || true' EXIT bash "$INJECT" "$SMOKE_SEED" "$OPT_SOL" || die "Smoke test inject failed for $SMOKE_NAME" (cd "$REPO_ROOT/onchain" && forge build --silent 2>&1) || die "Smoke test compile failed for $SMOKE_NAME" @@ -290,10 +299,10 @@ PYEOF log "DONE $seed_name" # 6. Teardown — poll until all containers have exited (exponential backoff, no fixed delay) - docker compose -f "$REPO_ROOT/docker-compose.yml" down -v 2>/dev/null || true + $COMPOSE_CMD -f "$REPO_ROOT/docker-compose.yml" down -v 2>/dev/null || true _deadline=$(( $(date +%s) + 30 )) _backoff_ms=100 - while [[ -n "$(docker compose -f "$REPO_ROOT/docker-compose.yml" ps --quiet 2>/dev/null)" ]]; do + while [[ -n "$($COMPOSE_CMD -f "$REPO_ROOT/docker-compose.yml" ps --quiet 2>/dev/null)" ]]; do if [[ $(date +%s) -ge $_deadline ]]; then log "WARNING: containers still present after 30s — proceeding anyway" break