Files
hwilliams-dev/scripts/deploy-watch.sh
2026-11-01 20:02:17 +00:00

31 lines
1.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_DIR="${REPO_DIR:-$(dirname "$SCRIPT_DIR")}"
TRIGGER_FILE="${TRIGGER_FILE:-$REPO_DIR/deploy-trigger/redeploy.flag}"
POLL_INTERVAL="${POLL_INTERVAL:-10}"
# Compose service name from docker-compose.yml (not the generated image name).
SERVICE="${SERVICE:-portfolio}"
log() { echo "[deploy-watch] $(date -Iseconds) $*"; }
log "watching for $TRIGGER_FILE (repo: $REPO_DIR, service: $SERVICE, interval: ${POLL_INTERVAL}s)"
while true; do
if [ -f "$TRIGGER_FILE" ]; then
log "trigger detected, redeploying"
rm -f "$TRIGGER_FILE"
# set -e is ignored inside a subshell that is part of an && / || list, so
# each step is chained explicitly to stop at the first failure.
(
cd "$REPO_DIR" &&
git pull --ff-only &&
docker compose build "$SERVICE" &&
docker compose up -d "$SERVICE" &&
docker image prune -f
) && log "redeploy complete" || log "redeploy FAILED, see output above"
fi
sleep "$POLL_INTERVAL"
done