in targets/linux/rpm/distro/container.go [85:142]
func (cfg *Config) HandleDepsOnly(ctx context.Context, client gwclient.Client) (*gwclient.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) {
deps := spec.GetRuntimeDeps(targetKey)
if len(deps) == 0 {
return nil, nil, fmt.Errorf("no runtime deps found for '%s'", targetKey)
}
pg := dalec.ProgressGroup("Build " + targetKey + " deps-only container for: " + spec.Name)
sOpt, err := frontend.SourceOptFromClient(ctx, client, platform)
if err != nil {
return nil, nil, err
}
pc := dalec.Platform(platform)
worker, err := cfg.Worker(sOpt, pg, pc)
if err != nil {
return nil, nil, err
}
var rpmDir = llb.Scratch()
if len(deps) > 0 {
withDownloads := worker.Run(dalec.ShArgs("set -ex; mkdir -p /tmp/rpms/RPMS/$(uname -m)")).
Run(cfg.Install(spec.GetRuntimeDeps(targetKey),
DnfDownloadAllDeps("/tmp/rpms/RPMS/$(uname -m)"))).Root()
rpmDir = llb.Scratch().File(llb.Copy(withDownloads, "/tmp/rpms", "/", dalec.WithDirContentsOnly()))
}
ctr, err := cfg.BuildContainer(ctx, client, worker, sOpt, spec, targetKey, rpmDir, pg, pc)
if err != nil {
return nil, nil, err
}
def, err := ctr.Marshal(ctx, pc)
if err != nil {
return nil, nil, err
}
res, err := client.Solve(ctx, gwclient.SolveRequest{
Definition: def.ToPB(),
})
if err != nil {
return nil, nil, err
}
img, err := linux.BuildImageConfig(ctx, sOpt, spec, platform, targetKey)
if err != nil {
return nil, nil, err
}
ref, err := res.SingleRef()
if err != nil {
return nil, nil, err
}
return ref, img, nil
})
}