# https://go.dev/issue/51723: 'go test' should not stamp VCS metadata # in the build settings. (It isn't worth the latency hit, given that # test binaries are almost never distributed to users.) [short] skip [!exec:git] skip env GOFLAGS=-buildvcs # override default -buildvcs=auto in GOFLAGS, as a user might exec git init # The test binaries should not have VCS settings stamped. # (The test itself verifies that.) go test . ./testonly # Remove 'git' from $PATH. The test should still build. # This ensures that we aren't loading VCS metadata that # we subsequently throw away. env PATH='' env path='' # Compiling the test should not require the VCS tool. go test -c -o $devnull . # When listing a main package, in general we need its VCS metadata to determine # the .Stale and .StaleReason fields. ! go list . stderr '^go: missing Git command\. See https://golang\.org/s/gogetcmd\nerror obtaining VCS status: .*\n\tUse -buildvcs=false to disable VCS stamping.' # Adding the -test flag should be strictly additive — it should not suppress the error. ! go list -test . stderr '^go: missing Git command\. See https://golang\.org/s/gogetcmd\nerror obtaining VCS status: .*\n\tUse -buildvcs=false to disable VCS stamping.' # Adding the suggested flag should suppress the error. go list -test -buildvcs=false . ! stderr . # Since the ./testonly package can't produce an actual binary, we shouldn't # invoke a VCS tool to compute a build stamp when listing it. go list ./testonly ! stderr . go list -test ./testonly ! stderr . -- go.mod -- module example go 1.18 -- example.go -- package main -- example_test.go -- package main import ( "runtime/debug" "strings" "testing" ) func TestDetail(t *testing.T) { bi, ok := debug.ReadBuildInfo() if !ok { t.Fatal("BuildInfo not present") } for _, s := range bi.Settings { if strings.HasPrefix(s.Key, "vcs.") { t.Fatalf("unexpected VCS setting: %s=%s", s.Key, s.Value) } } } -- testonly/main_test.go -- package main import ( "runtime/debug" "strings" "testing" ) func TestDetail(t *testing.T) { bi, ok := debug.ReadBuildInfo() if !ok { t.Fatal("BuildInfo not present") } for _, s := range bi.Settings { if strings.HasPrefix(s.Key, "vcs.") { t.Fatalf("unexpected VCS setting: %s=%s", s.Key, s.Value) } } }