#!/usr/bin/env bash set -euo pipefail PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$PROJECT_ROOT" TARGET_BRANCH="${1:-$(git rev-parse --abbrev-ref HEAD)}" echo "==> Deploy directory: $PROJECT_ROOT" echo "==> Target branch: $TARGET_BRANCH" if [[ -n "$(git status --porcelain)" ]]; then echo "Error: working tree is not clean." echo "Please commit/stash local changes before deployment." exit 1 fi echo "==> Fetching remote updates..." git fetch --all --prune echo "==> Checking out branch: $TARGET_BRANCH" git checkout "$TARGET_BRANCH" echo "==> Pulling latest code from origin/$TARGET_BRANCH" git pull --ff-only origin "$TARGET_BRANCH" if [[ ! -f ".env" && -f ".env.example" ]]; then cp ".env.example" ".env" echo "==> Created .env from .env.example" fi if docker compose version >/dev/null 2>&1; then COMPOSE_CMD="docker compose" elif command -v docker-compose >/dev/null 2>&1; then COMPOSE_CMD="docker-compose" else COMPOSE_CMD="" fi if [[ -n "$COMPOSE_CMD" ]]; then echo "==> Restarting service with $COMPOSE_CMD" $COMPOSE_CMD down $COMPOSE_CMD up -d --build echo "==> Deployment finished. Service: http://localhost:18000" else echo "==> Docker Compose not found, fallback to ./start.sh" chmod +x ./start.sh ./start.sh fi