aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAustin Clements <austin@google.com>2024-11-18 14:56:43 -0500
committerGopher Robot <gobot@golang.org>2024-11-19 02:39:44 +0000
commit3e7cb78800c662b36f9aebf9312ab25b42c2da2a (patch)
treeaa79140b15828709c7add23f43bf650fec54e5b8 /src
parent5432cd96fd951bce01bbce9f9744b62871f79b17 (diff)
downloadgo-3e7cb78800c662b36f9aebf9312ab25b42c2da2a.tar.xz
cmd/go: re-enable build JSON from go test -json, now with GODEBUG
This re-enables the behavior of CL 536399 (by effectively reverting CL 628955), so now go test -json again includes build output and failures as JSON rather than text. However, since this behavior is clearly enough to trip up some build systems, this CL includes a GODEBUG=gotestjsonbuildtext that can be set to 1 to revert to the old behavior. Fixes #70402. Updates #62067. Cq-Include-Trybots: luci.golang.try:gotip-darwin-arm64_13,gotip-linux-amd64-longtest,gotip-windows-amd64-longtest Change-Id: I84e778cd844783dacfc83433e391b5ccb5925127 Reviewed-on: https://go-review.googlesource.com/c/go/+/629335 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Auto-Submit: Austin Clements <austin@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/cmd/go/internal/test/testflag.go12
-rw-r--r--src/cmd/go/testdata/script/test_json_build.txt15
-rw-r--r--src/internal/godebugs/table.go1
-rw-r--r--src/runtime/metrics/doc.go5
4 files changed, 27 insertions, 6 deletions
diff --git a/src/cmd/go/internal/test/testflag.go b/src/cmd/go/internal/test/testflag.go
index f91e4e6705..09e41533b6 100644
--- a/src/cmd/go/internal/test/testflag.go
+++ b/src/cmd/go/internal/test/testflag.go
@@ -6,11 +6,13 @@ package test
import (
"cmd/go/internal/base"
+ "cmd/go/internal/cfg"
"cmd/go/internal/cmdflag"
"cmd/go/internal/work"
"errors"
"flag"
"fmt"
+ "internal/godebug"
"os"
"path/filepath"
"strconv"
@@ -25,6 +27,8 @@ import (
// our command line are for us, and some are for the test binary, and
// some are for both.
+var gotestjsonbuildtext = godebug.New("gotestjsonbuildtext")
+
func init() {
work.AddBuildFlags(CmdTest, work.OmitVFlag|work.OmitJSONFlag)
@@ -33,7 +37,6 @@ func init() {
cf.StringVar(&testO, "o", "", "")
work.AddCoverFlags(CmdTest, &testCoverProfile)
cf.Var((*base.StringsFlag)(&work.ExecCmd), "exec", "")
- // TODO(austin): Make test -json imply build -json.
cf.BoolVar(&testJSON, "json", false, "")
cf.Var(&testVet, "vet", "")
@@ -354,8 +357,11 @@ func testFlags(args []string) (packageNames, passToTest []string) {
delete(addFromGOFLAGS, "v")
delete(addFromGOFLAGS, "test.v")
- // TODO(austin,#70402): Re-enable this once LUCI can handle build JSON in the test stream.
- //cfg.BuildJSON = true
+ if gotestjsonbuildtext.Value() == "1" {
+ gotestjsonbuildtext.IncNonDefault()
+ } else {
+ cfg.BuildJSON = true
+ }
}
// Inject flags from GOFLAGS before the explicit command-line arguments.
diff --git a/src/cmd/go/testdata/script/test_json_build.txt b/src/cmd/go/testdata/script/test_json_build.txt
index 9587ebca95..a3f0c37923 100644
--- a/src/cmd/go/testdata/script/test_json_build.txt
+++ b/src/cmd/go/testdata/script/test_json_build.txt
@@ -1,8 +1,7 @@
-# TODO(austin,#70402)
-skip
-
[short] skip
+env GODEBUG=gotestjsonbuildtext=0
+
# There are several places where paths appear in JSON in regexps here.
# For the path separator we use (/|\\\\).
# Unfortunately, we can't just use ${/} because, while script test automatically
@@ -52,6 +51,16 @@ stdout '"Action":"output","Package":"m/veterror","Output":"FAIL\\tm/veterror \[b
stdout '"Action":"fail","Package":"m/veterror","Elapsed":.*,"FailedBuild":"m/veterror \[m/veterror.test\]"'
! stderr '.'
+# Test that the GODEBUG fallback works.
+env GODEBUG=gotestjsonbuildtext=1
+! go test -json -o=$devnull ./builderror
+stderr '# m/builderror \[m/builderror.test\]\n'
+stderr 'builderror'${/}'main_test.go:3:11: undefined: y\n'
+stdout '"Action":"start","Package":"m/builderror"'
+stdout '"Action":"output","Package":"m/builderror","Output":"FAIL\\tm/builderror \[build failed\]\\n"'
+stdout '"Action":"fail","Package":"m/builderror","Elapsed":.*,"FailedBuild":"m/builderror \[m/builderror\.test\]"'
+
+
-- go.mod --
module m
go 1.21
diff --git a/src/internal/godebugs/table.go b/src/internal/godebugs/table.go
index 59d4fa7d5b..d00014eaae 100644
--- a/src/internal/godebugs/table.go
+++ b/src/internal/godebugs/table.go
@@ -30,6 +30,7 @@ var All = []Info{
{Name: "gocachehash", Package: "cmd/go"},
{Name: "gocachetest", Package: "cmd/go"},
{Name: "gocacheverify", Package: "cmd/go"},
+ {Name: "gotestjsonbuildtext", Package: "cmd/go", Changed: 24, Old: "1"},
{Name: "gotypesalias", Package: "go/types", Changed: 23, Old: "0"},
{Name: "http2client", Package: "net/http"},
{Name: "http2debug", Package: "net/http", Opaque: true},
diff --git a/src/runtime/metrics/doc.go b/src/runtime/metrics/doc.go
index 906abb4102..cda2c6fc5e 100644
--- a/src/runtime/metrics/doc.go
+++ b/src/runtime/metrics/doc.go
@@ -250,6 +250,11 @@ Below is the full list of supported metrics, ordered lexicographically.
The number of non-default behaviors executed by the cmd/go
package due to a non-default GODEBUG=gocacheverify=... setting.
+ /godebug/non-default-behavior/gotestjsonbuildtext:events
+ The number of non-default behaviors executed by the cmd/go
+ package due to a non-default GODEBUG=gotestjsonbuildtext=...
+ setting.
+
/godebug/non-default-behavior/gotypesalias:events
The number of non-default behaviors executed by the go/types
package due to a non-default GODEBUG=gotypesalias=... setting.