mirror of
https://gitea.com/gitea/gitea-mcp.git
synced 2026-08-27 10:37:44 +00:00
6694ec6873
debug.ReadBuildInfo() can report a version whose major version does not match the module path's major version suffix (e.g. a v2 tag on a module without a /v2 path), which is unreliable per Go's module versioning rules. Extract the decision into resolveVersion() and only accept the build version when its major matches the module path's implied major version, otherwise fall back to the dev version. Fixes #231. Co-Authored-By: Codet <codet@commitgo.dev> (GPT-5-Codex)
62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"runtime/debug"
|
|
"testing"
|
|
)
|
|
|
|
func TestResolveVersion(t *testing.T) {
|
|
cases := []struct {
|
|
name string
|
|
dev string
|
|
info *debug.BuildInfo
|
|
want string
|
|
}{
|
|
{
|
|
name: "nil build info falls back to dev version",
|
|
dev: "dev",
|
|
info: nil,
|
|
want: "dev",
|
|
},
|
|
{
|
|
name: "devel version falls back to dev version",
|
|
dev: "dev",
|
|
info: &debug.BuildInfo{Main: debug.Module{Path: "gitea.com/gitea/gitea-mcp", Version: "(devel)"}},
|
|
want: "dev",
|
|
},
|
|
{
|
|
name: "empty version falls back to dev version",
|
|
dev: "dev",
|
|
info: &debug.BuildInfo{Main: debug.Module{Path: "gitea.com/gitea/gitea-mcp", Version: ""}},
|
|
want: "dev",
|
|
},
|
|
{
|
|
name: "v1 version accepted for module path without major suffix",
|
|
dev: "dev",
|
|
info: &debug.BuildInfo{Main: debug.Module{Path: "gitea.com/gitea/gitea-mcp", Version: "v1.2.3"}},
|
|
want: "v1.2.3",
|
|
},
|
|
{
|
|
name: "v2 version rejected when module path has no /v2 suffix",
|
|
dev: "dev",
|
|
info: &debug.BuildInfo{Main: debug.Module{Path: "gitea.com/gitea/gitea-mcp", Version: "v2.0.0"}},
|
|
want: "dev",
|
|
},
|
|
{
|
|
name: "v2 version accepted when module path has /v2 suffix",
|
|
dev: "dev",
|
|
info: &debug.BuildInfo{Main: debug.Module{Path: "gitea.com/gitea/gitea-mcp/v2", Version: "v2.0.0"}},
|
|
want: "v2.0.0",
|
|
},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
got := resolveVersion(tc.dev, tc.info)
|
|
if got != tc.want {
|
|
t.Errorf("resolveVersion(%q, %+v) = %q, want %q", tc.dev, tc.info, got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|