91 lines
2.6 KiB
Bash
Executable File
91 lines
2.6 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
if [ "$#" -ne 1 ]; then
|
|
echo "Usage: $0 who_need_help_e2e_RUN_ID" >&2
|
|
exit 1
|
|
fi
|
|
|
|
project=$1
|
|
|
|
case "$project" in
|
|
who_need_help_e2e_*) ;;
|
|
*)
|
|
echo "Refusing to stop a non-E2E Compose project: $project" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
ROOT=$(CDPATH='' cd -- "$(dirname -- "$0")/.." && pwd)
|
|
E2E_ENV=${WNH_E2E_ENV_FILE:-"$ROOT/output/runtime/e2e.env"}
|
|
run_id=${project#who_need_help_e2e_}
|
|
|
|
if [ ! -f "$E2E_ENV" ]; then
|
|
echo "Missing generated E2E runtime state: $E2E_ENV" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Compose still resolves required interpolation values for `down`. These values
|
|
# mirror the exact per-run tags. The project label passed above remains the
|
|
# Compose resource scope.
|
|
export APP_IMAGE="who-need-help:e2e-$run_id"
|
|
export SOCKET_PROXY_IMAGE="who-need-help:socket-proxy-e2e-$run_id"
|
|
export POSTGIS_IMAGE="who-need-help:postgis-e2e-$run_id"
|
|
export E2E_TEST_IMAGE="who-need-help-e2e-tests:$run_id"
|
|
export E2E_OUTPUT_DIR="$ROOT/output/e2e/stop-placeholder"
|
|
export E2E_UID
|
|
E2E_UID=$(id -u)
|
|
export E2E_GID
|
|
E2E_GID=$(id -g)
|
|
export TRAEFIK_PROJECT_CONSTRAINT="$project"
|
|
export TRAEFIK_APP_NAME="$project"
|
|
export TRAEFIK_DOCKER_NETWORK="${project}_ingress"
|
|
export MAP_TILE_URL="/__e2e__/map-tile.png?z={z}&x={x}&y={y}"
|
|
|
|
docker compose \
|
|
--project-name "$project" \
|
|
--env-file "$E2E_ENV" \
|
|
--file "$ROOT/compose.yaml" \
|
|
--file "$ROOT/compose.e2e.yaml" \
|
|
down --remove-orphans
|
|
|
|
postgres_volume="${project}_postgres_data"
|
|
|
|
if docker volume inspect "$postgres_volume" >/dev/null 2>&1; then
|
|
observed_project=$(docker volume inspect --format \
|
|
'{{index .Labels "com.docker.compose.project"}}' "$postgres_volume")
|
|
observed_volume=$(docker volume inspect --format \
|
|
'{{index .Labels "com.docker.compose.volume"}}' "$postgres_volume")
|
|
remaining_refs=$(docker ps -aq --filter "volume=$postgres_volume")
|
|
|
|
if [ "$observed_project" != "$project" ] || \
|
|
[ "$observed_volume" != "postgres_data" ] || \
|
|
[ -n "$remaining_refs" ]; then
|
|
echo "Refusing to remove unexpected or referenced E2E volume: $postgres_volume" >&2
|
|
exit 1
|
|
fi
|
|
|
|
docker volume rm "$postgres_volume"
|
|
fi
|
|
|
|
for image in "$E2E_TEST_IMAGE" "$APP_IMAGE" "$POSTGIS_IMAGE" "$SOCKET_PROXY_IMAGE"; do
|
|
if docker image inspect "$image" >/dev/null 2>&1; then
|
|
referenced=false
|
|
|
|
for container_id in $(docker ps -aq --filter "ancestor=$image"); do
|
|
observed_image=$(docker inspect --format '{{.Config.Image}}' "$container_id")
|
|
if [ "$observed_image" = "$image" ]; then
|
|
referenced=true
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ "$referenced" = true ]; then
|
|
echo "Refusing to remove referenced E2E image: $image" >&2
|
|
exit 1
|
|
fi
|
|
|
|
docker image rm "$image"
|
|
fi
|
|
done
|