diff --git a/changelogs/unreleased/8399-kaovilai b/changelogs/unreleased/8399-kaovilai new file mode 100644 index 00000000000..e44c039c940 --- /dev/null +++ b/changelogs/unreleased/8399-kaovilai @@ -0,0 +1 @@ +Add golang buildinfo to velero to check toolchain used. Reduce minimum go toolchain in go.mod diff --git a/go.mod b/go.mod index 330ece7e5cb..8d298b1a1ff 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,11 @@ module github.com/vmware-tanzu/velero -go 1.22.8 +// Do not pin patch version here. Leave patch at X.Y.0 +// Unset GOTOOLCHAIN to assume GOTOOLCHAIN=local where go cli version in path is used. +// Use env GOTOOLCHAIN=auto to allow go to decide whichever is newer from go.mod or cli in path. +// or GOTOOLCHAIN=goX.Y.Z to use a specific toolchain version +// See: https://go.dev/doc/toolchain#select and https://github.com/vmware-tanzu/velero/issues/8397 +go 1.22.0 require ( cloud.google.com/go/storage v1.40.0 diff --git a/pkg/buildinfo/buildinfo.go b/pkg/buildinfo/buildinfo.go index b0533d0dbfd..acbe0e75df7 100644 --- a/pkg/buildinfo/buildinfo.go +++ b/pkg/buildinfo/buildinfo.go @@ -19,12 +19,18 @@ limitations under the License. // worrying about introducing circular dependencies. package buildinfo -import "fmt" +import ( + "fmt" + "runtime/debug" +) var ( // Version is the current version of Velero, set by the go linker's -X flag at build time. Version string + // goVersion is the version of Go that was used to build Velero + goBuildInfo *debug.BuildInfo + // GitSHA is the actual commit that is being built, set by the go linker's -X flag at build time. GitSHA string @@ -44,3 +50,14 @@ func FormattedGitSHA() string { } return GitSHA } + +func GoVersion() string { + if goBuildInfo == nil { + var ok bool + goBuildInfo, ok = debug.ReadBuildInfo() + if !ok { + return "cannot read Go BuildInfo" + } + } + return goBuildInfo.GoVersion +} diff --git a/pkg/cmd/cli/version/version.go b/pkg/cmd/cli/version/version.go index f8d26111619..a208bcc1d90 100644 --- a/pkg/cmd/cli/version/version.go +++ b/pkg/cmd/cli/version/version.go @@ -69,6 +69,7 @@ func printVersion(w io.Writer, clientOnly bool, kbClient kbclient.Client, server fmt.Fprintln(w, "Client:") fmt.Fprintf(w, "\tVersion: %s\n", buildinfo.Version) fmt.Fprintf(w, "\tGit commit: %s\n", buildinfo.FormattedGitSHA()) + fmt.Fprintf(w, "\tGo version: %s\n", buildinfo.GoVersion()) if clientOnly { return diff --git a/pkg/cmd/cli/version/version_test.go b/pkg/cmd/cli/version/version_test.go index 355626802f8..939102e2350 100644 --- a/pkg/cmd/cli/version/version_test.go +++ b/pkg/cmd/cli/version/version_test.go @@ -49,7 +49,7 @@ func TestPrintVersion(t *testing.T) { buildinfo.GitSHA = "somegitsha" buildinfo.GitTreeState = "dirty" - clientVersion := fmt.Sprintf("Client:\n\tVersion: %s\n\tGit commit: %s\n", buildinfo.Version, buildinfo.FormattedGitSHA()) + clientVersion := fmt.Sprintf("Client:\n\tVersion: %s\n\tGit commit: %s\n\tGo version: %s\n", buildinfo.Version, buildinfo.FormattedGitSHA(), buildinfo.GoVersion()) tests := []struct { name string diff --git a/pkg/cmd/server/server.go b/pkg/cmd/server/server.go index a697e4d01bf..333c5fcb81f 100644 --- a/pkg/cmd/server/server.go +++ b/pkg/cmd/server/server.go @@ -109,7 +109,7 @@ func NewCommand(f client.Factory) *cobra.Command { logger.Infof("setting log-level to %s", strings.ToUpper(logLevel.String())) - logger.Infof("Starting Velero server %s (%s)", buildinfo.Version, buildinfo.FormattedGitSHA()) + logger.Infof("Starting Velero server %s (%s) go-version: %s", buildinfo.Version, buildinfo.FormattedGitSHA(), buildinfo.GoVersion()) if len(features.All()) > 0 { logger.Infof("%d feature flags enabled %s", len(features.All()), features.All()) } else {