diff --git a/default.nix b/default.nix index 16a0d703..48bfa592 100644 --- a/default.nix +++ b/default.nix @@ -15,6 +15,7 @@ pkgs.buildGoModule rec { "-w" "-X main.Version=${version}" "-X main.Commit=${gitRevision}" + "-X main.BuildTime=${toString buildTime}" ]; meta = { description = "Nidus Sync"; diff --git a/version/version.go b/version/version.go index e7091081..4cc4729e 100644 --- a/version/version.go +++ b/version/version.go @@ -2,9 +2,18 @@ package version import ( "runtime/debug" + "strconv" "time" ) +// These will be set by ldflags at build time +var ( + Version = "dev" + Commit = "" + BuildTime = "0" + IsModified = "false" +) + type VersionInfo struct { BuildTime time.Time `json:"build_time"` IsModified bool `json:"is_modified"` @@ -12,12 +21,25 @@ type VersionInfo struct { } func Get() VersionInfo { + // Try ldflags first (set by Nix build) + if Commit != "" && Commit != "unknown" { + var buildTime time.Time + if timestamp, err := strconv.ParseInt(BuildTime, 10, 64); err == nil && timestamp > 0 { + buildTime = time.Unix(timestamp, 0) + } + + return VersionInfo{ + Revision: Commit, + BuildTime: buildTime, + IsModified: IsModified == "true", + } + } + + // Fallback to debug.ReadBuildInfo() for development info, ok := debug.ReadBuildInfo() if !ok { return VersionInfo{ - BuildTime: time.Now(), - IsModified: false, - Revision: "unknown", + Revision: "unknown", } }