From e38303b92247a3084983e5e85a96e08bf3b2682c Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Fri, 8 May 2026 15:09:18 +0200 Subject: [PATCH] Go: Make version parsing robust in the face of custom Go builds cf. https://github.com/golang/go/blob/afcf04cb6401b439ce9bdcd18448c512f5bfda77/src/go/version/version.go#L20 --- go/extractor/toolchain/toolchain.go | 8 +++++++- go/extractor/toolchain/toolchain_test.go | 4 +++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/go/extractor/toolchain/toolchain.go b/go/extractor/toolchain/toolchain.go index fb9d5512cd83..c5cd2dd243e7 100644 --- a/go/extractor/toolchain/toolchain.go +++ b/go/extractor/toolchain/toolchain.go @@ -130,7 +130,13 @@ func parseGoVersion(data string) string { for sc.Scan() { lastLine = sc.Text() } - return strings.Fields(lastLine)[2] + + var goVersion = strings.Fields(lastLine)[2] + + // Drop custom build suffixes. + goVersion, _, _ = strings.Cut(goVersion, "-") + + return goVersion } // Returns a value indicating whether the system Go toolchain supports workspaces. diff --git a/go/extractor/toolchain/toolchain_test.go b/go/extractor/toolchain/toolchain_test.go index 57a7294daae3..8a6b38318cb9 100644 --- a/go/extractor/toolchain/toolchain_test.go +++ b/go/extractor/toolchain/toolchain_test.go @@ -8,7 +8,9 @@ import ( func TestParseGoVersion(t *testing.T) { tests := map[string]string{ - "go version go1.18.9 linux/amd64": "go1.18.9", + "go version go1.18.9 linux/amd64": "go1.18.9", + "go version go1.26.3-X:nodwarf5 linux/amd64": "go1.26.3", + "go version go1.26.3rc1 linux/amd64": "go1.26.3rc1", "warning: GOPATH set to GOROOT (/usr/local/go) has no effect\ngo version go1.18.9 linux/amd64": "go1.18.9", } for input, expected := range tests {