|
|
@@ -0,0 +1,80 @@
|
|
|
+#!/usr/bin/env bash
|
|
|
+set -euo pipefail
|
|
|
+
|
|
|
+# Usage:
|
|
|
+# ./deploy.sh # deploy master
|
|
|
+# ./deploy.sh master # deploy master
|
|
|
+# ./deploy.sh master --no-build
|
|
|
+# ./deploy.sh master --no-cache
|
|
|
+
|
|
|
+BRANCH="${1:-master}"
|
|
|
+OPTION="${2:-}"
|
|
|
+
|
|
|
+PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
+cd "$PROJECT_DIR"
|
|
|
+
|
|
|
+if [[ ! -f "docker-compose.yml" ]]; then
|
|
|
+ echo "ERROR: docker-compose.yml not found in $PROJECT_DIR"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+if ! command -v docker >/dev/null 2>&1; then
|
|
|
+ echo "ERROR: docker is not installed."
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+COMPOSE_CMD=""
|
|
|
+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
|
|
|
+ echo "ERROR: neither 'docker compose' nor 'docker-compose' is available."
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+if [[ ! -f ".env" ]]; then
|
|
|
+ if [[ -f ".env.example" ]]; then
|
|
|
+ cp .env.example .env
|
|
|
+ echo "INFO: .env not found, created from .env.example"
|
|
|
+ echo "INFO: please review .env values for production."
|
|
|
+ else
|
|
|
+ echo "ERROR: .env and .env.example are both missing."
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+fi
|
|
|
+
|
|
|
+echo "==> Fetch latest code"
|
|
|
+git fetch --all
|
|
|
+git checkout "$BRANCH"
|
|
|
+git pull origin "$BRANCH"
|
|
|
+
|
|
|
+echo "==> Build and start containers"
|
|
|
+if [[ "$OPTION" == "--no-build" ]]; then
|
|
|
+ $COMPOSE_CMD up -d
|
|
|
+elif [[ "$OPTION" == "--no-cache" ]]; then
|
|
|
+ $COMPOSE_CMD build --no-cache
|
|
|
+ $COMPOSE_CMD up -d
|
|
|
+else
|
|
|
+ $COMPOSE_CMD up -d --build
|
|
|
+fi
|
|
|
+
|
|
|
+echo "==> Service status"
|
|
|
+$COMPOSE_CMD ps
|
|
|
+
|
|
|
+echo "==> Backend health check"
|
|
|
+if command -v curl >/dev/null 2>&1; then
|
|
|
+ set +e
|
|
|
+ HEALTH_OUTPUT="$(curl -sS --max-time 5 http://127.0.0.1:8000/demand/api/v1/health)"
|
|
|
+ CURL_CODE=$?
|
|
|
+ set -e
|
|
|
+ if [[ $CURL_CODE -eq 0 ]]; then
|
|
|
+ echo "$HEALTH_OUTPUT"
|
|
|
+ echo "Deploy done."
|
|
|
+ else
|
|
|
+ echo "WARN: backend health check failed, please inspect logs:"
|
|
|
+ echo " $COMPOSE_CMD logs --tail=100 backend"
|
|
|
+ fi
|
|
|
+else
|
|
|
+ echo "WARN: curl not found, skip health check."
|
|
|
+fi
|