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