Smail/server/internal/buildinfo/buildinfo.go
smail dd04bdb49e
Some checks are pending
Security Checks / security (push) Waiting to run
完成安全整改、配置重构与邮件认证优化
2026-08-28 14:33:13 +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"
}