Smail/backend/internal/buildinfo/buildinfo.go
smail f60d3b0880
Some checks are pending
Security Checks / security (push) Waiting to run
整理前后端与测试构建目录并完善配置和安全引导
统一 frontend、backend、test、test-log 和 out 目录,更新构建、部署及测试入口;纳入配置管理兼容与首次安全引导修复;排除本机配置、密钥和测试产物。
2026-09-05 19:19:52 +08:00

58 lines
1.4 KiB
Go

package buildinfo
import "strings"
const ProtocolVersion = 1
var (
Version = "dev"
GitHash = "unknown"
BuildTime = "unknown"
GoVersion = "unknown"
)
type Info struct {
Version string
GitHash string
BuildTime string
GoVersion string
ProtocolVersion int
}
func Current() Info {
return Info{
Version: valueOrDefault(Version, "dev"),
GitHash: valueOrDefault(GitHash, "unknown"),
BuildTime: valueOrDefault(BuildTime, "unknown"),
GoVersion: valueOrDefault(GoVersion, "unknown"),
ProtocolVersion: ProtocolVersion,
}
}
func ValidatePair(mainInfo, adminInfo Info) error {
if strings.TrimSpace(mainInfo.Version) == "" || strings.TrimSpace(adminInfo.Version) == "" {
return ErrVersionMissing
}
if mainInfo.Version != adminInfo.Version {
return ErrVersionMismatch
}
if mainInfo.ProtocolVersion != ProtocolVersion || adminInfo.ProtocolVersion != ProtocolVersion {
return ErrProtocolMismatch
}
if isKnownValue(mainInfo.GitHash) && isKnownValue(adminInfo.GitHash) && mainInfo.GitHash != adminInfo.GitHash {
return ErrBuildMismatch
}
return nil
}
func valueOrDefault(value, fallback string) string {
if strings.TrimSpace(value) == "" {
return fallback
}
return value
}
func isKnownValue(value string) bool {
return strings.TrimSpace(value) != "" && value != "unknown" && value != "dev"
}