All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m45s
主要变更: 1. OpenAPI 文档契约对齐 - 统一错误响应字段名为 msg(非 message) - 规范 envelope 响应结构(code, msg, data, timestamp) - 个人客户路由纳入文档体系(使用 Register 机制) - 新增 BuildDocHandlers() 统一管理 handler 构造 - 确保文档生成的幂等性 2. Service 层错误处理统一 - 全面替换 fmt.Errorf 为 errors.New/Wrap - 统一错误码使用规范 - Handler 层参数校验不泄露底层细节 - 新增错误码验证集成测试 3. 代码质量提升 - 删除未使用的 Task handler 和路由 - 新增代码规范检查脚本(check-service-errors.sh) - 新增注释路径一致性检查(check-comment-paths.sh) - 更新 API 文档生成指南 4. OpenSpec 归档 - 归档 openapi-contract-alignment 变更(63 tasks) - 归档 service-error-unify-core 变更 - 归档 service-error-unify-support 变更 - 归档 code-cleanup-docs-update 变更 - 归档 handler-validation-security 变更 - 同步 delta specs 到主规范文件 影响范围: - pkg/openapi: 新增 handlers.go,优化 generator.go - internal/service/*: 48 个 service 文件错误处理统一 - internal/handler/admin: 优化参数校验错误提示 - internal/routes: 个人客户路由改造,删除 task 路由 - scripts: 新增 3 个代码检查脚本 - docs: 更新 OpenAPI 文档(15750+ 行) - openspec/specs: 同步 3 个主规范文件 破坏性变更:无 向后兼容:是
9.2 KiB
9.2 KiB
CI 检查脚本规范
概述
本变更新增了自动化代码规范检查脚本,用于在 CI/CD 流程中检测规范违规。
检查脚本列表
1. Service 层错误处理检查
文件:scripts/check-service-errors.sh
用途:检查 Service 层是否使用 fmt.Errorf 对外返回错误
检查范围:
- 目录:
internal/service/**/*.go - 排除:测试文件(
*_test.go) - 排除:带有
// whitelist:注释的行
检查逻辑:
FILES=$(find internal/service -name "*.go" -type f)
VIOLATIONS=$(grep -n "fmt\.Errorf" $FILES | grep -v "// whitelist:")
if [ -n "$VIOLATIONS" ]; then
echo "❌ 发现 Service 层使用 fmt.Errorf"
exit 1
fi
退出码:
0:检查通过1:检查失败(发现违规)
白名单机制:
如果某处确实需要使用 fmt.Errorf(如内部调试),添加注释:
// 特殊场景:内部日志调试
debugErr := fmt.Errorf("debug info: %v", data) // whitelist:
logger.Debug("调试信息", zap.Error(debugErr))
2. 注释路径一致性检查
文件:scripts/check-comment-paths.sh
用途:检查 Handler 层注释中是否残留已弃用的 /api/v1 路径
检查范围:
- 目录:
internal/handler/**/*.go - 排除:测试文件(
*_test.go)
检查逻辑:
VIOLATIONS=$(grep -rn "/api/v1" internal/handler/ | grep -v "_test.go")
if [ -n "$VIOLATIONS" ]; then
echo "❌ 发现残留的 /api/v1 路径注释"
exit 1
fi
退出码:
0:检查通过1:检查失败(发现残留路径)
正确路径:
/api/admin/*:后台管理接口/api/h5/*:H5 端接口/api/c/v1/*:个人客户接口
3. 统一检查脚本
文件:scripts/check-all.sh
用途:运行所有代码规范检查
检查流程:
set -e # 任何检查失败立即退出
bash scripts/check-service-errors.sh
bash scripts/check-comment-paths.sh
# 未来可添加更多检查...
echo "✅ 所有检查通过"
使用场景:
- 本地开发:提交代码前运行
- CI/CD:自动化检查流程
- Pre-commit hook:提交前自动检查(可选)
脚本规范
输出格式
所有检查脚本应遵循统一的输出格式:
# 1. 开始提示
echo "🔍 检查 [检查项名称]..."
# 2. 检查逻辑
VIOLATIONS=$(检查命令)
# 3. 结果输出
if [ -n "$VIOLATIONS" ]; then
echo ""
echo "❌ 发现违规:"
echo "$VIOLATIONS"
echo ""
echo "修复建议:"
echo " - 建议1"
echo " - 建议2"
exit 1
fi
echo "✅ [检查项名称]检查通过"
错误消息规范
错误消息应包含:
- 问题描述:明确说明发现了什么问题
- 违规位置:文件路径和行号
- 修复建议:如何修复这些问题
- 白名单机制:如何豁免特殊场景(如适用)
示例:
❌ 发现 Service 层使用 fmt.Errorf:
internal/service/shop.go:45: return fmt.Errorf("店铺不存在")
internal/service/account.go:78: return fmt.Errorf("创建失败: %w", err)
请使用以下方式替代:
- 业务错误:errors.New(code, msg)
- 系统错误:errors.Wrap(code, err, msg)
如果某处确实需要使用 fmt.Errorf(如内部调试),请添加注释:// whitelist:
脚本权限
所有脚本应添加执行权限:
chmod +x scripts/check-service-errors.sh
chmod +x scripts/check-comment-paths.sh
chmod +x scripts/check-all.sh
Shell 兼容性
脚本应使用 Bash 标准语法,兼容 Linux 和 macOS:
- 使用
#!/bin/bash作为 shebang - 避免使用非标准工具(仅依赖 grep、find、bash 等)
- 使用
set -e确保错误自动退出
CI 集成(可选)
GitHub Actions 配置
文件:.github/workflows/lint.yml
name: Code Quality Check
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: '1.25'
- name: Run Code Quality Checks
run: bash scripts/check-all.sh
本地使用
开发者可以在本地运行检查:
# 运行所有检查
bash scripts/check-all.sh
# 运行单项检查
bash scripts/check-service-errors.sh
bash scripts/check-comment-paths.sh
Pre-commit Hook(可选)
可以配置 Git pre-commit hook 在提交前自动检查:
文件:.git/hooks/pre-commit
#!/bin/bash
echo "运行代码规范检查..."
bash scripts/check-all.sh
if [ $? -ne 0 ]; then
echo ""
echo "代码规范检查失败,提交已取消"
echo "请修复上述问题后重新提交"
exit 1
fi
echo "代码规范检查通过,继续提交..."
扩展性设计
添加新的检查规则
添加新的检查规则的步骤:
-
创建检查脚本:
scripts/check-{name}.sh#!/bin/bash echo "🔍 检查 [检查项名称]..." # 检查逻辑 VIOLATIONS=$(检查命令) if [ -n "$VIOLATIONS" ]; then echo "❌ 发现违规" echo "$VIOLATIONS" exit 1 fi echo "✅ 检查通过" -
添加执行权限:
chmod +x scripts/check-{name}.sh -
集成到统一脚本: 在
scripts/check-all.sh中添加:bash scripts/check-{name}.sh -
测试脚本:
# 测试通过场景 bash scripts/check-{name}.sh # 应返回退出码 0 # 测试失败场景(制造违规) # 验证能检测到违规并返回退出码 1 -
更新文档: 在
README.md和本规范文档中添加新检查的说明
检查规则示例
以下是一些可能添加的检查规则:
| 检查项 | 脚本名称 | 检查内容 |
|---|---|---|
| 常量硬编码 | check-constants.sh |
检查代码中是否有硬编码的 magic numbers 和字符串 |
| 日志规范 | check-logging.sh |
检查日志是否使用结构化字段(zap.String、zap.Int 等) |
| TODO 标记 | check-todos.sh |
统计代码中的 TODO 数量,超过阈值时警告 |
| 导入路径 | check-imports.sh |
检查是否使用了禁止的包(如 fmt.Println) |
| 测试覆盖率 | check-coverage.sh |
检查测试覆盖率是否达标 |
性能考虑
检查耗时
所有检查脚本应在合理时间内完成:
- 单项检查:< 10 秒
- 统一检查:< 30 秒
优化建议
- 并行执行:多个独立检查可以并行运行
- 缓存结果:避免重复扫描相同文件
- 增量检查:仅检查变更的文件(CI 场景)
并行执行示例
#!/bin/bash
# scripts/check-all-parallel.sh
# 在后台运行检查
bash scripts/check-service-errors.sh &
PID1=$!
bash scripts/check-comment-paths.sh &
PID2=$!
# 等待所有检查完成
wait $PID1
RESULT1=$?
wait $PID2
RESULT2=$?
# 检查结果
if [ $RESULT1 -ne 0 ] || [ $RESULT2 -ne 0 ]; then
echo "❌ 至少有一项检查失败"
exit 1
fi
echo "✅ 所有检查通过"
测试策略
脚本测试清单
每个检查脚本应测试以下场景:
- 通过场景:无违规时返回 0
- 失败场景:有违规时返回 1 并输出错误
- 白名单机制:白名单注释生效(如适用)
- 边界情况:空目录、特殊字符等
测试示例
# 测试 Service 层错误检查
# 1. 通过场景
bash scripts/check-service-errors.sh
echo "退出码: $?" # 应为 0
# 2. 失败场景
echo 'return fmt.Errorf("test")' >> internal/service/test_violation.go
bash scripts/check-service-errors.sh
echo "退出码: $?" # 应为 1
rm internal/service/test_violation.go
# 3. 白名单机制
echo 'return fmt.Errorf("debug") // whitelist:' >> internal/service/test_whitelist.go
bash scripts/check-service-errors.sh
echo "退出码: $?" # 应为 0
rm internal/service/test_whitelist.go
维护指南
定期维护
- 每月审查:检查是否有新的规范需要自动化检查
- 每季度更新:根据团队反馈优化错误消息和修复建议
- 每半年评估:评估检查脚本的性能和有效性
处理误报
如果检查脚本产生误报:
- 评估规则:检查规则是否过于严格
- 白名单机制:考虑添加白名单支持
- 改进检测:优化正则表达式或检查逻辑
- 文档说明:在规范文档中说明特殊场景
版本控制
检查脚本应纳入版本控制:
- 脚本修改需要通过 Code Review
- 重大变更需要更新文档
- 保持脚本向后兼容(或提供迁移指南)
总结
本 CI 检查规范定义了:
- 检查脚本列表:Service 层错误检查、注释路径检查、统一检查
- 脚本规范:输出格式、错误消息、Shell 兼容性
- CI 集成:GitHub Actions、本地使用、Pre-commit Hook
- 扩展性设计:添加新规则的步骤和示例
- 性能优化:并行执行、增量检查
- 测试策略:通过/失败/白名单/边界情况
- 维护指南:定期审查、处理误报、版本控制
这些脚本确保代码质量和规范一致性,支持自动化检查和团队协作。