Skip to content

Commit 92a7647

Browse files
committed
feat: 添加测试流水线,更新setup适配测试场景
1 parent 5fd07f5 commit 92a7647

2 files changed

Lines changed: 140 additions & 23 deletions

File tree

.github/workflows/ci.yml

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
name: ci
2+
3+
on:
4+
push:
5+
branches: [ "main", "master" ]
6+
pull_request:
7+
workflow_dispatch:
8+
9+
10+
jobs:
11+
test:
12+
strategy:
13+
fail-fast: false
14+
matrix:
15+
os: [ ubuntu-latest, macos-latest ]
16+
runs-on: ${{ matrix.os }}
17+
steps:
18+
- name: Checkout
19+
uses: actions/checkout@v4
20+
21+
- name: Setup Go
22+
uses: actions/setup-go@v5
23+
with:
24+
go-version: '1.25.5'
25+
26+
- name: Go test
27+
run: go test ./...
28+
29+
- name: Build binary for current platform
30+
shell: bash
31+
run: |
32+
set -e
33+
GOOS=$(go env GOOS)
34+
GOARCH=$(go env GOARCH)
35+
OUT="rime-mate-${GOOS}-${GOARCH}"
36+
BUILD_DIR="${RUNNER_TEMP}/rime-mate-build"
37+
mkdir -p "$BUILD_DIR"
38+
CGO_ENABLED=0 GOOS="$GOOS" GOARCH="$GOARCH" go build -o "$BUILD_DIR/$OUT" .
39+
echo "OUT_FILE=$BUILD_DIR/$OUT" >> "$GITHUB_ENV"
40+
echo "BUILD_DIR=$BUILD_DIR" >> "$GITHUB_ENV"
41+
42+
- name: Start local file server
43+
shell: bash
44+
run: |
45+
set -e
46+
cd "$BUILD_DIR"
47+
python3 -m http.server 8000 >/tmp/rime-http.log 2>&1 &
48+
echo $! > /tmp/rime-http.pid
49+
50+
- name: Run setup.sh against local server
51+
shell: bash
52+
run: |
53+
set -e
54+
mkdir -p "$RUNNER_TEMP/rime-test"
55+
TEST_BASE_URL="http://127.0.0.1:8000" \
56+
TEST_RIME_DIR="$RUNNER_TEMP/rime-test" \
57+
VERSION_OVERRIDE="dev-ci" \
58+
CI_MODE=1 \
59+
bash setup.sh
60+
61+
- name: Validate install artifacts
62+
shell: bash
63+
run: |
64+
set -e
65+
ls -l "$RUNNER_TEMP/rime-test/rime-mate-config"
66+
test -f "$RUNNER_TEMP/rime-test/rime-mate-config/version"
67+
test -x "$RUNNER_TEMP/rime-test/rime-mate-config/rime-mate"
68+
69+
# 检查是否存在匹配 Rime配置助手.* 的文件
70+
shopt -s nullglob
71+
files=("$RUNNER_TEMP/rime-test"/Rime配置助手.*)
72+
if [ ${#files[@]} -eq 0 ]; then
73+
echo "未找到 Rime配置助手 文件" >&2
74+
exit 1
75+
fi
76+
77+
- name: Stop local file server
78+
if: always()
79+
shell: bash
80+
run: |
81+
if [ -f /tmp/rime-http.pid ]; then
82+
kill "$(cat /tmp/rime-http.pid)" || true
83+
fi

setup.sh

Lines changed: 57 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,21 @@ REPO="hunter-ji/rime-mate"
55
BASE_URL="https://github.com/$REPO/releases/latest/download"
66
TOOL_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+
814
detect_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+
87102
FILE_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: 环境检测与版本检查 ---
90110
MISSING_FILES=false
@@ -98,22 +118,32 @@ else
98118
echo "🔍 环境完整,正在检查更新..."
99119
fi
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
108133
fi
109134

110135
NEED_DOWNLOAD=false
111136
VERSION_TO_WRITE=""
112137

113138
if [ -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
117147
else
118148
VERSION_TO_WRITE="$LATEST_VERSION"
119149
if [ "$MISSING_FILES" = true ]; then
@@ -134,7 +164,7 @@ fi
134164
if [ "$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
151181
fi
@@ -179,7 +209,7 @@ EOF
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
193223
fi
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

Comments
 (0)