who_need_help/scripts/e2e-run.sh

64 lines
1.5 KiB
Bash
Executable File

#!/bin/sh
set -eu
ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
cd "$ROOT"
"$ROOT/scripts/ensure-local-e2e-env.sh"
run_id="$(date -u +%Y%m%d%H%M%S)-$$"
project="who_need_help_e2e_$run_id"
output_dir="$ROOT/output/e2e/$run_id"
case "$project" in
who_need_help_e2e_*) ;;
*)
echo "Refusing unexpected E2E project name: $project" >&2
exit 1
;;
esac
mkdir -p "$output_dir"
export TRAEFIK_PROJECT_CONSTRAINT="$project"
export TRAEFIK_APP_NAME="who-need-help-e2e-$run_id"
export TRAEFIK_DOCKER_NETWORK="${project}_internal"
export E2E_OUTPUT_DIR="$output_dir"
export CODEX_SESSION_ID=${CODEX_SESSION_ID:-${CODEX_THREAD_ID:-local-e2e}}
compose() {
docker compose \
--project-name "$project" \
--env-file "$ROOT/.env.e2e" \
--file "$ROOT/compose.yaml" \
--file "$ROOT/compose.e2e.yaml" \
"$@"
}
cleanup() {
status=$?
if [ "$status" -ne 0 ]; then
compose ps --all >"$output_dir/compose-ps.txt" 2>&1 || true
compose logs --no-color >"$output_dir/compose.log" 2>&1 || true
fi
if [ "${KEEP_E2E_STACK:-0}" = "1" ]; then
echo "Keeping isolated E2E project $project for inspection."
echo "Artifacts: $output_dir"
else
compose down --volumes --remove-orphans >/dev/null
fi
exit "$status"
}
trap cleanup EXIT HUP INT TERM
compose config --quiet
compose up -d --build --wait db mailpit migrate proxy web worker
compose build e2e
compose run --rm --no-deps e2e
echo "Isolated browser E2E passed."
echo "Artifacts: $output_dir"