diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..0b9dded --- /dev/null +++ b/deploy.sh @@ -0,0 +1,49 @@ +#!/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