fix: evaluate.sh detects docker compose vs docker-compose binary; red-team-sweep.sh does not (#964)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
openhands 2026-03-18 18:57:36 +00:00
parent da672070a6
commit 33123cfd1d

View file

@ -19,6 +19,15 @@ TIMEOUT_PER="${1:-3600}"
log() { echo "[sweep $(date -u +%H:%M:%S)] $*"; } log() { echo "[sweep $(date -u +%H:%M:%S)] $*"; }
die() { log "FATAL: $*" >&2; exit 1; } 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" [[ -f "$INJECT" ]] || die "inject.sh not found at $INJECT"
mkdir -p "$ATTACKS_OUT" mkdir -p "$ATTACKS_OUT"
@ -51,7 +60,7 @@ SMOKE_SEED="${seeds[$SMOKE_IDX]}"
SMOKE_NAME=$(basename "$SMOKE_SEED" .push3) SMOKE_NAME=$(basename "$SMOKE_SEED" .push3)
log "Smoke test: $SMOKE_NAME" log "Smoke test: $SMOKE_NAME"
cp "$OPT_SOL" "${OPT_SOL}.sweep-backup" 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" 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" (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" log "DONE $seed_name"
# 6. Teardown — poll until all containers have exited (exponential backoff, no fixed delay) # 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 )) _deadline=$(( $(date +%s) + 30 ))
_backoff_ms=100 _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 if [[ $(date +%s) -ge $_deadline ]]; then
log "WARNING: containers still present after 30s — proceeding anyway" log "WARNING: containers still present after 30s — proceeding anyway"
break break