From 255f6fd0a176fea4a1b70cc46f4e2dbaadb719e3 Mon Sep 17 00:00:00 2001 From: heph Date: Wed, 22 Jan 2025 17:21:22 +0100 Subject: [PATCH 1/2] feat: add timestamp metadata --- internal/parser/builder.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/internal/parser/builder.go b/internal/parser/builder.go index fcc4878..5205848 100644 --- a/internal/parser/builder.go +++ b/internal/parser/builder.go @@ -7,6 +7,7 @@ import ( "encoding/json" "fmt" "path/filepath" + "time" "github.com/containerd/platforms" "github.com/google/go-jsonnet" @@ -111,7 +112,7 @@ func Build(ctx context.Context, c client.Client) (*client.Result, error) { j.Excludes, _ = dockerignore.Parse(bytes.NewReader(content)) } } - state := j.ToLLB() + state := j.ToLLB(c) dt, err := state.Marshal(ctx, llb.LinuxAmd64) if err != nil { @@ -132,9 +133,12 @@ func Build(ctx context.Context, c client.Client) (*client.Result, error) { } p := platforms.DefaultSpec() + t := time.Now() + img := &specs.Image{ Platform: p, Config: j.Image, + Created: &t, } config, err := json.Marshal(img) From 1adc51cde8419f2cc682d32fb1f8db87913c25c8 Mon Sep 17 00:00:00 2001 From: heph Date: Wed, 22 Jan 2025 17:21:55 +0100 Subject: [PATCH 2/2] draft: implementing imagemetadataresolver --- Jockerfile | 2 +- cmd/jocker/debug-dump.go | 49 ++++++++++++++++++++-------------------- internal/parser/llb.go | 8 +++++-- 3 files changed, 32 insertions(+), 27 deletions(-) diff --git a/Jockerfile b/Jockerfile index 2928e11..e4bfac4 100644 --- a/Jockerfile +++ b/Jockerfile @@ -30,7 +30,7 @@ local std = import "std.libsonnet"; }, ], "image": { - "Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"], + // "Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"], "Cmd": ["darkhttpd", "/www"], }, "excludes" : ["*", "!docs", "!mkdocs.yml"], diff --git a/cmd/jocker/debug-dump.go b/cmd/jocker/debug-dump.go index ddcf69d..afc3dd5 100644 --- a/cmd/jocker/debug-dump.go +++ b/cmd/jocker/debug-dump.go @@ -1,35 +1,36 @@ package jocker import ( - "context" - "log" - "os" + // "context" + // "log" + // "os" - "github.com/jocker-org/jocker/internal/parser" - "github.com/moby/buildkit/client/llb" + // "github.com/jocker-org/jocker/internal/parser" + // "github.com/moby/buildkit/client/llb" ) func DebugDump() error { - // Initialize Jsonnet VM and evaluate Jockerfile - jsonStr, err := parser.EvaluateJsonnetFile("Jockerfile") - if err != nil { - log.Fatal(err) - } +// // Initialize Jsonnet VM and evaluate Jockerfile +// jsonStr, err := parser.EvaluateJsonnetFile("Jockerfile") +// if err != nil { +// log.Fatal(err) +// } - // Parse JSON into Jockerfile struct - j, err := parser.ParseJockerfile(jsonStr) - if err != nil { - log.Fatal(err) - } +// // Parse JSON into Jockerfile struct +// j, err := parser.ParseJockerfile(jsonStr) +// if err != nil { +// log.Fatal(err) +// } - // Generate LLB state from Jockerfile - state := j.ToLLB() - ctx := context.TODO() - dt, err := state.Marshal(ctx, llb.LinuxAmd64) - if err != nil { - log.Fatal(err) - } +// // Generate LLB state from Jockerfile +// state := j.ToLLB() +// ctx := context.TODO() +// dt, err := state.Marshal(ctx, llb.LinuxAmd64) +// if err != nil { +// log.Fatal(err) +// } - // Write LLB definition to stdout - return llb.WriteTo(dt, os.Stdout) +// // Write LLB definition to stdout + // return llb.WriteTo(dt, os.Stdout) + return nil } diff --git a/internal/parser/llb.go b/internal/parser/llb.go index 54de56f..b3d7dd4 100644 --- a/internal/parser/llb.go +++ b/internal/parser/llb.go @@ -5,12 +5,14 @@ import ( "log" "github.com/moby/buildkit/client/llb" + "github.com/moby/buildkit/frontend/gateway/client" ) type BuildContext struct { stages map[string]llb.State state llb.State context llb.State + client client.Client } type BuildStep interface { @@ -51,7 +53,8 @@ func (stage *BuildStage) ToLLB(b *BuildContext) llb.State { if stage.From == "scratch" { b.state = llb.Scratch() } else { - b.state = llb.Image(stage.From) + // b.state = llb.Image(stage.From) + b.state = llb.Image(stage.From, llb.WithMetaResolver(b.client)) } b.state = b.state.With(llb.User(stage.User)) @@ -65,9 +68,10 @@ func (stage *BuildStage) ToLLB(b *BuildContext) llb.State { return b.state } -func (j *Jockerfile) ToLLB() llb.State { +func (j *Jockerfile) ToLLB(c client.Client) llb.State { b := BuildContext{ stages: make(map[string]llb.State), + client: c, } var state llb.State opts := []llb.LocalOption{