Skip to content

Commit 7813aba

Browse files
WVerlaekona-agent
andcommitted
Add FailedBuild field to goTestEvent
Handle build failures separately from test failures by recording the failed package in the span attributes. Co-authored-by: Ona <no-reply@ona.com>
1 parent 3b47bb1 commit 7813aba

1 file changed

Lines changed: 27 additions & 10 deletions

File tree

pkg/leeway/gotest_trace.go

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@ import (
1919
// goTestEvent represents a single event from `go test -json` output.
2020
// See https://pkg.go.dev/cmd/test2json for the format specification.
2121
type goTestEvent struct {
22-
Time time.Time `json:"Time"`
23-
Action string `json:"Action"`
24-
Package string `json:"Package"`
25-
Test string `json:"Test"`
26-
Output string `json:"Output"`
27-
Elapsed float64 `json:"Elapsed"` // seconds
22+
Time time.Time `json:"Time"`
23+
Action string `json:"Action"`
24+
Package string `json:"Package"`
25+
Test string `json:"Test"`
26+
Output string `json:"Output"`
27+
Elapsed float64 `json:"Elapsed"` // seconds
28+
FailedBuild string `json:"FailedBuild"` // package that failed to build (when Action == "fail")
2829
}
2930

3031
// testSpanData holds the span for an in-progress test
@@ -245,8 +246,16 @@ func (t *GoTestTracer) handleEnd(event *goTestEvent) {
245246
data.span.SetStatus(codes.Ok, "")
246247
data.span.SetAttributes(attribute.String("test.status", "passed"))
247248
case "fail":
248-
data.span.SetStatus(codes.Error, "test failed")
249-
data.span.SetAttributes(attribute.String("test.status", "failed"))
249+
if event.FailedBuild != "" {
250+
data.span.SetStatus(codes.Error, "build failed")
251+
data.span.SetAttributes(
252+
attribute.String("test.status", "build_failed"),
253+
attribute.String("test.failed_build", event.FailedBuild),
254+
)
255+
} else {
256+
data.span.SetStatus(codes.Error, "test failed")
257+
data.span.SetAttributes(attribute.String("test.status", "failed"))
258+
}
250259
case "skip":
251260
data.span.SetStatus(codes.Ok, "test skipped")
252261
data.span.SetAttributes(attribute.String("test.status", "skipped"))
@@ -272,8 +281,16 @@ func (t *GoTestTracer) handleEnd(event *goTestEvent) {
272281
data.span.SetStatus(codes.Ok, "")
273282
data.span.SetAttributes(attribute.String("test.status", "passed"))
274283
case "fail":
275-
data.span.SetStatus(codes.Error, "package tests failed")
276-
data.span.SetAttributes(attribute.String("test.status", "failed"))
284+
if event.FailedBuild != "" {
285+
data.span.SetStatus(codes.Error, "build failed")
286+
data.span.SetAttributes(
287+
attribute.String("test.status", "build_failed"),
288+
attribute.String("test.failed_build", event.FailedBuild),
289+
)
290+
} else {
291+
data.span.SetStatus(codes.Error, "package tests failed")
292+
data.span.SetAttributes(attribute.String("test.status", "failed"))
293+
}
277294
case "skip":
278295
data.span.SetStatus(codes.Ok, "package tests skipped")
279296
data.span.SetAttributes(attribute.String("test.status", "skipped"))

0 commit comments

Comments
 (0)