diff --git a/cmd/testwrapper/testwrapper.go b/cmd/testwrapper/testwrapper.go index de472fffd..c9790aafc 100644 --- a/cmd/testwrapper/testwrapper.go +++ b/cmd/testwrapper/testwrapper.go @@ -81,6 +81,7 @@ func runTests(ctx context.Context, attempt int, pt *packageTests, otherArgs []st if err != nil { log.Printf("error creating stdout pipe: %v", err) } + defer r.Close() cmd.Stderr = os.Stderr cmd.Env = os.Environ() @@ -104,6 +105,15 @@ func runTests(ctx context.Context, attempt int, pt *packageTests, otherArgs []st if errors.Is(err, io.EOF) || errors.Is(err, os.ErrClosed) { break } + + // `go test -json` outputs invalid JSON when a build fails. + // In that case, discard the the output and start reading again. + // The build error will be printed to stderr. + // See: https://github.com/golang/go/issues/35169 + if _, ok := err.(*json.SyntaxError); ok { + jd = json.NewDecoder(r) + continue + } panic(err) } if goOutput.Test == "" {