in frontend/debug/handle_sources.go [53:106]
func PatchedSources(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) {
const keyPatchedSourcesWorker = "context:patched-sources-worker"
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
}
worker, ok := inputs[keyPatchedSourcesWorker]
if !ok {
worker = llb.Image("alpine:latest", llb.WithMetaResolver(client)).
Run(llb.Shlex("apk add --no-cache go git ca-certificates patch")).Root()
}
pc := dalec.Platform(platform)
sources, err := dalec.Sources(spec, sOpt, pc)
if err != nil {
return nil, nil, err
}
sources = dalec.PatchSources(worker, spec, sources, pc)
if err != nil {
return nil, nil, err
}
for k, v := range sources {
st := llb.Scratch().File(llb.Copy(v, "/", k))
sources[k] = st
}
def, err := dalec.MergeAtPath(llb.Scratch(), dalec.SortedMapValues(sources), "/").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
})
}