81 lines
1.7 KiB
Bash
Executable File
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
|