diff --git a/internal/config/config.go b/internal/config/config.go index bff101847..14602830a 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -68,6 +68,22 @@ func IsDevBuild() bool { return GetBuildCommit() != "" } +// GetReportedVersion returns the version a panel advertises to a managing master +// node: the plain version for stable builds, or "dev+" for dev +// builds. The dev form mirrors the master's getPanelUpdateInfo latestVersion so +// a node on the current dev commit compares as up to date instead of always +// showing "update available". +func GetReportedVersion() string { + if !IsDevBuild() { + return GetVersion() + } + commit := GetBuildCommit() + if len(commit) > 8 { + commit = commit[:8] + } + return "dev+" + commit +} + // GetLogLevel returns the current logging level based on environment variables or defaults to Info. func GetLogLevel() LogLevel { if IsDebug() { diff --git a/internal/config/config_test.go b/internal/config/config_test.go index 494b7bf90..0f1511245 100644 --- a/internal/config/config_test.go +++ b/internal/config/config_test.go @@ -5,6 +5,26 @@ import ( "testing" ) +func TestGetReportedVersion(t *testing.T) { + orig := buildCommit + t.Cleanup(func() { buildCommit = orig }) + + buildCommit = "" + if got := GetReportedVersion(); got != GetVersion() { + t.Fatalf("stable build: GetReportedVersion = %q, want %q", got, GetVersion()) + } + + buildCommit = "1d1128cf" + if got := GetReportedVersion(); got != "dev+1d1128cf" { + t.Fatalf("dev build: GetReportedVersion = %q, want %q", got, "dev+1d1128cf") + } + + buildCommit = "1d1128cf945c4615efa05cf41ba7fa766e2ee428" + if got := GetReportedVersion(); got != "dev+1d1128cf" { + t.Fatalf("dev build (full sha): GetReportedVersion = %q, want %q", got, "dev+1d1128cf") + } +} + func TestGetPortOverride(t *testing.T) { tests := []struct { name string diff --git a/internal/web/service/server.go b/internal/web/service/server.go index 840da76cd..b09d5cc50 100644 --- a/internal/web/service/server.go +++ b/internal/web/service/server.go @@ -604,7 +604,7 @@ func (s *ServerService) GetStatus(lastStatus *Status) *Status { status.Xray.ErrorMsg = s.xrayService.GetXrayResult() } status.Xray.Version = s.xrayService.GetXrayVersion() - status.PanelVersion = config.GetVersion() + status.PanelVersion = config.GetReportedVersion() if guid, err := s.settingService.GetPanelGuid(); err == nil { status.PanelGuid = guid }