/home/techb158/cosmic-risk.abdallabala.com/scripts
Edit: /home/techb158/cosmic-risk.abdallabala.com/scripts/auto-deploy.sh (2145B)
#!/usr/bin/env bash
# Auto-deploy script — runs every minute via cron
# Checks for new commits on GitHub master branch and deploys if needed
set -euo pipefail
APP_DIR="/home/techb158/balavpn.abdallabala.com"
LOG_TAG="cosmic-auto-deploy"
LOCK_FILE="/tmp/cosmic-deploy.lock"
LOG_FILE="$APP_DIR/deploy.log"
log() { echo "$(date -uIseconds) $1" | tee -a "$LOG_FILE"; logger -t "$LOG_TAG" "$1"; }
# Prevent concurrent runs
if [ -f "$LOCK_FILE" ]; then
pid=$(cat "$LOCK_FILE")
if kill -0 "$pid" 2>/dev/null; then
log "Deploy already running (PID $pid), skipping"
exit 0
fi
rm -f "$LOCK_FILE"
fi
echo "$$" > "$LOCK_FILE"
trap 'rm -f "$LOCK_FILE"' EXIT
cd "$APP_DIR"
# Save current HEAD to detect changes
CURRENT_HEAD=$(git rev-parse HEAD 2>/dev/null || echo "")
# Fetch latest without merging
git fetch origin master 2>&1 | tee -a "$LOG_FILE"
REMOTE_HEAD=$(git rev-parse origin/master 2>/dev/null || echo "")
if [ "$CURRENT_HEAD" = "$REMOTE_HEAD" ]; then
log "No new commits, skipping deploy"
exit 0
fi
log "New commit detected: $REMOTE_HEAD"
log "Starting deploy..."
git reset --hard HEAD 2>/dev/null || true
git clean -fd 2>/dev/null || true
git pull origin master 2>&1 | tee -a "$LOG_FILE"
# Fix git stash state from previous failed runs
git stash drop 2>/dev/null || true
git clean -fd 2>/dev/null || true
log "Building app image..."
if docker compose -f docker-compose.prod.yml build --pull app 2>&1 | tee -a "$LOG_FILE"; then
log "Build succeeded, restarting..."
docker compose -f docker-compose.prod.yml up -d 2>&1 | tee -a "$LOG_FILE"
else
log "Build failed, keeping old container running"
exit 1
fi
log "Waiting for postgres..."
until docker compose -f docker-compose.prod.yml exec -T postgres pg_isready -U cosmic -d cosmic_saas 2>/dev/null; do sleep 2; done
docker compose -f docker-compose.prod.yml exec -T app npx prisma db push --accept-data-loss 2>&1 | tee -a "$LOG_FILE" || log "db push had issues (non-fatal)"
docker compose -f docker-compose.prod.yml exec -T app node prisma/seed.js 2>&1 | tee -a "$LOG_FILE" || log "seed had issues (non-fatal)"
log "=== Deploy complete: $REMOTE_HEAD ==="