Merge pull request 'fix: evaluate.sh detects docker compose vs docker-compose binary; red-team-sweep.sh does not (#964)' (#971) from fix/issue-964 into master

This commit is contained in:
johba 2026-03-18 20:56:40 +01:00
commit 7842d787cd

View file

@ -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