diff --git a/localinfra/scripts/infra-clear.sh b/localinfra/scripts/infra-clear.sh new file mode 100755 index 000000000..fbf836398 --- /dev/null +++ b/localinfra/scripts/infra-clear.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +set -euo pipefail + +CLI="${1:-podman}" +REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)" +PROJECT="$(printf '%s' "${COMPOSE_PROJECT_NAME:-$(basename "$REPO_ROOT")}" | tr '[:upper:]' '[:lower:]' | tr -cd 'a-z0-9_-')" +KEEP='go-cache|go-mod-cache|bobbin-cargo|bobbin-target|(web|camo|avatar)-node-modules|web-svelte-kit|(camo|avatar)-wrangler|ncps-data|spindle-cache' + +cd "$REPO_ROOT" + +printf '==> stopping %s containers with %s compose down --remove-orphans\n' "$PROJECT" "$CLI" >&2 +"$CLI" compose down --remove-orphans + +printf '==> removing %s volumes, keeping caches\n' "$PROJECT" >&2 +all="$("$CLI" volume ls -q | grep -E "^${PROJECT}_" || true)" +drop="$(printf '%s\n' "$all" | grep -vE "^${PROJECT}_(${KEEP})$" || true)" +keep="$(printf '%s\n' "$all" | grep -E "^${PROJECT}_(${KEEP})$" || true)" + +[ -z "$keep" ] || printf ' keep %s\n' $keep >&2 +if [ -z "$drop" ]; then + printf ' nothing to remove.\n' >&2 +else + printf ' remove %s\n' $drop >&2 + "$CLI" volume rm $drop >/dev/null +fi +printf '==> done\n' >&2