Skip to content

Commit 7e60596

Browse files
committed
Merge branch '3.6.x'
2 parents aade35d + e5814d3 commit 7e60596

File tree

6 files changed

+299
-104
lines changed

6 files changed

+299
-104
lines changed

.agent/workflows/test.md

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,19 @@ description: 执行完整的测试流程,包括单元测试、构建验证和
2323

2424
### 3. 启动 FIT 服务进行集成测试
2525

26-
**关键要求:**
27-
- `fit` 命令无法在包含 FIT 框架的目录中执行
28-
- 必须在一个新建的动态插件目录下执行
29-
3026
**启动步骤:**
3127

32-
创建动态插件目录并启动 FIT 服务:
33-
```bash
34-
mkdir -p dynamic-plugins
35-
cd dynamic-plugins
36-
../build/bin/fit start
37-
```
28+
1. 创建动态插件目录:
29+
- `run_command("mkdir -p dynamic-plugins")`
3830

39-
- `run_command("mkdir -p dynamic-plugins && cd dynamic-plugins && ../build/bin/fit start", timeout=120000, run_in_background=true)`
31+
2. 启动 FIT 服务:
32+
- `run_command("build/bin/fit start --plugin-dir=dynamic-plugins", timeout=120000, run_in_background=true)`
4033

4134
使用后台运行模式,超时时间设置为 120 秒(2分钟),给服务足够的启动时间。
4235

36+
**说明:**
37+
- 使用 `--plugin-dir=dynamic-plugins` 参数指定插件目录
38+
4339
**启动成功的判断标准:**
4440
- 输出日志中包含启动成功的关键信息
4541
- 没有出现 ERROR 或 FATAL 级别的日志
@@ -69,8 +65,10 @@ cd dynamic-plugins
6965

7066
### 5. 清理测试环境
7167

72-
测试完成后,停止 FIT 服务并返回项目根目录
68+
测试完成后,停止 FIT 服务并清理动态创建的目录
7369
- `run_command("pkill -f fit-discrete-launcher")`
70+
- `run_command("rm -rf build")`
71+
- `run_command("rm -rf dynamic-plugins")`
7472

7573
### 6. 生成测试报告
7674

.claude/commands/test.md

Lines changed: 21 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -3,98 +3,34 @@
33
**用法:**
44
- `/test` - 执行完整测试流程
55

6-
**执行步骤**
6+
**执行方式**
77

8-
## 1. 清理构建产物
9-
10-
删除之前的构建目录:
11-
```bash
12-
rm -rf build
13-
```
14-
15-
## 2. 执行单元测试和构建
16-
17-
运行 Maven 构建,这会执行全量单元测试并生成构建产物:
18-
```bash run_in_background timeout=900000
19-
mvn clean install
20-
```
21-
22-
**说明:** 使用后台运行模式以避免超时限制
23-
24-
**预期结果:**
25-
- 所有单元测试通过
26-
- 在根目录生成 `build/` 目录
27-
- 构建产物包含 `build/bin/fit` 启动脚本
28-
29-
## 3. 启动 FIT 服务进行集成测试
30-
31-
**关键要求:**
32-
- `fit` 命令无法在包含 FIT 框架的目录中执行
33-
- 必须在一个新建的动态插件目录下执行
34-
35-
**启动步骤:**
36-
37-
**创建动态插件目录并启动**
38-
```bash run_in_background timeout=120000
39-
mkdir -p dynamic-plugins
40-
cd dynamic-plugins
41-
../build/bin/fit start
42-
```
43-
44-
使用后台运行模式,超时时间设置为 120 秒(2分钟),给服务足够的启动时间。
45-
46-
**启动成功的判断标准:**
47-
- 输出日志中包含启动成功的关键信息
48-
- 没有出现 ERROR 或 FATAL 级别的日志
49-
- 服务端口(默认 8080)成功监听
50-
51-
## 4. 验证服务功能
52-
53-
### 4.1 健康检查接口验证(推荐)
54-
55-
访问 Actuator 健康检查接口,验证插件加载情况:
56-
```bash
57-
curl -s http://localhost:8080/actuator/plugins
58-
```
59-
60-
**预期结果:**
61-
- HTTP 状态码 200
62-
- 返回 JSON 格式的插件列表
63-
- 包含核心插件信息
64-
65-
### 4.2 Swagger 文档页面验证
66-
67-
访问 OpenAPI 文档页面,验证 HTTP 服务和文档生成功能:
68-
```bash
69-
curl -s http://localhost:8080/openapi.html
8+
使用自动化测试脚本执行完整的测试流程:
9+
```bash timeout=900000
10+
./.claude/run-test.sh
7011
```
7112

72-
**预期结果:**
73-
- HTTP 状态码 200
74-
- 返回 HTML 内容
75-
- 包含 Swagger UI 页面
13+
**测试流程包括:**
7614

77-
## 5. 清理测试环境
78-
79-
测试完成后,停止 FIT 服务并返回项目根目录:
80-
81-
```bash
82-
cd ..
83-
# 停止 FIT 服务(找到进程并终止)
84-
```
15+
1. **清理构建产物** - 删除之前的 build 目录
16+
2. **执行单元测试和构建** - 运行 `mvn clean install` 执行全量单元测试
17+
3. **创建动态插件目录** - 创建 `dynamic-plugins` 目录
18+
4. **启动 FIT 服务** - 使用 `build/bin/fit start` 启动服务
19+
5. **验证健康检查接口** - 访问 `/actuator/plugins` 接口
20+
6. **验证 Swagger 文档** - 访问 `/openapi.html` 页面
21+
7. **清理测试环境** - 停止服务并删除构建产物
8522

8623
**测试报告:**
8724

88-
生成测试报告,包含:
89-
1. ✅/ 单元测试结果
90-
2. ✅/ 构建状态
91-
3. ✅/ FIT 服务启动状态
92-
4. ✅/ 健康检查接口响应
93-
5. ✅/ Swagger 文档页面可访问性
25+
脚本会自动生成测试报告,包含:
26+
1. ✅/ 单元测试结果
27+
2. ✅/ 构建状态
28+
3. ✅/ FIT 服务启动状态
29+
4. ✅/ 健康检查接口响应
30+
5. ✅/ Swagger 文档页面可访问性
9431

9532
**注意事项:**
9633

97-
1. **启动目录限制**:必须在动态插件目录下执行 `fit start`
98-
2. **端口冲突**:确保 8080 端口未被占用
99-
3. **权限问题**:确保 `build/bin/fit` 有执行权限
100-
4. **进程管理**:测试完成后记得停止 FIT 服务
34+
1. **端口冲突**:确保 8080 端口未被占用
35+
2. **权限配置**:测试脚本已在 `.claude/settings.json` 中配置自动授权
36+
3. **完全自动化**:整个测试流程无需手动确认,自动执行所有步骤

.claude/project-rules.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,62 @@ Bash("OWNER_GROUP=$(ls -l README.md | awk '{print $3\":\"$4}') && sudo chown $OW
187187
- 新功能:`[模块名] Add <feature-description>`
188188
- 功能增强:`[模块名] Enhance <feature-description>`
189189
190+
## Git 提交和版本控制规范
191+
192+
### 规则 3: 禁止自动提交代码
193+
194+
**⚠️ 重要规则(CRITICAL):**
195+
196+
**绝对不要**自动执行 `git commit` 或 `git add` 命令,除非用户明确使用 `/commit` 命令请求提交。
197+
198+
**原因:**
199+
- 项目配置了 `/commit` 命令,说明用户希望自己控制提交时机
200+
- 用户可能需要在提交前进行额外的检查或修改
201+
- 自动提交会剥夺用户对版本控制的控制权
202+
203+
**正确做法:**
204+
205+
1. **完成代码修改后**
206+
- ✅ 告知用户有哪些文件被修改
207+
- ✅ 展示修改的内容摘要
208+
- ✅ 提醒用户可以使用 `/commit` 命令进行提交
209+
- ❌ 不要自动执行 `git add` 或 `git commit`
210+
211+
2. **仅在用户明确请求时才提交**
212+
- ✅ 用户运行 `/commit` 命令
213+
- ✅ 用户明确说"提交这些修改"、"commit these changes"
214+
- ❌ 不要在用户只是让你"修复问题"或"完成任务"时自动提交
215+
216+
3. **示例对比**
217+
218+
**❌ 错误做法:**
219+
```
220+
User: 请修复测试命令的清理步骤
221+
Assistant:
222+
[修复代码]
223+
[自动执行 git add 和 git commit] # ❌ 错误!
224+
```
225+
226+
**✅ 正确做法:**
227+
```
228+
User: 请修复测试命令的清理步骤
229+
Assistant:
230+
[修复代码]
231+
我已经完成了修复,修改了以下文件:
232+
- .claude/commands/test.md
233+
- .agent/workflows/test.md
234+
235+
你可以使用 `/commit` 命令来提交这些修改。
236+
# ✅ 正确!等待用户决定何时提交
237+
```
238+
239+
**例外情况:**
240+
241+
只有在以下情况下可以自动提交:
242+
1. 用户明确说"修复后直接提交"或"fix and commit"
243+
2. 用户使用了 `/commit` 命令
244+
3. 某个 workflow 或 slash command 的定义中明确要求自动提交
245+
190246
## 通用最佳实践
191247
192248
### 文件操作
@@ -195,6 +251,7 @@ Bash("OWNER_GROUP=$(ls -l README.md | awk '{print $3\":\"$4}') && sudo chown $OW
195251
- 批量操作后统一修改权限
196252
197253
### Git 操作
254+
- **绝对不要自动提交代码**(参见规则 3)
198255
- 提交前检查 `.github/` 目录中的规范
199256
- 遵循项目的 commit message 格式
200257
- PR 描述要完整、清晰

.claude/run-test.sh

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
#!/bin/bash
2+
# FIT Framework 完整测试脚本
3+
4+
set -e # 遇到错误立即退出
5+
6+
echo "=========================================="
7+
echo "FIT Framework 测试流程"
8+
echo "=========================================="
9+
10+
# 1. 清理构建产物
11+
echo ""
12+
echo "[1/6] 清理构建产物..."
13+
rm -rf build
14+
15+
# 2. 执行单元测试和构建
16+
echo ""
17+
echo "[2/6] 执行 Maven 构建和单元测试..."
18+
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
19+
LOG_FILE="/tmp/maven-build-${TIMESTAMP}.log"
20+
echo "构建日志保存到: $LOG_FILE"
21+
22+
mvn clean install > "$LOG_FILE" 2>&1
23+
BUILD_STATUS=$?
24+
25+
# 只显示最后 100 行(包含构建摘要)
26+
echo "========== 构建摘要 =========="
27+
tail -100 "$LOG_FILE"
28+
29+
# 如果构建失败,显示错误信息并退出
30+
if [ $BUILD_STATUS -ne 0 ]; then
31+
echo ""
32+
echo "========== 错误详情 =========="
33+
grep -A 5 "BUILD FAILURE\|COMPILATION ERROR\|ERROR\|FAILED" "$LOG_FILE" | head -50
34+
rm "$LOG_FILE"
35+
exit $BUILD_STATUS
36+
fi
37+
38+
rm "$LOG_FILE"
39+
echo "✓ Maven 构建成功"
40+
41+
# 3. 创建动态插件目录
42+
echo ""
43+
echo "[3/6] 创建动态插件目录..."
44+
mkdir -p dynamic-plugins
45+
echo "✓ 动态插件目录创建成功"
46+
47+
# 4. 启动 FIT 服务
48+
echo ""
49+
echo "[4/6] 启动 FIT 服务..."
50+
FIT_LOG="/tmp/fit-server-${TIMESTAMP}.log"
51+
build/bin/fit start --plugin-dir=dynamic-plugins > "$FIT_LOG" 2>&1 &
52+
FIT_PID=$!
53+
echo "FIT 服务进程 PID: $FIT_PID"
54+
echo "FIT 服务日志: $FIT_LOG"
55+
56+
# 等待服务启动(最多 60 秒)
57+
echo "等待服务启动..."
58+
for i in {1..60}; do
59+
if curl -s http://localhost:8080/actuator/health > /dev/null 2>&1; then
60+
echo "✓ FIT 服务启动成功"
61+
break
62+
fi
63+
if [ $i -eq 60 ]; then
64+
echo "✗ FIT 服务启动超时"
65+
echo "========== 启动日志 =========="
66+
cat "$FIT_LOG"
67+
kill $FIT_PID 2>/dev/null || true
68+
exit 1
69+
fi
70+
sleep 1
71+
done
72+
73+
# 5. 验证健康检查接口
74+
echo ""
75+
echo "[5/6] 验证健康检查接口..."
76+
PLUGINS_RESPONSE=$(curl -s http://localhost:8080/actuator/plugins)
77+
if [ $? -eq 0 ]; then
78+
echo "✓ 健康检查接口正常"
79+
echo "插件列表响应:"
80+
echo "$PLUGINS_RESPONSE" | head -20
81+
else
82+
echo "✗ 健康检查接口失败"
83+
pkill -f fit-discrete-launcher || true
84+
exit 1
85+
fi
86+
87+
# 6. 验证 Swagger 文档页面
88+
echo ""
89+
echo "[6/6] 验证 Swagger 文档页面..."
90+
SWAGGER_RESPONSE=$(curl -s http://localhost:8080/openapi.html)
91+
if [ $? -eq 0 ] && echo "$SWAGGER_RESPONSE" | grep -q "swagger" 2>/dev/null || echo "$SWAGGER_RESPONSE" | grep -q "Swagger" 2>/dev/null; then
92+
echo "✓ Swagger 文档页面可访问"
93+
else
94+
echo "⚠ Swagger 文档页面响应异常(可能正常,取决于配置)"
95+
fi
96+
97+
# 7. 清理测试环境
98+
echo ""
99+
echo "[7/7] 清理测试环境..."
100+
echo "停止 FIT 服务..."
101+
pkill -f fit-discrete-launcher || true
102+
sleep 2
103+
104+
echo "删除构建产物和动态插件目录..."
105+
rm -rf build
106+
rm -rf dynamic-plugins
107+
rm -f "$FIT_LOG"
108+
109+
echo ""
110+
echo "=========================================="
111+
echo "✓ 测试流程完成"
112+
echo "=========================================="

0 commit comments

Comments
 (0)