168 lines
4.6 KiB
Bash
Executable File
168 lines
4.6 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}
|
|
BUILD_NETWORK=${BUILD_NETWORK:-host}
|
|
|
|
BACKEND_BUILDKIT=${BACKEND_BUILDKIT:-0}
|
|
WEB_BUILDKIT=${WEB_BUILDKIT:-0}
|
|
ADMIN_BUILDKIT=${ADMIN_BUILDKIT:-0}
|
|
ADMIN_REQUIRED=${ADMIN_REQUIRED:-0}
|
|
|
|
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=""
|
|
DOCKER_BUILD_NETWORK_ARGS=""
|
|
if [ -n "$BUILD_NETWORK" ]; then
|
|
DOCKER_BUILD_NETWORK_ARGS="--network=$BUILD_NETWORK"
|
|
fi
|
|
|
|
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 \
|
|
$DOCKER_BUILD_NETWORK_ARGS \
|
|
-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 \
|
|
$DOCKER_BUILD_NETWORK_ARGS \
|
|
--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"
|
|
if run_env DOCKER_BUILDKIT="$ADMIN_BUILDKIT" "$DOCKER" build \
|
|
$DOCKER_BUILD_NETWORK_ARGS \
|
|
--build-arg "VITE_NODEDC_LAUNCHER_URL=$VITE_NODEDC_LAUNCHER_URL" \
|
|
-t "$PLANE_ADMIN_IMAGE" \
|
|
-f apps/admin/Dockerfile.admin .; then
|
|
RECREATE_SERVICES="$RECREATE_SERVICES admin"
|
|
else
|
|
admin_status=$?
|
|
if [ "$ADMIN_REQUIRED" = "1" ] || [ -z "$RECREATE_SERVICES" ]; then
|
|
printf "!! admin image build failed (exit %s); aborting\n" "$admin_status" >&2
|
|
exit "$admin_status"
|
|
fi
|
|
printf "!! admin image build failed (exit %s); continuing with:%s\n" "$admin_status" "$RECREATE_SERVICES" >&2
|
|
fi
|
|
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"
|