deploy.sh now checks local vs remote templates via md5sum on every deploy and warns about drift. Pass --sync-templates to push changed files. Also reports cached card image counts on the target server. New clear-card-cache.sh script inspects or clears cached PNG/APNG card images inside the API container, with --apng-only and --all modes. Added scripts/README.md documenting all operational scripts. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
90 lines
2.4 KiB
Bash
Executable File
90 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# Clear cached card images from the API container
|
|
# Usage: ./scripts/clear-card-cache.sh <dev|prod> [--apng-only|--all]
|
|
#
|
|
# With no flags: reports cache size only (dry run)
|
|
# --apng-only: delete only .apng files (animated cards)
|
|
# --all: delete all cached card images (.png + .apng)
|
|
set -euo pipefail
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
declare -A DEPLOY_HOST=([dev]="pd-database" [prod]="akamai")
|
|
declare -A CONTAINER=([dev]="dev_pd_database" [prod]="pd_api")
|
|
|
|
usage() {
|
|
echo "Usage: $0 <dev|prod> [--apng-only|--all]"
|
|
echo ""
|
|
echo " No flag Report cache size (dry run)"
|
|
echo " --apng-only Delete only .apng files (animated cards)"
|
|
echo " --all Delete all cached card images"
|
|
exit 1
|
|
}
|
|
|
|
[[ $# -lt 1 ]] && usage
|
|
|
|
ENV="$1"
|
|
ACTION="${2:-report}"
|
|
|
|
if [[ "$ENV" != "dev" && "$ENV" != "prod" ]]; then
|
|
usage
|
|
fi
|
|
|
|
HOST="${DEPLOY_HOST[$ENV]}"
|
|
CTR="${CONTAINER[$ENV]}"
|
|
CACHE_PATH="/app/storage/cards"
|
|
|
|
report() {
|
|
echo -e "${CYAN}Card image cache on ${HOST} (${CTR}):${NC}"
|
|
ssh "$HOST" "
|
|
png_count=\$(docker exec $CTR find $CACHE_PATH -name '*.png' 2>/dev/null | wc -l)
|
|
apng_count=\$(docker exec $CTR find $CACHE_PATH -name '*.apng' 2>/dev/null | wc -l)
|
|
echo \" PNG: \${png_count} files\"
|
|
echo \" APNG: \${apng_count} files\"
|
|
echo \" Total: \$((\${png_count} + \${apng_count})) files\"
|
|
" 2>/dev/null || {
|
|
echo -e "${RED}Could not reach ${HOST}.${NC}"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
report
|
|
|
|
case "$ACTION" in
|
|
report)
|
|
echo -e "${GREEN}Dry run — no files deleted. Pass --apng-only or --all to clear.${NC}"
|
|
;;
|
|
|
|
--apng-only)
|
|
echo -e "${YELLOW}Deleting all .apng files from ${CTR}...${NC}"
|
|
read -rp "Proceed? [y/N] " confirm
|
|
[[ "$confirm" =~ ^[Yy]$ ]] || {
|
|
echo "Aborted."
|
|
exit 0
|
|
}
|
|
|
|
deleted=$(ssh "$HOST" "docker exec $CTR find $CACHE_PATH -name '*.apng' -delete -print 2>/dev/null | wc -l")
|
|
echo -e "${GREEN}Deleted ${deleted} .apng files.${NC}"
|
|
;;
|
|
|
|
--all)
|
|
echo -e "${RED}Deleting ALL cached card images from ${CTR}...${NC}"
|
|
read -rp "This will clear PNG and APNG caches. Proceed? [y/N] " confirm
|
|
[[ "$confirm" =~ ^[Yy]$ ]] || {
|
|
echo "Aborted."
|
|
exit 0
|
|
}
|
|
|
|
deleted=$(ssh "$HOST" "docker exec $CTR find $CACHE_PATH -type f \( -name '*.png' -o -name '*.apng' \) -delete -print 2>/dev/null | wc -l")
|
|
echo -e "${GREEN}Deleted ${deleted} cached card images.${NC}"
|
|
;;
|
|
|
|
*)
|
|
usage
|
|
;;
|
|
esac
|