#!/bin/bash set -e cd /opt/dumpsterChat # Load nvm for Node/npm export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" nvm use 22 # Snapshot the current binary before pulling if [ -f dumpster-server ]; then cp dumpster-server dumpster-server.bak echo "Backed up existing binary to dumpster-server.bak" fi git pull make build # Sync web dist to Docker Caddy volume if present if [ -d /var/lib/docker/volumes/docker_web_assets/_data ]; then rsync -a --delete web/dist/ /var/lib/docker/volumes/docker_web_assets/_data/ echo "Synced web assets to Docker Caddy volume" fi # Health check after restart — roll back on failure systemctl restart dumpster echo "Waiting for app to become healthy..." for i in $(seq 1 15); do if curl -sf http://localhost:8080/ > /dev/null 2>&1; then echo "Server is listening — deploy complete" rm -f dumpster-server.bak echo "Deploy complete — $(date)" exit 0 fi sleep 2 done echo "Health check failed after 30s — rolling back..." systemctl stop dumpster cp dumpster-server.bak dumpster-server systemctl start dumpster echo "Rolled back to previous binary — $(date)" exit 1