From 246a36d463c201bb75d12b3fd412f3f616e32b4d Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Tue, 13 Aug 2024 12:18:49 +0300 Subject: [PATCH] build: when building multiple targets include name in error Some errors can appear without a stacktrace or progress record, eg. wrong Dockerfile name passed. In that case when building many targets with bake it might be hard to figure out which target failed as in the progressbar there will only be steps that were cancelled. Signed-off-by: Tonis Tiigi --- build/build.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/build/build.go b/build/build.go index 0db42f95..f8a8405d 100644 --- a/build/build.go +++ b/build/build.go @@ -309,7 +309,7 @@ func BuildWithResultHandler(ctx context.Context, nodes []builder.Node, opt map[s childTargets := calculateChildTargets(reqForNodes, opt) for k, opt := range opt { - err := func(k string) error { + err := func(k string) (err error) { opt := opt dps := drivers[k] multiDriver := len(drivers[k]) > 1 @@ -321,6 +321,12 @@ func BuildWithResultHandler(ctx context.Context, nodes []builder.Node, opt map[s } baseCtx := ctx + if multiTarget { + defer func() { + err = errors.Wrapf(err, "target %s", k) + }() + } + res := make([]*client.SolveResponse, len(dps)) eg2, ctx := errgroup.WithContext(ctx) @@ -563,6 +569,13 @@ func BuildWithResultHandler(ctx context.Context, nodes []builder.Node, opt map[s tracing.FinishWithError(span, err) } }() + + if multiTarget { + defer func() { + err = errors.Wrapf(err, "target %s", k) + }() + } + pw := progress.WithPrefix(w, "default", false) if err := eg2.Wait(); err != nil { return err