#!/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