feat: optimize backend build with conditional martial-tool install
This commit is contained in:
Executable
+80
@@ -0,0 +1,80 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user