@@ -5,7 +5,21 @@ REPO="hunter-ji/rime-mate"
55BASE_URL=" https://github.com/$REPO /releases/latest/download"
66TOOL_NAME=" rime-mate"
77
8+ # 以下变量仅用于 CI/本地自测
9+ TEST_BASE_URL=" ${TEST_BASE_URL:- } " # 覆盖下载源,指向本地 HTTP 服务器
10+ TEST_RIME_DIR=" ${TEST_RIME_DIR:- } " # 覆盖 RIME 目录,避免写入真实目录
11+ CI_MODE=" ${CI_MODE:- 0} " # CI 模式下跳过交互(open/xattr 等)
12+ VERSION_OVERRIDE=" ${VERSION_OVERRIDE:- } " # 指定版本号,跳过 GitHub API 请求
13+
814detect_rime_dir () {
15+ if [ -n " $TEST_RIME_DIR " ]; then
16+ # CI/测试模式:使用临时目录代替真实 RIME 路径
17+ mkdir -p " $TEST_RIME_DIR "
18+ echo " 🔧 使用测试 RIME 目录:$TEST_RIME_DIR "
19+ export RIME_DIR=" $TEST_RIME_DIR "
20+ return
21+ fi
22+
923 home=" $HOME "
1024 system=" $( uname -s) "
1125
@@ -84,7 +98,13 @@ get_os_arch() {
8498
8599 echo " ${TOOL_NAME} -${os} -${arch} "
86100}
101+
87102FILE_NAME=" $( get_os_arch) "
103+ # 仅当设置了测试源时才覆盖下载地址,默认保持生产 URL
104+ EFFECTIVE_BASE_URL=" $BASE_URL "
105+ if [ -n " $TEST_BASE_URL " ]; then
106+ EFFECTIVE_BASE_URL=" $TEST_BASE_URL "
107+ fi
88108
89109# --- 步骤A: 环境检测与版本检查 ---
90110MISSING_FILES=false
@@ -98,22 +118,32 @@ else
98118 echo " 🔍 环境完整,正在检查更新..."
99119fi
100120
101- LATEST_VERSION=" $( curl -s " https://api.github.com/repos/$REPO /releases/latest" \
102- | sed -n ' s/.*"tag_name":[[:space:]]*"\([^"]*\)".*/\1/p' ) "
103-
104- if [ -z " $LATEST_VERSION " ]; then
105- echo " ⚠️ 版本信息获取失败,可能是网络或代理问题,将尝试不使用代理获取版本信息"
106- LATEST_VERSION=" $( curl -s --noproxy " *" " https://api.github.com/repos/$REPO /releases/latest" \
121+ # 如指定 VERSION_OVERRIDE,则直接使用指定版本;否则向 GitHub 查询最新版本
122+ if [ -n " $VERSION_OVERRIDE " ]; then
123+ LATEST_VERSION=" $VERSION_OVERRIDE "
124+ else
125+ LATEST_VERSION=" $( curl -s --max-time 15 " https://api.github.com/repos/$REPO /releases/latest" \
107126 | sed -n ' s/.*"tag_name":[[:space:]]*"\([^"]*\)".*/\1/p' ) "
127+
128+ if [ -z " $LATEST_VERSION " ]; then
129+ echo " ⚠️ 版本信息获取失败,可能是网络或代理问题,将尝试不使用代理获取版本信息"
130+ LATEST_VERSION=" $( curl -s --noproxy " *" --max-time 10 " https://api.github.com/repos/$REPO /releases/latest" \
131+ | sed -n ' s/.*"tag_name":[[:space:]]*"\([^"]*\)".*/\1/p' ) "
132+ fi
108133fi
109134
110135NEED_DOWNLOAD=false
111136VERSION_TO_WRITE=" "
112137
113138if [ -z " $LATEST_VERSION " ]; then
114- echo " ⚠️ 无法获取最新版本信息,将尝试强制安装..."
115- NEED_DOWNLOAD=true
116- VERSION_TO_WRITE=" unknown"
139+ if [ " $MISSING_FILES " = true ]; then
140+ echo " ⚠️ 无法获取最新版本信息,且本地文件缺失,将尝试强制安装..."
141+ NEED_DOWNLOAD=true
142+ VERSION_TO_WRITE=" unknown"
143+ else
144+ echo " ⚠️ 无法获取最新版本信息,但检测到本地已安装。跳过更新,使用当前版本。"
145+ NEED_DOWNLOAD=false
146+ fi
117147else
118148 VERSION_TO_WRITE=" $LATEST_VERSION "
119149 if [ " $MISSING_FILES " = true ]; then
134164if [ " $NEED_DOWNLOAD " = true ]; then
135165 echo " ⬇️ 正在下载 $FILE_NAME ..."
136166 mkdir -p " $RIME_CONFIG_DIR "
137- curl -L " $BASE_URL /$FILE_NAME " -o " $BINARY_PATH "
167+ curl -L " $EFFECTIVE_BASE_URL /$FILE_NAME " -o " $BINARY_PATH "
138168
139169 if [ ! -s " $BINARY_PATH " ]; then
140170 echo " ❌ 下载失败或文件为空,请检查网络连接或服务器状态。"
@@ -145,7 +175,7 @@ if [ "$NEED_DOWNLOAD" = true ]; then
145175 echo " $VERSION_TO_WRITE " > " $VERSION_FILE "
146176 chmod +x " $BINARY_PATH "
147177
148- if [ " $( uname -s) " = " Darwin" ]; then
178+ if [ " $CI_MODE " != " 1 " ] && [ " $ ( uname -s) " = " Darwin" ]; then
149179 xattr -d com.apple.quarantine " $BINARY_PATH " 2> /dev/null
150180 fi
151181fi
179209
180210 chmod +x " $COMMAND_LINK "
181211
182- if [ " $( uname -s) " = " Darwin" ]; then
212+ if [ " $CI_MODE " != " 1 " ] && [ " $ ( uname -s) " = " Darwin" ]; then
183213 xattr -d com.apple.quarantine " $COMMAND_LINK " 2> /dev/null
184214 fi
185215
@@ -193,14 +223,18 @@ EOF
193223fi
194224
195225# --- 步骤C: 打开配置文件夹 ---
196- echo " 📂 正在打开 RIME 配置目录..."
197- case " $( uname -s) " in
198- Darwin) open " $RIME_DIR " ;;
199- Linux)
200- if command -v xdg-open > /dev/null 2>&1 ; then
201- xdg-open " $RIME_DIR "
202- else
203- echo " ⚠️ 未找到 xdg-open,无法自动打开文件夹,手动路径:$RIME_DIR "
204- fi
205- ;;
206- esac
226+ if [ " $CI_MODE " = " 1" ]; then
227+ echo " ℹ️ CI 模式已跳过自动打开 RIME 配置目录"
228+ else
229+ echo " 📂 正在打开 RIME 配置目录..."
230+ case " $( uname -s) " in
231+ Darwin) open " $RIME_DIR " ;;
232+ Linux)
233+ if command -v xdg-open > /dev/null 2>&1 ; then
234+ xdg-open " $RIME_DIR "
235+ else
236+ echo " ⚠️ 未找到 xdg-open,无法自动打开文件夹,手动路径:$RIME_DIR "
237+ fi
238+ ;;
239+ esac
240+ fi
0 commit comments