mirror of
https://github.com/JetSprow/J-Board-Lite.git
synced 2026-05-01 01:14:10 +05:30
feat: add jetboard deployment manager
This commit is contained in:
191
scripts/lib-standalone-profile.sh
Executable file
191
scripts/lib-standalone-profile.sh
Executable file
@@ -0,0 +1,191 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Shared profile detection for non-Docker installs and updates.
|
||||
# Strong machines use the default npm/Next behavior. Small machines trade time
|
||||
# for lower peak CPU and memory usage.
|
||||
|
||||
JBOARD_STANDALONE_PROFILE_RESOLVED=""
|
||||
JBOARD_CPU_COUNT=""
|
||||
JBOARD_HOST_MEM_MB=""
|
||||
JBOARD_APP_DISK_AVAIL_MB=""
|
||||
JBOARD_BUILD_NODE_HEAP_MB=""
|
||||
JBOARD_RUNTIME_NODE_HEAP_MB=""
|
||||
JBOARD_RUNTIME_NODE_OPTIONS=""
|
||||
|
||||
jboard_cpu_count() {
|
||||
local value=""
|
||||
|
||||
if command -v nproc >/dev/null 2>&1; then
|
||||
value="$(nproc 2>/dev/null || true)"
|
||||
elif command -v getconf >/dev/null 2>&1; then
|
||||
value="$(getconf _NPROCESSORS_ONLN 2>/dev/null || true)"
|
||||
elif command -v sysctl >/dev/null 2>&1; then
|
||||
value="$(sysctl -n hw.ncpu 2>/dev/null || true)"
|
||||
fi
|
||||
|
||||
case "$value" in
|
||||
''|*[!0-9]*) echo 1 ;;
|
||||
*) echo "$value" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
jboard_host_mem_mb() {
|
||||
local value=""
|
||||
|
||||
if [ -r /proc/meminfo ]; then
|
||||
value="$(awk '/^MemTotal:/ {print int($2 / 1024)}' /proc/meminfo 2>/dev/null || true)"
|
||||
elif command -v getconf >/dev/null 2>&1; then
|
||||
local pages page_size
|
||||
pages="$(getconf _PHYS_PAGES 2>/dev/null || true)"
|
||||
page_size="$(getconf PAGE_SIZE 2>/dev/null || true)"
|
||||
if [ -n "$pages" ] && [ -n "$page_size" ]; then
|
||||
value="$((pages * page_size / 1024 / 1024))"
|
||||
fi
|
||||
elif command -v sysctl >/dev/null 2>&1; then
|
||||
local bytes
|
||||
bytes="$(sysctl -n hw.memsize 2>/dev/null || true)"
|
||||
if [ -n "$bytes" ]; then
|
||||
value="$((bytes / 1024 / 1024))"
|
||||
fi
|
||||
fi
|
||||
|
||||
case "$value" in
|
||||
''|*[!0-9]*) echo 0 ;;
|
||||
*) echo "$value" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
jboard_path_avail_mb() {
|
||||
local path="$1"
|
||||
local value=""
|
||||
|
||||
if [ -n "$path" ]; then
|
||||
value="$(df -Pm "$path" 2>/dev/null | awk 'NR == 2 {print $4}' || true)"
|
||||
fi
|
||||
|
||||
case "$value" in
|
||||
''|*[!0-9]*) echo 0 ;;
|
||||
*) echo "$value" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
jboard_standalone_build_heap_mb() {
|
||||
local mem_mb="$1"
|
||||
|
||||
if [ -n "${JBOARD_LOW_RESOURCE_NODE_MB:-}" ]; then
|
||||
echo "$JBOARD_LOW_RESOURCE_NODE_MB"
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$mem_mb" -gt 0 ] && [ "$mem_mb" -le 1200 ]; then
|
||||
echo 640
|
||||
elif [ "$mem_mb" -gt 0 ] && [ "$mem_mb" -le 1700 ]; then
|
||||
echo 768
|
||||
elif [ "$mem_mb" -gt 0 ] && [ "$mem_mb" -le 2400 ]; then
|
||||
echo 1024
|
||||
else
|
||||
echo 1536
|
||||
fi
|
||||
}
|
||||
|
||||
jboard_standalone_runtime_heap_mb() {
|
||||
local mem_mb="$1"
|
||||
|
||||
if [ -n "${JBOARD_RUNTIME_NODE_MB:-}" ]; then
|
||||
echo "$JBOARD_RUNTIME_NODE_MB"
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$mem_mb" -gt 0 ] && [ "$mem_mb" -le 1200 ]; then
|
||||
echo 512
|
||||
elif [ "$mem_mb" -gt 0 ] && [ "$mem_mb" -le 1700 ]; then
|
||||
echo 768
|
||||
elif [ "$mem_mb" -gt 0 ] && [ "$mem_mb" -le 2400 ]; then
|
||||
echo 1024
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
jboard_resolve_standalone_profile() {
|
||||
local requested="${JBOARD_BUILD_PROFILE:-auto}"
|
||||
local cpu="$1"
|
||||
local mem_mb="$2"
|
||||
local disk_mb="$3"
|
||||
|
||||
case "$requested" in
|
||||
low|slow|small)
|
||||
echo low
|
||||
return
|
||||
;;
|
||||
normal|fast|strong)
|
||||
echo normal
|
||||
return
|
||||
;;
|
||||
auto|'')
|
||||
;;
|
||||
*)
|
||||
echo "未知 JBOARD_BUILD_PROFILE=$requested,回退为 auto。" >&2
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "$cpu" -le 1 ]; then
|
||||
echo low
|
||||
elif [ "$mem_mb" -gt 0 ] && [ "$mem_mb" -lt 2048 ]; then
|
||||
echo low
|
||||
elif [ "$disk_mb" -gt 0 ] && [ "$disk_mb" -lt 8192 ]; then
|
||||
echo low
|
||||
else
|
||||
echo normal
|
||||
fi
|
||||
}
|
||||
|
||||
jboard_prepare_standalone_build_env() {
|
||||
local app_dir="${1:-.}"
|
||||
|
||||
JBOARD_CPU_COUNT="$(jboard_cpu_count)"
|
||||
JBOARD_HOST_MEM_MB="$(jboard_host_mem_mb)"
|
||||
JBOARD_APP_DISK_AVAIL_MB="$(jboard_path_avail_mb "$app_dir")"
|
||||
JBOARD_STANDALONE_PROFILE_RESOLVED="$(jboard_resolve_standalone_profile "$JBOARD_CPU_COUNT" "$JBOARD_HOST_MEM_MB" "$JBOARD_APP_DISK_AVAIL_MB")"
|
||||
|
||||
export NEXT_TELEMETRY_DISABLED=1
|
||||
|
||||
if [ "$JBOARD_STANDALONE_PROFILE_RESOLVED" = "low" ]; then
|
||||
JBOARD_BUILD_NODE_HEAP_MB="$(jboard_standalone_build_heap_mb "$JBOARD_HOST_MEM_MB")"
|
||||
JBOARD_RUNTIME_NODE_HEAP_MB="$(jboard_standalone_runtime_heap_mb "$JBOARD_HOST_MEM_MB")"
|
||||
JBOARD_RUNTIME_NODE_OPTIONS="--max-old-space-size=${JBOARD_RUNTIME_NODE_HEAP_MB}"
|
||||
export NPM_CONFIG_JOBS="${NPM_CONFIG_JOBS:-1}"
|
||||
export npm_config_jobs="${npm_config_jobs:-$NPM_CONFIG_JOBS}"
|
||||
export NODE_OPTIONS="${NODE_OPTIONS:---max-old-space-size=${JBOARD_BUILD_NODE_HEAP_MB}}"
|
||||
else
|
||||
JBOARD_BUILD_NODE_HEAP_MB=""
|
||||
JBOARD_RUNTIME_NODE_HEAP_MB=""
|
||||
JBOARD_RUNTIME_NODE_OPTIONS="${JBOARD_RUNTIME_NODE_OPTIONS:-}"
|
||||
export NPM_CONFIG_JOBS="${NPM_CONFIG_JOBS:-}"
|
||||
fi
|
||||
}
|
||||
|
||||
jboard_is_low_resource_standalone() {
|
||||
[ "${JBOARD_STANDALONE_PROFILE_RESOLVED:-}" = "low" ]
|
||||
}
|
||||
|
||||
jboard_print_standalone_profile() {
|
||||
local disk="${JBOARD_APP_DISK_AVAIL_MB:-0}"
|
||||
local disk_text="unknown"
|
||||
|
||||
if [ "$disk" -gt 0 ]; then
|
||||
disk_text="${disk}MB"
|
||||
fi
|
||||
|
||||
if jboard_is_low_resource_standalone; then
|
||||
echo "检测到低资源本机环境:CPU=${JBOARD_CPU_COUNT:-?},内存=${JBOARD_HOST_MEM_MB:-0}MB,可用空间=${disk_text}"
|
||||
echo "启用慢速低占用模式:npm jobs=${NPM_CONFIG_JOBS:-1},构建 Node heap=${JBOARD_BUILD_NODE_HEAP_MB:-?}MB,运行 Node heap=${JBOARD_RUNTIME_NODE_HEAP_MB:-?}MB。"
|
||||
else
|
||||
echo "检测到常规本机环境:CPU=${JBOARD_CPU_COUNT:-?},内存=${JBOARD_HOST_MEM_MB:-0}MB,可用空间=${disk_text}"
|
||||
echo "使用 npm/Next 默认构建策略,不额外限制并发或 Node heap。"
|
||||
fi
|
||||
|
||||
if [ "$disk" -gt 0 ] && [ "$disk" -lt 8192 ]; then
|
||||
echo "提示:可用空间低于 8GB,建议扩容或清理缓存后再构建。"
|
||||
fi
|
||||
}
|
||||
Reference in New Issue
Block a user