func forwardToSigner()

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()
}