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 <tonistiigi@gmail.com>
This commit is contained in:
Tonis Tiigi 2024-08-13 12:18:49 +03:00
parent 07a85a544b
commit 246a36d463
No known key found for this signature in database
GPG Key ID: AFA9DE5F8AB7AF39
1 changed files with 14 additions and 1 deletions

View File

@ -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