diff --git a/.goreleaser.yml b/.goreleaser.yml index 395385aa6c..56c5fa951c 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -18,8 +18,6 @@ builds: ldflags: - -s -w - -X main.version={{.Version}} - - -X main.commit={{.Commit}} - - -X main.date={{.Date}} - -X main.telemetryReportPeriod=24h - -X main.telemetryEndpoint={{.Env.TELEMETRY_ENDPOINT}} - -X main.telemetryEndpointInsecure={{.Env.TELEMETRY_ENDPOINT_INSECURE}} diff --git a/Makefile b/Makefile index af7cda6c20..e2009f87ee 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,5 @@ # variables that should not be overridden by the user VERSION = edge -GIT_COMMIT = $(shell git rev-parse HEAD || echo "unknown") -DATE = $(shell date -u +"%Y-%m-%dT%H:%M:%SZ") SELF_DIR := $(dir $(lastword $(MAKEFILE_LIST))) MANIFEST_DIR = $(CURDIR)/deploy/manifests CHART_DIR = $(SELF_DIR)charts/nginx-gateway-fabric @@ -22,7 +20,7 @@ ENABLE_EXPERIMENTAL ?= false NODE_VERSION = $(shell cat .nvmrc) # go build flags - should not be overridden by the user -GO_LINKER_FlAGS_VARS = -X main.version=${VERSION} -X main.commit=${GIT_COMMIT} -X main.date=${DATE} -X main.telemetryReportPeriod=${TELEMETRY_REPORT_PERIOD} -X main.telemetryEndpoint=${TELEMETRY_ENDPOINT} -X main.telemetryEndpointInsecure=${TELEMETRY_ENDPOINT_INSECURE} +GO_LINKER_FlAGS_VARS = -X main.version=${VERSION} -X main.telemetryReportPeriod=${TELEMETRY_REPORT_PERIOD} -X main.telemetryEndpoint=${TELEMETRY_ENDPOINT} -X main.telemetryEndpointInsecure=${TELEMETRY_ENDPOINT_INSECURE} GO_LINKER_FLAGS_OPTIMIZATIONS = -s -w GO_LINKER_FLAGS = $(GO_LINKER_FLAGS_OPTIMIZATIONS) $(GO_LINKER_FlAGS_VARS) diff --git a/cmd/gateway/commands.go b/cmd/gateway/commands.go index ce2cdcb0ec..3c03013fa8 100644 --- a/cmd/gateway/commands.go +++ b/cmd/gateway/commands.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "os" + "runtime/debug" "strconv" "time" @@ -124,11 +125,13 @@ func createStaticModeCommand() *cobra.Command { atom := zap.NewAtomicLevel() logger := ctlrZap.New(ctlrZap.Level(atom)) + commit, date, dirty := getBuildInfo() logger.Info( "Starting NGINX Gateway Fabric in static mode", "version", version, "commit", commit, "date", date, + "dirty", dirty, ) log.SetLogger(logger) @@ -410,11 +413,13 @@ func createProvisionerModeCommand() *cobra.Command { Hidden: true, RunE: func(_ *cobra.Command, _ []string) error { logger := ctlrZap.New() + commit, date, dirty := getBuildInfo() logger.Info( "Starting NGINX Gateway Fabric Provisioner", "version", version, "commit", commit, "date", date, + "dirty", dirty, ) return provisioner.StartManager(provisioner.Config{ @@ -495,3 +500,30 @@ func parseFlags(flags *pflag.FlagSet) ([]string, []string) { return flagKeys, flagValues } + +type buildInfoFunc func() (info *debug.BuildInfo, ok bool) + +var buildInfo buildInfoFunc = debug.ReadBuildInfo + +func getBuildInfo() (commitHash string, commitTime string, dirtyBuild string) { + commitHash = "unknown" + commitTime = "unknown" + dirtyBuild = "unknown" + + info, ok := buildInfo() + if !ok { + return + } + for _, kv := range info.Settings { + switch kv.Key { + case "vcs.revision": + commitHash = kv.Value + case "vcs.time": + commitTime = kv.Value + case "vcs.modified": + dirtyBuild = kv.Value + } + } + + return +} diff --git a/cmd/gateway/commands_test.go b/cmd/gateway/commands_test.go index 4d777d0671..87a9ab65db 100644 --- a/cmd/gateway/commands_test.go +++ b/cmd/gateway/commands_test.go @@ -2,6 +2,7 @@ package main import ( "io" + "runtime/debug" "testing" . "github.com/onsi/gomega" @@ -582,3 +583,59 @@ func TestParseFlags(t *testing.T) { g.Expect(flagKeys).Should(Equal(expectedKeys)) g.Expect(flagValues).Should(Equal(expectedValues)) } + +func TestGetBuildInfo(t *testing.T) { + g := NewWithT(t) + stubBuildInfo := func() (info *debug.BuildInfo, ok bool) { + return &debug.BuildInfo{ + Settings: []debug.BuildSetting{ + {Key: "vcs.revision", Value: "abc123"}, + {Key: "vcs.time", Value: "2024-07-30T12:34:56Z"}, + {Key: "vcs.modified", Value: "true"}, + }, + }, true + } + + buildInfo = stubBuildInfo + + commitHash, commitTime, dirtyBuild := getBuildInfo() + + g.Expect(commitHash).To(Equal("abc123")) + g.Expect(commitTime).To(Equal("2024-07-30T12:34:56Z")) + g.Expect(dirtyBuild).To(Equal("true")) +} + +func TestGetBuildInfoNoBuildInfo(t *testing.T) { + g := NewWithT(t) + stubBuildInfo := func() (info *debug.BuildInfo, ok bool) { + return nil, false + } + + buildInfo = stubBuildInfo + + commitHash, commitTime, dirtyBuild := getBuildInfo() + + g.Expect(commitHash).To(Equal("unknown")) + g.Expect(commitTime).To(Equal("unknown")) + g.Expect(dirtyBuild).To(Equal("unknown")) +} + +func TestGetBuildInfoMissingValue(t *testing.T) { + g := NewWithT(t) + stubBuildInfo := func() (info *debug.BuildInfo, ok bool) { + return &debug.BuildInfo{ + Settings: []debug.BuildSetting{ + {Key: "vcs.time", Value: "2024-07-30T12:34:56Z"}, + {Key: "vcs.modified", Value: "true"}, + }, + }, true + } + + buildInfo = stubBuildInfo + + commitHash, commitTime, dirtyBuild := getBuildInfo() + + g.Expect(commitHash).To(Equal("unknown")) + g.Expect(commitTime).To(Equal("2024-07-30T12:34:56Z")) + g.Expect(dirtyBuild).To(Equal("true")) +} diff --git a/cmd/gateway/main.go b/cmd/gateway/main.go index 435a0064c5..5c70d6204a 100644 --- a/cmd/gateway/main.go +++ b/cmd/gateway/main.go @@ -8,8 +8,6 @@ import ( // Set during go build. var ( version string - commit string - date string // telemetryReportPeriod is the period at which telemetry reports are sent. telemetryReportPeriod string