diff --git a/cmd/build/watch.go b/cmd/build/watch.go index 3549ec25..1bba0d71 100644 --- a/cmd/build/watch.go +++ b/cmd/build/watch.go @@ -107,6 +107,7 @@ func (c *WatchCmd) Run(kongCtx *kong.Context, globals cli.GlobalFlags) error { interval := time.Duration(c.Interval) * time.Second _, err = watch.WatchBuild(ctx, f.RestAPIClient, bld.Organization, bld.Pipeline, bld.BuildNumber, interval, func(b buildkite.Build) error { + b.Jobs = watchJobs(b.Jobs) summary := shared.BuildSummaryWithJobs(&b, bld.Organization, bld.Pipeline) if tty { fmt.Print("\033[H\033[2J") @@ -122,3 +123,14 @@ func (c *WatchCmd) Run(kongCtx *kong.Context, globals cli.GlobalFlags) error { return err } + +func watchJobs(jobs []buildkite.Job) []buildkite.Job { + out := make([]buildkite.Job, 0, len(jobs)) + for _, j := range jobs { + if j.State == "broken" { + continue + } + out = append(out, j) + } + return out +} diff --git a/cmd/build/watch_test.go b/cmd/build/watch_test.go new file mode 100644 index 00000000..f396abe8 --- /dev/null +++ b/cmd/build/watch_test.go @@ -0,0 +1,30 @@ +package build + +import ( + "slices" + "testing" + + buildkite "github.com/buildkite/go-buildkite/v5" +) + +func TestWatchJobs(t *testing.T) { + got := watchJobs([]buildkite.Job{ + {State: "passed"}, + {State: "broken"}, + {State: "skipped"}, + {State: "failed"}, + {State: "waiting_failed"}, + }) + want := []buildkite.Job{ + {State: "passed"}, + {State: "skipped"}, + {State: "failed"}, + {State: "waiting_failed"}, + } + + if !slices.EqualFunc(got, want, func(a, b buildkite.Job) bool { + return a.State == b.State + }) { + t.Fatalf("got %+v, want %+v", got, want) + } +}