From 89daebbc4cbe17d1416c869a6a9c8903877f38a9 Mon Sep 17 00:00:00 2001 From: Andrea Luzzardi Date: Thu, 9 Dec 2021 14:14:36 -0500 Subject: [PATCH 1/4] engine spec: move core types to types.cue Signed-off-by: Andrea Luzzardi --- stdlib/dagger/engine/fs.cue | 11 ----------- stdlib/dagger/engine/secret.cue | 11 ----------- stdlib/dagger/engine/service.cue | 9 --------- stdlib/dagger/engine/types.cue | 29 +++++++++++++++++++++++++++++ 4 files changed, 29 insertions(+), 31 deletions(-) delete mode 100644 stdlib/dagger/engine/fs.cue delete mode 100644 stdlib/dagger/engine/secret.cue delete mode 100644 stdlib/dagger/engine/service.cue create mode 100644 stdlib/dagger/engine/types.cue diff --git a/stdlib/dagger/engine/fs.cue b/stdlib/dagger/engine/fs.cue deleted file mode 100644 index 1b40bc04..00000000 --- a/stdlib/dagger/engine/fs.cue +++ /dev/null @@ -1,11 +0,0 @@ -package engine - -// A reference to a filesystem tree. -// For example: -// - The root filesystem of a container -// - A source code repository -// - A directory containing binary artifacts -// Rule of thumb: if it fits in a tar archive, it fits in a #FS. -#FS: { - _fs: id: string -} diff --git a/stdlib/dagger/engine/secret.cue b/stdlib/dagger/engine/secret.cue deleted file mode 100644 index 3e1849e5..00000000 --- a/stdlib/dagger/engine/secret.cue +++ /dev/null @@ -1,11 +0,0 @@ -package engine - -// A reference to an external secret, for example: -// - A password -// - A SSH private key -// - An API token -// Secrets are never merged in the Cue tree. They can only be used -// by a special filesystem mount designed to minimize leak risk. -#Secret: { - _secret: id: string -} diff --git a/stdlib/dagger/engine/service.cue b/stdlib/dagger/engine/service.cue deleted file mode 100644 index a3ac204e..00000000 --- a/stdlib/dagger/engine/service.cue +++ /dev/null @@ -1,9 +0,0 @@ -package engine - -// A reference to a network service endpoint, for example: -// - A TCP or UDP port -// - A unix or npipe socket -// - An HTTPS endpoint -#Service: { - _service: id: string -} diff --git a/stdlib/dagger/engine/types.cue b/stdlib/dagger/engine/types.cue new file mode 100644 index 00000000..5a0a2c27 --- /dev/null +++ b/stdlib/dagger/engine/types.cue @@ -0,0 +1,29 @@ +package engine + +// A reference to a filesystem tree. +// For example: +// - The root filesystem of a container +// - A source code repository +// - A directory containing binary artifacts +// Rule of thumb: if it fits in a tar archive, it fits in a #FS. +#FS: { + _fs: id: string +} + +// A reference to an external secret, for example: +// - A password +// - A SSH private key +// - An API token +// Secrets are never merged in the Cue tree. They can only be used +// by a special filesystem mount designed to minimize leak risk. +#Secret: { + _secret: id: string +} + +// A reference to a network service endpoint, for example: +// - A TCP or UDP port +// - A unix or npipe socket +// - An HTTPS endpoint +#Service: { + _service: id: string +} From 1d71f77151f88547e8185e501a7c88f92dbba6ac Mon Sep 17 00:00:00 2001 From: Andrea Luzzardi Date: Thu, 9 Dec 2021 14:15:19 -0500 Subject: [PATCH 2/4] engine: fix hidden field path Signed-off-by: Andrea Luzzardi --- plan/task/task.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plan/task/task.go b/plan/task/task.go index 784c5b9a..53dc1ecc 100644 --- a/plan/task/task.go +++ b/plan/task/task.go @@ -11,12 +11,13 @@ import ( "go.dagger.io/dagger/environment" "go.dagger.io/dagger/plancontext" "go.dagger.io/dagger/solver" + "go.dagger.io/dagger/stdlib" ) var ( ErrNotTask = errors.New("not a task") tasks sync.Map - typePath = cue.MakePath(cue.Hid("_type", "alpha.dagger.io/dagger")) + typePath = cue.MakePath(cue.Hid("_type", stdlib.EnginePackage)) ) type NewFunc func() Task From 216487573732cd5e91ff5ccd5f26fee51e32a347 Mon Sep 17 00:00:00 2001 From: Andrea Luzzardi Date: Thu, 9 Dec 2021 14:16:39 -0500 Subject: [PATCH 3/4] solver: return digest when resolving images Signed-off-by: Andrea Luzzardi --- environment/pipeline.go | 2 +- solver/solver.go | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/environment/pipeline.go b/environment/pipeline.go index 31b8e8e3..98e20edb 100644 --- a/environment/pipeline.go +++ b/environment/pipeline.go @@ -762,7 +762,7 @@ func (p *Pipeline) FetchContainer(ctx context.Context, op *compiler.Value, st ll // Load image metadata and convert to to LLB. platform := p.pctx.Platform.Get() - p.image, err = p.s.ResolveImageConfig(ctx, ref.String(), llb.ResolveImageConfigOpt{ + p.image, _, err = p.s.ResolveImageConfig(ctx, ref.String(), llb.ResolveImageConfigOpt{ LogName: p.vertexNamef("load metadata for %s", ref.String()), Platform: &platform, }) diff --git a/solver/solver.go b/solver/solver.go index f5a57e61..01db431f 100644 --- a/solver/solver.go +++ b/solver/solver.go @@ -101,21 +101,21 @@ func (s Solver) SessionID() string { return s.opts.Gateway.BuildOpts().SessionID } -func (s Solver) ResolveImageConfig(ctx context.Context, ref string, opts llb.ResolveImageConfigOpt) (dockerfile2llb.Image, error) { +func (s Solver) ResolveImageConfig(ctx context.Context, ref string, opts llb.ResolveImageConfigOpt) (dockerfile2llb.Image, digest.Digest, error) { var image dockerfile2llb.Image // Load image metadata and convert to to LLB. // Inspired by https://github.com/moby/buildkit/blob/master/frontend/dockerfile/dockerfile2llb/convert.go // FIXME: this needs to handle platform - _, meta, err := s.opts.Gateway.ResolveImageConfig(ctx, ref, opts) + dg, meta, err := s.opts.Gateway.ResolveImageConfig(ctx, ref, opts) if err != nil { - return image, err + return image, "", err } if err := json.Unmarshal(meta, &image); err != nil { - return image, err + return image, "", err } - return image, nil + return image, dg, nil } // Solve will block until the state is solved and returns a Reference. From 2b22d1c981d405e7d59b91f4ce055532f8512c4f Mon Sep 17 00:00:00 2001 From: Andrea Luzzardi Date: Thu, 9 Dec 2021 14:17:19 -0500 Subject: [PATCH 4/4] plan: improve log messages Signed-off-by: Andrea Luzzardi --- plan/plan.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plan/plan.go b/plan/plan.go index b5c295a5..483afe7d 100644 --- a/plan/plan.go +++ b/plan/plan.go @@ -24,8 +24,9 @@ type Plan struct { } func Load(ctx context.Context, args ...string) (*Plan, error) { - // FIXME: universe vendoring + log.Ctx(ctx).Debug().Interface("args", args).Msg("loading plan") + // FIXME: universe vendoring if err := state.VendorUniverse(ctx, ""); err != nil { return nil, err } @@ -121,7 +122,7 @@ func newRunner(pctx *plancontext.Context, s solver.Solver, computed *compiler.Va ctx := t.Context() lg := log.Ctx(ctx).With().Str("task", t.Path().String()).Logger() ctx = lg.WithContext(ctx) - ctx, span := otel.Tracer("dagger").Start(ctx, fmt.Sprintf("compute: %s", t.Path().String())) + ctx, span := otel.Tracer("dagger").Start(ctx, fmt.Sprintf("up: %s", t.Path().String())) defer span.End() lg.Info().Str("state", string(environment.StateComputing)).Msg(string(environment.StateComputing)) @@ -145,7 +146,7 @@ func newRunner(pctx *plancontext.Context, s solver.Solver, computed *compiler.Va lg.Info().Dur("duration", time.Since(start)).Str("state", string(environment.StateCompleted)).Msg(string(environment.StateCompleted)) - // If the result is not concrete, there's nothing to merge. + // If the result is not concrete (e.g. empty value), there's nothing to merge. if !result.IsConcrete() { return nil }