frontend/debug/handle_resolve.go (35 lines of code) (raw):

package debug import ( "context" "fmt" "github.com/Azure/dalec" "github.com/Azure/dalec/frontend" yaml "github.com/goccy/go-yaml" "github.com/moby/buildkit/client/llb" gwclient "github.com/moby/buildkit/frontend/gateway/client" ocispecs "github.com/opencontainers/image-spec/specs-go/v1" ) // Resolve is a handler that generates a resolved spec file with all the build args and variables expanded. func Resolve(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) { dt, err := yaml.Marshal(spec) if err != nil { return nil, nil, fmt.Errorf("error marshalling spec: %w", err) } st := llb.Scratch().File(llb.Mkfile("spec.yml", 0640, dt), llb.WithCustomName("Generate resolved spec file - spec.yml")) def, err := st.Marshal(ctx) 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 } return ref, &dalec.DockerImageSpec{}, err }) }