fix(ci): 修复 golangci-lint 和 API 合约测试失败

- 修复 errcheck: singleflight 返回值类型断言添加 ok 检查
- 修复 gofmt: 格式化 setting_service.go 和 claude_code_validator_test.go
- 修复 TestAPIContracts: 在 GET /admin/settings 期望中添加 min_claude_code_version 字段
This commit is contained in:
QTom
2026-03-01 16:39:21 +08:00
parent 4280aca82c
commit b2141a96e2
3 changed files with 20 additions and 16 deletions

View File

@@ -511,7 +511,8 @@ func TestAPIContracts(t *testing.T) {
"home_content": "", "home_content": "",
"hide_ccs_import_button": false, "hide_ccs_import_button": false,
"purchase_subscription_enabled": false, "purchase_subscription_enabled": false,
"purchase_subscription_url": "" "purchase_subscription_url": "",
"min_claude_code_version": ""
} }
}`, }`,
}, },

View File

@@ -65,11 +65,11 @@ func TestExtractVersion(t *testing.T) {
}{ }{
{"claude-cli/2.1.22 (darwin; arm64)", "2.1.22"}, {"claude-cli/2.1.22 (darwin; arm64)", "2.1.22"},
{"claude-cli/1.0.0", "1.0.0"}, {"claude-cli/1.0.0", "1.0.0"},
{"Claude-CLI/3.10.5 (linux; x86_64)", "3.10.5"}, // 大小写不敏感 {"Claude-CLI/3.10.5 (linux; x86_64)", "3.10.5"}, // 大小写不敏感
{"curl/8.0.0", ""}, // 非 Claude CLI {"curl/8.0.0", ""}, // 非 Claude CLI
{"", ""}, // 空字符串 {"", ""}, // 空字符串
{"claude-cli/", ""}, // 无版本号 {"claude-cli/", ""}, // 无版本号
{"claude-cli/2.1.22-beta", "2.1.22"}, // 带后缀仍提取主版本号 {"claude-cli/2.1.22-beta", "2.1.22"}, // 带后缀仍提取主版本号
} }
for _, tt := range tests { for _, tt := range tests {
got := v.ExtractVersion(tt.ua) got := v.ExtractVersion(tt.ua)
@@ -82,14 +82,14 @@ func TestCompareVersions(t *testing.T) {
a, b string a, b string
want int want int
}{ }{
{"2.1.0", "2.1.0", 0}, // 相等 {"2.1.0", "2.1.0", 0}, // 相等
{"2.1.1", "2.1.0", 1}, // patch 更大 {"2.1.1", "2.1.0", 1}, // patch 更大
{"2.0.0", "2.1.0", -1}, // minor 更小 {"2.0.0", "2.1.0", -1}, // minor 更小
{"3.0.0", "2.99.99", 1}, // major 更大 {"3.0.0", "2.99.99", 1}, // major 更大
{"1.0.0", "2.0.0", -1}, // major 更小 {"1.0.0", "2.0.0", -1}, // major 更小
{"0.0.1", "0.0.0", 1}, // patch 差异 {"0.0.1", "0.0.0", 1}, // patch 差异
{"", "1.0.0", -1}, // 空字符串 vs 正常版本 {"", "1.0.0", -1}, // 空字符串 vs 正常版本
{"v2.1.0", "2.1.0", 0}, // v 前缀处理 {"v2.1.0", "2.1.0", 0}, // v 前缀处理
} }
for _, tt := range tests { for _, tt := range tests {
got := CompareVersions(tt.a, tt.b) got := CompareVersions(tt.a, tt.b)

View File

@@ -891,7 +891,7 @@ func (s *SettingService) GetMinClaudeCodeVersion(ctx context.Context) string {
} }
} }
// singleflight: 同一时刻只有一个 goroutine 查询 DB其余复用结果 // singleflight: 同一时刻只有一个 goroutine 查询 DB其余复用结果
result, _, _ := minVersionSF.Do("min_version", func() (interface{}, error) { result, _, _ := minVersionSF.Do("min_version", func() (any, error) {
// 二次检查,避免排队的 goroutine 重复查询 // 二次检查,避免排队的 goroutine 重复查询
if cached, ok := minVersionCache.Load().(*cachedMinVersion); ok { if cached, ok := minVersionCache.Load().(*cachedMinVersion); ok {
if time.Now().UnixNano() < cached.expiresAt { if time.Now().UnixNano() < cached.expiresAt {
@@ -917,7 +917,10 @@ func (s *SettingService) GetMinClaudeCodeVersion(ctx context.Context) string {
}) })
return value, nil return value, nil
}) })
return result.(string) if s, ok := result.(string); ok {
return s
}
return ""
} }
// SetStreamTimeoutSettings 设置流超时处理配置 // SetStreamTimeoutSettings 设置流超时处理配置