elder-yudao-pro/deploy/local/common.sh

88 lines
2.5 KiB
Bash
Raw Normal View History

#!/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"; }