#!/usr/bin/env bash set -euo pipefail ROOT="${EMS_DEPLOY_ROOT:-/opt/ems-deploy}" APP="${ROOT}/app" COMPOSE_SRC="${APP}/deploy/docker-compose.yml" COMPOSE_DST="${ROOT}/docker-compose.yml" ENV_FILE="${ROOT}/.env" LOCK_FILE="${ROOT}/.deploy.lock" log() { echo "[$(date -Iseconds)] $*" } if [[ ! -d "$APP/.git" ]]; then log "ERROR: missing git checkout at $APP" exit 1 fi if [[ ! -f "$ENV_FILE" ]]; then log "ERROR: missing $ENV_FILE" exit 1 fi if [[ ! -f "$COMPOSE_SRC" ]]; then log "ERROR: missing $COMPOSE_SRC" exit 1 fi exec 9>"$LOCK_FILE" flock 9 log "Starting deploy (ROOT=$ROOT)" log "whoami=$(whoami)" log "pwd=$(pwd)" log "app owner=$(stat -c '%u:%g %n' "$APP")" log "Git: fetch origin" git -c safe.directory="$APP" -C "$APP" fetch origin log "Git: checkout main" git -c safe.directory="$APP" -C "$APP" checkout main log "Git: reset --hard origin/main" git -c safe.directory="$APP" -C "$APP" reset --hard origin/main log "Sync compose -> $COMPOSE_DST" install -m 0644 "$COMPOSE_SRC" "$COMPOSE_DST" log "docker compose config (validate)" docker compose -f "$COMPOSE_DST" --env-file "$ENV_FILE" config >/dev/null # Flyway: nejdřív validate (soubory vs flyway_schema_history na DB), pak migrate. # Čisté `up -d` často znovu nespustí jednorázový kontejner flyway — změny jen v R__/*.sql přes migrate. # Při chybě je v logu celý Flyway výstup (konkrétní SQL / řádek). log "Flyway validate" docker compose -f "$COMPOSE_DST" --env-file "$ENV_FILE" run --rm flyway validate log "Flyway migrate (docker compose run --rm flyway)" docker compose -f "$COMPOSE_DST" --env-file "$ENV_FILE" run --rm flyway migrate log "docker compose build" docker compose -f "$COMPOSE_DST" --env-file "$ENV_FILE" build log "docker compose up -d" docker compose -f "$COMPOSE_DST" --env-file "$ENV_FILE" up -d log "docker image prune (dangling only)" docker image prune -f log "Deploy finished OK"