Files
AIcreat/deploy.sh
2026-04-28 11:53:47 +08:00

50 lines
1.3 KiB
Bash
Executable File

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