Skip to content

Commit a5f49f0

Browse files
authored
Merge pull request #3696 from tonistiigi/bake-linked-target-fix
build: parallelize forced reference evaluation
2 parents c423bc7 + 2adc53c commit a5f49f0

1 file changed

Lines changed: 19 additions & 1 deletion

File tree

build/build.go

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,7 @@ func BuildWithResultHandler(ctx context.Context, nodes []builder.Node, opts map[
630630
return nil, err
631631
}
632632
} else if forceEval {
633-
if err := res.EachRef(func(ref gateway.Reference) error {
633+
if err := eachRefParallel(ctx, res, func(ctx context.Context, ref gateway.Reference) error {
634634
return ref.Evaluate(ctx)
635635
}); err != nil {
636636
return nil, err
@@ -1321,6 +1321,24 @@ func solve(ctx context.Context, c gateway.Client, req gateway.SolveRequest) (*ga
13211321
return res, nil
13221322
}
13231323

1324+
func eachRefParallel(ctx context.Context, res *gateway.Result, fn func(context.Context, gateway.Reference) error) error {
1325+
var refs []gateway.Reference
1326+
if err := res.EachRef(func(ref gateway.Reference) error {
1327+
refs = append(refs, ref)
1328+
return nil
1329+
}); err != nil {
1330+
return err
1331+
}
1332+
1333+
eg, ctx := errgroup.WithContext(ctx)
1334+
for _, ref := range refs {
1335+
eg.Go(func() error {
1336+
return fn(ctx, ref)
1337+
})
1338+
}
1339+
return eg.Wait()
1340+
}
1341+
13241342
func catchFrontendError(retErr, frontendErr *error) {
13251343
*frontendErr = *retErr
13261344
if errors.Is(*retErr, ErrRestart) {

0 commit comments

Comments
 (0)