in frontend/request.go [247:304]
func forwardToSigner(ctx context.Context, client gwclient.Client, cfg *dalec.PackageSigner, s llb.State, opts ...llb.ConstraintsOpt) (llb.State, error) {
const (
// See https://github.com/moby/buildkit/blob/d8d946b85c52095d34a52ce210960832f4e06775/frontend/dockerui/context.go#L29
contextKey = "contextkey"
)
bopts := client.BuildOpts().Opts
req, err := newSolveRequest(toFrontend(cfg.Frontend), withBuildArgs(cfg.Args))
if err != nil {
return llb.Scratch(), err
}
for k, v := range bopts {
if k == "source" || k == "cmdline" {
continue
}
req.FrontendOpt[k] = v
}
inputs, err := client.Inputs(ctx)
if err != nil {
return llb.Scratch(), err
}
m := make(map[string]*pb.Definition)
for k, st := range inputs {
def, err := st.Marshal(ctx)
if err != nil {
return llb.Scratch(), err
}
m[k] = def.ToPB()
}
req.FrontendInputs = m
opts = append(opts, dalec.ProgressGroup("Sign package"))
stateDef, err := s.Marshal(ctx, opts...)
if err != nil {
return llb.Scratch(), err
}
req.FrontendOpt[contextKey] = dockerui.DefaultLocalNameContext
req.FrontendInputs[dockerui.DefaultLocalNameContext] = stateDef.ToPB()
req.FrontendOpt["dalec.target"] = bopts["dalec.target"]
res, err := client.Solve(ctx, req)
if err != nil {
return llb.Scratch(), errors.Wrap(err, "error signing packages")
}
ref, err := res.SingleRef()
if err != nil {
return llb.Scratch(), err
}
return ref.ToState()
}