mirror of
https://bitbucket.org/siakitem/my-pi.git
synced 2026-08-28 07:23:06 +00:00
156 lines
3.9 KiB
Bash
Executable File
156 lines
3.9 KiB
Bash
Executable File
#!/bin/sh
|
||
|
||
set -u
|
||
|
||
PACKAGE_SOURCE=${PI_PACKAGE_SOURCE:-git:git@bitbucket.org:siakitem/my-pi.git}
|
||
CODEGRAPH_INSTALL_URL=https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.sh
|
||
install_failed=0
|
||
|
||
say() {
|
||
printf '%s\n' "$*"
|
||
}
|
||
|
||
warn() {
|
||
printf '警告: %s\n' "$*" >&2
|
||
}
|
||
|
||
ask_to_install() {
|
||
dependency=$1
|
||
printf '未检测到 %s。是否现在安装?[y/N] ' "$dependency"
|
||
if ! IFS= read -r answer; then
|
||
answer=n
|
||
fi
|
||
case $answer in
|
||
y|Y|yes|YES|Yes) return 0 ;;
|
||
*) return 1 ;;
|
||
esac
|
||
}
|
||
|
||
require_brew() {
|
||
if command -v brew >/dev/null 2>&1; then
|
||
return 0
|
||
fi
|
||
|
||
warn "自动安装该依赖需要 Homebrew,但当前 PATH 中没有 brew。"
|
||
warn "请先安装 Homebrew(https://brew.sh/),然后重新运行本脚本。"
|
||
return 1
|
||
}
|
||
|
||
record_install_failure() {
|
||
warn "$1 安装失败;其余依赖仍会继续检查。"
|
||
install_failed=1
|
||
}
|
||
|
||
java_major_version() {
|
||
java_version=$(java -version 2>&1 | awk -F '"' 'NR == 1 { print $2 }')
|
||
case $java_version in
|
||
1.*) java_version=${java_version#1.} ;;
|
||
esac
|
||
java_major=${java_version%%.*}
|
||
case $java_major in
|
||
''|*[!0-9]*) return 1 ;;
|
||
*) printf '%s\n' "$java_major" ;;
|
||
esac
|
||
}
|
||
|
||
install_codegraph() {
|
||
if ! command -v curl >/dev/null 2>&1; then
|
||
warn "安装 CodeGraph 需要 curl。"
|
||
return 1
|
||
fi
|
||
curl -fsSL "$CODEGRAPH_INSTALL_URL" | sh || return 1
|
||
|
||
# 官方安装器默认使用 ~/.local/bin;让本次检查立即看到新命令。
|
||
if [ -d "$HOME/.local/bin" ]; then
|
||
PATH="$HOME/.local/bin:$PATH"
|
||
export PATH
|
||
fi
|
||
command -v codegraph >/dev/null 2>&1
|
||
}
|
||
|
||
install_kotlin_lsp() {
|
||
require_brew || return 1
|
||
brew install JetBrains/utils/kotlin-lsp || return 1
|
||
command -v kotlin-lsp >/dev/null 2>&1
|
||
}
|
||
|
||
install_java_21() {
|
||
require_brew || return 1
|
||
brew install openjdk@21 || return 1
|
||
java_home=$(brew --prefix openjdk@21 2>/dev/null) || return 1
|
||
PATH="$java_home/bin:$PATH"
|
||
export PATH
|
||
installed_java_major=$(java_major_version || true)
|
||
if [ -z "$installed_java_major" ] || [ "$installed_java_major" -lt 21 ]; then
|
||
return 1
|
||
fi
|
||
say "已在本次安装流程中使用 $java_home/bin。若新终端仍找不到 Java,请把该目录加入 PATH。"
|
||
}
|
||
|
||
install_jdtls() {
|
||
require_brew || return 1
|
||
brew install jdtls || return 1
|
||
command -v jdtls >/dev/null 2>&1
|
||
}
|
||
|
||
if ! command -v pi >/dev/null 2>&1; then
|
||
warn "找不到 pi,无法安装组合包。请先安装 Pi 并确保 pi 位于 PATH。"
|
||
exit 127
|
||
fi
|
||
|
||
say "正在安装 Pi 组合包:$PACKAGE_SOURCE"
|
||
if ! pi install "$PACKAGE_SOURCE"; then
|
||
warn "pi install 执行失败,已停止后续依赖检查。"
|
||
exit 1
|
||
fi
|
||
|
||
say "Pi 组合包安装完成,开始检查机器级 CLI 依赖。"
|
||
|
||
if command -v codegraph >/dev/null 2>&1; then
|
||
say "✓ codegraph 已安装"
|
||
elif ask_to_install "CodeGraph(提供 codegraph_explore)"; then
|
||
install_codegraph || record_install_failure "CodeGraph"
|
||
else
|
||
say "- 已跳过 CodeGraph;codegraph_explore 将不可用。"
|
||
fi
|
||
|
||
if command -v kotlin-lsp >/dev/null 2>&1; then
|
||
say "✓ kotlin-lsp 已安装"
|
||
elif ask_to_install "kotlin-lsp(Kotlin LSP)"; then
|
||
install_kotlin_lsp || record_install_failure "kotlin-lsp"
|
||
else
|
||
say "- 已跳过 kotlin-lsp;Kotlin LSP 功能将不可用。"
|
||
fi
|
||
|
||
java_ok=0
|
||
if command -v java >/dev/null 2>&1; then
|
||
java_major=$(java_major_version || true)
|
||
if [ -n "$java_major" ] && [ "$java_major" -ge 21 ]; then
|
||
java_ok=1
|
||
say "✓ Java $java_major 已安装(满足 Java 21+)"
|
||
fi
|
||
fi
|
||
|
||
if [ "$java_ok" -eq 0 ]; then
|
||
if ask_to_install "Java 21+(JDT LS 运行时)"; then
|
||
if install_java_21; then
|
||
java_ok=1
|
||
else
|
||
record_install_failure "Java 21+"
|
||
fi
|
||
else
|
||
say "- 已跳过 Java 21+;JDT LS 可能无法启动。"
|
||
fi
|
||
fi
|
||
|
||
if command -v jdtls >/dev/null 2>&1; then
|
||
say "✓ jdtls 已安装"
|
||
elif ask_to_install "jdtls(Java LSP)"; then
|
||
install_jdtls || record_install_failure "jdtls"
|
||
else
|
||
say "- 已跳过 jdtls;Java LSP 功能将不可用。"
|
||
fi
|
||
|
||
say "依赖检查完成。RTK 命令改写默认关闭,因此未检查可选的 rtk CLI。"
|
||
exit "$install_failed"
|