88 lines
2.5 KiB
Bash
Executable File
88 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
REPO_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||
RUNTIME_DIR="$SCRIPT_DIR/.runtime"
|
||
ENV_FILE="${ELDER_ENV_FILE:-$REPO_DIR/.env}"
|
||
|
||
if [[ -f "$ENV_FILE" ]]; then
|
||
# shellcheck disable=SC1090
|
||
set -a; source "$ENV_FILE"; set +a
|
||
fi
|
||
|
||
: "${ELDER_DB_HOST:=127.0.0.1}"
|
||
: "${ELDER_DB_PORT:=3306}"
|
||
: "${ELDER_DB_NAME:=elder_yudao_local}"
|
||
: "${ELDER_DB_USER:=root}"
|
||
: "${ELDER_DB_PASSWORD:=}"
|
||
: "${ELDER_REDIS_HOST:=127.0.0.1}"
|
||
: "${ELDER_REDIS_PORT:=6379}"
|
||
: "${ELDER_REDIS_DATABASE:=15}"
|
||
: "${ELDER_REDIS_PASSWORD:=}"
|
||
: "${ELDER_SERVER_PORT:=48080}"
|
||
: "${ELDER_UI_PORT:=5173}"
|
||
|
||
if [[ ! "$ELDER_DB_NAME" =~ ^elder_yudao_[a-z0-9_]+$ ]]; then
|
||
echo "ELDER_DB_NAME 必须是 elder_yudao_* 独立数据库。" >&2
|
||
exit 1
|
||
fi
|
||
|
||
find_command() {
|
||
local configured="$1"; shift
|
||
if [[ -n "$configured" && -x "$configured" ]]; then
|
||
printf '%s\n' "$configured"
|
||
return 0
|
||
fi
|
||
local candidate
|
||
for candidate in "$@"; do
|
||
if command -v "$candidate" >/dev/null 2>&1; then
|
||
command -v "$candidate"
|
||
return 0
|
||
fi
|
||
done
|
||
return 1
|
||
}
|
||
|
||
resolve_java() {
|
||
if [[ -n "${JAVA_BIN:-}" && -x "$JAVA_BIN" ]]; then printf '%s\n' "$JAVA_BIN"; return; fi
|
||
find_command '' java || {
|
||
echo '未找到 Java。请安装 Java 8/11/17,并设置 JAVA_BIN。' >&2
|
||
exit 1
|
||
}
|
||
}
|
||
|
||
resolve_maven() {
|
||
if [[ -n "${MAVEN_BIN:-}" && -x "$MAVEN_BIN" ]]; then printf '%s\n' "$MAVEN_BIN"; return; fi
|
||
find_command '' mvn || {
|
||
local bundled='/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/bin/mvn'
|
||
if [[ -x "$bundled" ]]; then printf '%s\n' "$bundled"; return; fi
|
||
echo '未找到 Maven。请安装 Maven,或设置 MAVEN_BIN。' >&2
|
||
exit 1
|
||
}
|
||
}
|
||
|
||
resolve_node() {
|
||
if [[ -n "${NODE_BIN:-}" && -x "$NODE_BIN" ]]; then printf '%s\n' "$NODE_BIN"; return; fi
|
||
find_command '' node || {
|
||
echo '未找到 Node.js 18+。请安装 Node.js,或设置 NODE_BIN。' >&2
|
||
exit 1
|
||
}
|
||
}
|
||
|
||
mysql_query() {
|
||
local database="$1"; shift
|
||
local mysql_bin
|
||
mysql_bin="${MYSQL_BIN:-$(command -v mysql || true)}"
|
||
if [[ -z "$mysql_bin" ]]; then
|
||
echo '未找到 mysql 客户端。请安装 MySQL 8,并设置 MYSQL_BIN。' >&2
|
||
exit 1
|
||
fi
|
||
MYSQL_PWD="$ELDER_DB_PASSWORD" "$mysql_bin" \
|
||
--protocol=TCP --host="$ELDER_DB_HOST" --port="$ELDER_DB_PORT" \
|
||
--user="$ELDER_DB_USER" --default-character-set=utf8mb4 \
|
||
${database:+--database="$database"} --batch --skip-column-names --execute="$1"
|
||
}
|
||
|
||
ensure_runtime_dir() { mkdir -p "$RUNTIME_DIR"; }
|