diff --git a/plan/task/build.go b/plan/task/build.go index 31b5f127..503c6d5f 100644 --- a/plan/task/build.go +++ b/plan/task/build.go @@ -115,6 +115,16 @@ func (t *buildTask) dockerfile(ctx context.Context, pctx *plancontext.Context, s return nil, err } + st, err := ref.ToState() + if err != nil { + return nil, err + } + + solvedRef, err := s.Solve(ctx, st, pctx.Platform.Get()) + if err != nil { + return nil, err + } + // Image metadata meta, ok := res.Metadata[exptypes.ExporterImageConfigKey] if !ok { @@ -126,7 +136,7 @@ func (t *buildTask) dockerfile(ctx context.Context, pctx *plancontext.Context, s } return compiler.NewValue().FillFields(map[string]interface{}{ - "output": pctx.FS.New(ref).MarshalCUE(), + "output": pctx.FS.New(solvedRef).MarshalCUE(), "config": image.Config, }) } diff --git a/solver/solver.go b/solver/solver.go index 01db431f..f1d85187 100644 --- a/solver/solver.go +++ b/solver/solver.go @@ -120,6 +120,10 @@ func (s Solver) ResolveImageConfig(ctx context.Context, ref string, opts llb.Res // Solve will block until the state is solved and returns a Reference. func (s Solver) SolveRequest(ctx context.Context, req bkgw.SolveRequest) (*bkgw.Result, error) { + // makes Solve() to block until LLB graph is solved. otherwise it will + // return result (that you can for example use for next build) that + // will be evaluated on export or if you access files on it. + req.Evaluate = true res, err := s.opts.Gateway.Solve(ctx, req) if err != nil { return nil, CleanError(err) @@ -149,11 +153,6 @@ func (s Solver) Solve(ctx context.Context, st llb.State, platform specs.Platform // call solve res, err := s.SolveRequest(ctx, bkgw.SolveRequest{ Definition: def, - - // makes Solve() to block until LLB graph is solved. otherwise it will - // return result (that you can for example use for next build) that - // will be evaluated on export or if you access files on it. - Evaluate: true, }) if err != nil { return nil, err