#!/usr/bin/env bash set -euo pipefail # === Konfiguracja (możesz nadpisać zmiennymi środowiskowymi) === REPO_DIR="${REPO_DIR:-$(pwd)}" COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.yml}" # albo compose.yaml GIT_REMOTE="${GIT_REMOTE:-origin}" GIT_BRANCH="${GIT_BRANCH:-$(git -C "$REPO_DIR" rev-parse --abbrev-ref HEAD 2>/dev/null || echo main)}" # Jeśli chcesz uruchomić tylko wybrane serwisy, podaj je po komendzie, # np.: ./deploy.sh web api SERVICES=("$@") log() { printf "\n==> %s\n" "$*"; } # --- Kontrole wstępne --- command -v git >/dev/null || { echo "Brak 'git' w PATH"; exit 1; } command -v docker >/dev/null || { echo "Brak 'docker' w PATH"; exit 1; } if ! docker compose version >/dev/null 2>&1; then echo "Wymagany jest 'docker compose' (plugin), nie stary 'docker-compose'." exit 1 fi if [[ ! -f "$REPO_DIR/$COMPOSE_FILE" ]]; then # Spróbuj alternatywnej nazwy if [[ -f "$REPO_DIR/compose.yaml" ]]; then COMPOSE_FILE="compose.yaml" else echo "Nie znaleziono pliku Compose w: $REPO_DIR/$COMPOSE_FILE" exit 1 fi fi # --- Praca w katalogu repo --- cd "$REPO_DIR" # --- Aktualizacja kodu --- log "Aktualizacja repo: git pull --ff-only ($GIT_REMOTE/$GIT_BRANCH)" git fetch --prune "$GIT_REMOTE" git checkout "$GIT_BRANCH" >/dev/null 2>&1 || true git pull --ff-only "$GIT_REMOTE" "$GIT_BRANCH" # --- Zatrzymanie i usunięcie bieżącego stacka --- log "Docker Compose DOWN (usuwanie kontenerów i osieroconych usług)" docker compose -f "$COMPOSE_FILE" down --remove-orphans # --- Budowanie i uruchamianie bez restartu zależności --- log "Docker Compose UP (build bez deps) dla: ${SERVICES[*]:-(wszystkie)}" if [[ ${#SERVICES[@]} -gt 0 ]]; then docker compose -f "$COMPOSE_FILE" up -d --no-deps --build "${SERVICES[@]}" else docker compose -f "$COMPOSE_FILE" up -d --no-deps --build fi log "Gotowe ✅"