NODEDC_TASKMANAGER/plane-src/rebuild-nas-legacy.sh

151 lines
4.0 KiB
Bash
Executable File

#!/bin/sh
set -eu
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
DOCKER=${DOCKER:-/usr/local/bin/docker}
SUDO_CMD=${SUDO_CMD:-sudo}
SRC=${SRC:-$SCRIPT_DIR}
APP=${APP:-$(CDPATH= cd -- "$SRC/../plane-app" && pwd)}
COMPOSE_PROJECT=${COMPOSE_PROJECT:-nodedc-tasker}
COMPOSE_ENV_FILE=${COMPOSE_ENV_FILE:-.env.synology}
COMPOSE_FILE=${COMPOSE_FILE:-docker-compose.yaml}
COMPOSE_OVERRIDE_FILE=${COMPOSE_OVERRIDE_FILE:-docker-compose.synology.override.yml}
BUILD_BACKEND=${BUILD_BACKEND:-1}
BUILD_WEB=${BUILD_WEB:-1}
BUILD_ADMIN=${BUILD_ADMIN:-0}
BACKEND_BUILDKIT=${BACKEND_BUILDKIT:-0}
WEB_BUILDKIT=${WEB_BUILDKIT:-0}
ADMIN_BUILDKIT=${ADMIN_BUILDKIT:-1}
PLANE_BACKEND_IMAGE=${PLANE_BACKEND_IMAGE:-nodedc/plane-backend:local}
PLANE_FRONTEND_IMAGE=${PLANE_FRONTEND_IMAGE:-nodedc/plane-frontend:ru}
PLANE_ADMIN_IMAGE=${PLANE_ADMIN_IMAGE:-nodedc/plane-admin:ru}
VITE_NODEDC_LAUNCHER_URL=${VITE_NODEDC_LAUNCHER_URL:-https://hub.nodedc.ru}
VITE_NODEDC_OIDC_LOGIN_ENABLED=${VITE_NODEDC_OIDC_LOGIN_ENABLED:-1}
RUN_SMOKE=${RUN_SMOKE:-1}
SMOKE_BASE_URL=${SMOKE_BASE_URL:-https://ops.nodedc.ru}
SMOKE_RESOLVE=${SMOKE_RESOLVE:-ops.nodedc.ru:443:127.0.0.1}
RECREATE_SERVICES=""
run() {
if [ -n "$SUDO_CMD" ]; then
"$SUDO_CMD" "$@"
else
"$@"
fi
}
run_env() {
if [ -n "$SUDO_CMD" ]; then
"$SUDO_CMD" env "$@"
else
env "$@"
fi
}
compose_up() {
cd "$APP"
set -- compose -p "$COMPOSE_PROJECT" --env-file "$COMPOSE_ENV_FILE" -f "$COMPOSE_FILE"
if [ -n "$COMPOSE_OVERRIDE_FILE" ] && [ -f "$COMPOSE_OVERRIDE_FILE" ]; then
set -- "$@" -f "$COMPOSE_OVERRIDE_FILE"
fi
set -- "$@" up -d --no-build --force-recreate
for service in $RECREATE_SERVICES; do
set -- "$@" "$service"
done
run "$DOCKER" "$@"
}
curl_with_optional_resolve() {
if [ -n "$SMOKE_RESOLVE" ]; then
curl -k --resolve "$SMOKE_RESOLVE" "$@"
else
curl -k "$@"
fi
}
if [ -n "$SUDO_CMD" ]; then
printf "== sudo session ==\n"
"$SUDO_CMD" -v
fi
if [ "$BUILD_BACKEND" = "1" ]; then
printf "== backend image: %s ==\n" "$PLANE_BACKEND_IMAGE"
cd "$SRC/apps/api"
run_env DOCKER_BUILDKIT="$BACKEND_BUILDKIT" "$DOCKER" build \
-t "$PLANE_BACKEND_IMAGE" \
-f Dockerfile.api .
RECREATE_SERVICES="$RECREATE_SERVICES api worker beat-worker"
else
printf "== skip backend image ==\n"
fi
if [ "$BUILD_WEB" = "1" ]; then
printf "== frontend image: %s ==\n" "$PLANE_FRONTEND_IMAGE"
cd "$SRC"
run_env DOCKER_BUILDKIT="$WEB_BUILDKIT" "$DOCKER" build \
--build-arg "VITE_NODEDC_LAUNCHER_URL=$VITE_NODEDC_LAUNCHER_URL" \
--build-arg "VITE_NODEDC_OIDC_LOGIN_ENABLED=$VITE_NODEDC_OIDC_LOGIN_ENABLED" \
-t "$PLANE_FRONTEND_IMAGE" \
-f apps/web/Dockerfile.web.nas-legacy .
RECREATE_SERVICES="$RECREATE_SERVICES web"
else
printf "== skip frontend image ==\n"
fi
if [ "$BUILD_ADMIN" = "1" ]; then
printf "== admin image: %s ==\n" "$PLANE_ADMIN_IMAGE"
cd "$SRC"
run_env DOCKER_BUILDKIT="$ADMIN_BUILDKIT" "$DOCKER" build \
--build-arg "VITE_NODEDC_LAUNCHER_URL=$VITE_NODEDC_LAUNCHER_URL" \
-t "$PLANE_ADMIN_IMAGE" \
-f apps/admin/Dockerfile.admin .
RECREATE_SERVICES="$RECREATE_SERVICES admin"
else
printf "== skip admin image ==\n"
fi
if [ -z "$RECREATE_SERVICES" ]; then
printf "== nothing to recreate ==\n"
exit 0
fi
printf "== recreate tasker services ==\n"
compose_up
printf "== containers ==\n"
run "$DOCKER" ps \
--filter "name=$COMPOSE_PROJECT" \
--format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
if [ "$RUN_SMOKE" = "1" ]; then
printf "== smoke: logo ==\n"
curl_with_optional_resolve -sSI \
"$SMOKE_BASE_URL/nodedc-logo.svg" \
| grep -Ei "HTTP/|content-type" || true
printf "== smoke: websocket ==\n"
curl_with_optional_resolve -i --http1.1 \
-H "Connection: Upgrade" \
-H "Upgrade: websocket" \
-H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" \
-H "Sec-WebSocket-Version: 13" \
"$SMOKE_BASE_URL/live/nodedc/stream" \
--max-time 35 \
2>/dev/null | sed -n "1,25p" || true
else
printf "== skip smoke checks ==\n"
fi
printf "== done ==\n"