Files
martial-master/scripts/deploy-backend.sh
T

81 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
usage() {
cat <<'USAGE'
Usage: ./scripts/deploy-backend.sh [--skip-docker]
Options:
--skip-docker Build jar only, skip docker compose build/up
USAGE
}
log() {
printf '[deploy] %s\n' "$*"
}
SKIP_DOCKER=0
while [[ $# -gt 0 ]]; do
case "$1" in
--skip-docker)
SKIP_DOCKER=1
shift
;;
-h|--help)
usage
exit 0
;;
*)
echo "Unknown option: $1" >&2
usage
exit 1
;;
esac
done
"$SCRIPT_DIR/ensure-martial-tool-installed.sh"
log "Packaging backend jar ..."
(
cd "$PROJECT_DIR"
mvn clean package -DskipTests
)
if [[ "$SKIP_DOCKER" -eq 1 ]]; then
log "--skip-docker enabled, jar build finished."
exit 0
fi
log "Building and restarting martial-api ..."
(
cd "$PROJECT_DIR"
docker compose build martial-api
docker compose up -d --no-deps martial-api
)
log "Waiting for martial-api health ..."
for _ in $(seq 1 60); do
json="$(cd "$PROJECT_DIR" && docker compose ps --format json martial-api 2>/dev/null || true)"
health="$(printf '%s\n' "$json" | sed -n 's/.*"Health":"\([^"]*\)".*/\1/p' | head -n 1)"
status="$(printf '%s\n' "$json" | sed -n 's/.*"Status":"\([^"]*\)".*/\1/p' | head -n 1)"
if [[ "$health" == "healthy" ]]; then
log "martial-api is healthy."
exit 0
fi
if printf '%s' "$status" | grep -Eiq 'unhealthy|exited|dead'; then
echo "[deploy] ERROR: martial-api status=$status" >&2
exit 1
fi
sleep 3
done
echo "[deploy] ERROR: timed out waiting for martial-api health" >&2
(cd "$PROJECT_DIR" && docker compose ps martial-api)
exit 1