in targets/linux/rpm/distro/debug.go [58:107]
func (c *Config) HandleBuildroot(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) {
if err := rpm.ValidateSpec(spec); err != nil {
return nil, nil, fmt.Errorf("rpm: invalid spec: %w", err)
}
pg := dalec.ProgressGroup("Setting up " + targetKey + " rpm buildroot: " + spec.Name)
sOpt, err := frontend.SourceOptFromClient(ctx, client, platform)
if err != nil {
return nil, nil, err
}
pc := dalec.Platform(platform)
worker, err := c.Worker(sOpt, pg, pc)
if err != nil {
return nil, nil, errors.Wrap(err, "error building worker container")
}
worker = worker.With(c.InstallBuildDeps(ctx, client, spec, sOpt, targetKey, pg, pc))
br, err := rpm.SpecToBuildrootLLB(worker, spec, sOpt, targetKey, pg)
if err != nil {
return nil, nil, err
}
def, err := br.Marshal(ctx, pc)
if err != nil {
return nil, nil, fmt.Errorf("error marshalling llb: %w", 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
}
if platform == nil {
p := platforms.DefaultSpec()
platform = &p
}
return ref, &dalec.DockerImageSpec{Image: ocispecs.Image{Platform: *platform}}, nil
})
}