This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
dagger/plan/task/pull.go
Helder Correia c276a8b8ba
Make env in ImageConfig a map
Fields in CUE were renamed to the lowercase version of Dockerfile instructions.

There's now opportunity to make other fields simpler to use (e.g., healthcheck), this commit is focused on env.

Signed-off-by: Helder Correia <174525+helderco@users.noreply.github.com>
2022-01-26 17:12:08 -01:00

74 lines
1.7 KiB
Go

package task
import (
"context"
"fmt"
"github.com/docker/distribution/reference"
"github.com/moby/buildkit/client/llb"
"github.com/rs/zerolog/log"
"go.dagger.io/dagger/compiler"
"go.dagger.io/dagger/plancontext"
"go.dagger.io/dagger/solver"
)
func init() {
Register("Pull", func() Task { return &pullTask{} })
}
type pullTask struct {
}
func (c *pullTask) Run(ctx context.Context, pctx *plancontext.Context, s solver.Solver, v *compiler.Value) (*compiler.Value, error) {
lg := log.Ctx(ctx)
rawRef, err := v.Lookup("source").String()
if err != nil {
return nil, err
}
// Read auth info
auth, err := decodeAuthValue(pctx, v.Lookup("auth"))
if err != nil {
return nil, err
}
for _, a := range auth {
s.AddCredentials(a.Target, a.Username, a.Secret.PlainText())
lg.Debug().Str("target", a.Target).Msg("add target credentials")
}
ref, err := reference.ParseNormalizedNamed(rawRef)
if err != nil {
return nil, fmt.Errorf("failed to parse ref %s: %w", rawRef, err)
}
// Add the default tag "latest" to a reference if it only has a repo name.
ref = reference.TagNameOnly(ref)
st := llb.Image(
ref.String(),
withCustomName(v, "Pull %s", rawRef),
)
// Load image metadata and convert to to LLB.
platform := pctx.Platform.Get()
image, digest, err := s.ResolveImageConfig(ctx, ref.String(), llb.ResolveImageConfigOpt{
LogName: vertexNamef(v, "load metadata for %s", ref.String()),
Platform: &platform,
})
if err != nil {
return nil, err
}
result, err := s.Solve(ctx, st, pctx.Platform.Get())
if err != nil {
return nil, err
}
fs := pctx.FS.New(result)
return compiler.NewValue().FillFields(map[string]interface{}{
"output": fs.MarshalCUE(),
"digest": digest,
"config": ConvertImageConfig(image.Config),
})
}