forked from baron/baron-sso
144 lines
4.1 KiB
Bash
144 lines
4.1 KiB
Bash
#!/usr/bin/env sh
|
|
set -eu
|
|
|
|
app_env="$(printf '%s' "${APP_ENV:-development}" | tr '[:upper:]' '[:lower:]')"
|
|
|
|
if [ -z "${VITE_DEVFRONT_PUBLIC_URL:-}" ] && [ -n "${DEVFRONT_URL:-}" ]; then
|
|
export VITE_DEVFRONT_PUBLIC_URL="$DEVFRONT_URL"
|
|
fi
|
|
|
|
if [ -z "${VITE_DEVFRONT_PUBLIC_URL:-}" ] && [ -n "${DEVFRONT_CALLBACK_URLS:-}" ]; then
|
|
first_devfront_callback="${DEVFRONT_CALLBACK_URLS%%,*}"
|
|
case "$first_devfront_callback" in
|
|
http://*/auth/callback | https://*/auth/callback)
|
|
export VITE_DEVFRONT_PUBLIC_URL="${first_devfront_callback%/auth/callback}"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
case "$app_env" in
|
|
production|prod|stage|staging)
|
|
mode="production"
|
|
;;
|
|
*)
|
|
mode="development"
|
|
;;
|
|
esac
|
|
|
|
if [ "${1:-}" = "--print-public-url" ]; then
|
|
printf '%s\n' "${VITE_DEVFRONT_PUBLIC_URL:-}"
|
|
exit 0
|
|
fi
|
|
|
|
if [ "${1:-}" = "--print-mode" ]; then
|
|
printf '%s\n' "$mode"
|
|
exit 0
|
|
fi
|
|
|
|
ensure_frontend_dependencies() {
|
|
APP_PACKAGE_NAME="devfront"
|
|
|
|
# Detect workspace root
|
|
if [ -f "/workspace/pnpm-workspace.yaml" ]; then
|
|
WORKSPACE_ROOT="/workspace"
|
|
elif [ -f "../../pnpm-workspace.yaml" ]; then
|
|
WORKSPACE_ROOT="../.."
|
|
else
|
|
WORKSPACE_ROOT=""
|
|
fi
|
|
|
|
# Manage dependencies from the real workspace tree if possible, otherwise use current dir.
|
|
if [ -n "$WORKSPACE_ROOT" ]; then
|
|
WORKSPACE_DIR="$WORKSPACE_ROOT"
|
|
LOCK_FILE="$WORKSPACE_ROOT/pnpm-lock.yaml"
|
|
COMMON_PACKAGE_FILE="$WORKSPACE_ROOT/common/package.json"
|
|
INSTALL_CMD="cd $WORKSPACE_ROOT && CI=true pnpm install --filter ${APP_PACKAGE_NAME}... --frozen-lockfile --ignore-scripts"
|
|
elif [ -f "pnpm-lock.yaml" ]; then
|
|
WORKSPACE_DIR="."
|
|
LOCK_FILE="pnpm-lock.yaml"
|
|
COMMON_PACKAGE_FILE="/workspace/common/package.json"
|
|
INSTALL_CMD="CI=true pnpm install --frozen-lockfile --ignore-scripts"
|
|
else
|
|
WORKSPACE_DIR="."
|
|
LOCK_FILE="package-lock.json"
|
|
COMMON_PACKAGE_FILE="/workspace/common/package.json"
|
|
INSTALL_CMD="npm ci"
|
|
fi
|
|
|
|
if [ ! -f "$WORKSPACE_DIR/package.json" ]; then
|
|
return 0
|
|
fi
|
|
|
|
lock_mode=""
|
|
lock_file="$WORKSPACE_DIR/.baron-deps-install.lock"
|
|
|
|
acquire_install_lock() {
|
|
if command -v flock >/dev/null 2>&1; then
|
|
lock_mode="flock"
|
|
exec 9>"$lock_file"
|
|
flock 9
|
|
trap 'release_install_lock' EXIT INT TERM
|
|
return 0
|
|
fi
|
|
|
|
lock_mode="mkdir"
|
|
while ! mkdir "$lock_file" 2>/dev/null; do
|
|
sleep 1
|
|
done
|
|
trap 'release_install_lock' EXIT INT TERM
|
|
}
|
|
|
|
release_install_lock() {
|
|
trap - EXIT INT TERM
|
|
|
|
if [ "$lock_mode" = "flock" ]; then
|
|
flock -u 9 || true
|
|
exec 9>&-
|
|
return 0
|
|
fi
|
|
|
|
if [ "$lock_mode" = "mkdir" ]; then
|
|
rmdir "$lock_file" >/dev/null 2>&1 || true
|
|
fi
|
|
}
|
|
|
|
if command -v sha256sum >/dev/null 2>&1; then
|
|
deps_hash="$(sha256sum "$WORKSPACE_DIR/package.json" "$LOCK_FILE" "$COMMON_PACKAGE_FILE" package.json 2>/dev/null | sha256sum | awk '{print $1}')"
|
|
else
|
|
deps_hash="$(cksum "$WORKSPACE_DIR/package.json" "$LOCK_FILE" "$COMMON_PACKAGE_FILE" package.json 2>/dev/null | cksum | awk '{print $1}')"
|
|
fi
|
|
deps_stamp="node_modules/.baron-deps-hash"
|
|
installed_hash="$(cat "$deps_stamp" 2>/dev/null || true)"
|
|
|
|
if [ "$installed_hash" != "$deps_hash" ]; then
|
|
echo "Installing frontend dependencies..."
|
|
acquire_install_lock
|
|
if command -v sha256sum >/dev/null 2>&1; then
|
|
deps_hash="$(sha256sum "$WORKSPACE_DIR/package.json" "$LOCK_FILE" "$COMMON_PACKAGE_FILE" package.json 2>/dev/null | sha256sum | awk '{print $1}')"
|
|
else
|
|
deps_hash="$(cksum "$WORKSPACE_DIR/package.json" "$LOCK_FILE" "$COMMON_PACKAGE_FILE" package.json 2>/dev/null | cksum | awk '{print $1}')"
|
|
fi
|
|
installed_hash="$(cat "$deps_stamp" 2>/dev/null || true)"
|
|
if [ "$installed_hash" = "$deps_hash" ]; then
|
|
release_install_lock
|
|
return 0
|
|
fi
|
|
|
|
eval "$INSTALL_CMD"
|
|
|
|
mkdir -p node_modules
|
|
printf '%s\n' "$deps_hash" > "$deps_stamp"
|
|
release_install_lock
|
|
fi
|
|
}
|
|
|
|
ensure_frontend_dependencies
|
|
|
|
if [ "$mode" = "production" ]; then
|
|
echo "Running in production mode with Vite preview..."
|
|
exec sh -c "npm run build && npm run preview -- --host 0.0.0.0"
|
|
fi
|
|
|
|
echo "Running in development mode..."
|
|
exec npm run dev -- --host 0.0.0.0
|