func Cargohome()

in frontend/debug/handle_cargohome.go [17:60]


func Cargohome(ctx context.Context, client gwclient.Client) (*client.Result, error) {
	return frontend.BuildWithPlatform(ctx, client, func(ctx context.Context, client gwclient.Client, platform *ocispecs.Platform, spec *dalec.Spec, targetKey string) (gwclient.Reference, *dalec.DockerImageSpec, error) {
		sOpt, err := frontend.SourceOptFromClient(ctx, client, platform)
		if err != nil {
			return nil, nil, err
		}

		inputs, err := client.Inputs(ctx)
		if err != nil {
			return nil, nil, err
		}

		// Allow the client to override the worker image
		// This is useful for keeping pre-built worker images, especially for CI.
		worker, ok := inputs[keyCargohomeWorker]
		if !ok {
			worker = llb.Image("rust:latest", llb.WithMetaResolver(client)).
				Run(llb.Shlex("cargo --version")).Root()
		}

		st, err := spec.CargohomeDeps(sOpt, worker, dalec.Platform(platform))
		if err != nil {
			return nil, nil, err
		}

		def, err := st.Marshal(ctx)
		if err != nil {
			return nil, nil, err
		}

		res, err := client.Solve(ctx, gwclient.SolveRequest{
			Definition: def.ToPB(),
		})
		if err != nil {
			return nil, nil, err
		}

		ref, err := res.SingleRef()
		if err != nil {
			return nil, nil, err
		}
		return ref, &dalec.DockerImageSpec{}, nil
	})
}