Skip to content

Commit c2f909e

Browse files
authored
Merge pull request #2793 from AkihiroSuda/examples-dockefile2llb-metadata
examples/dockerfile2llb: add `--partial-image-config-file`, `--partial-metadata-file`
2 parents 4249d86 + 1a56835 commit c2f909e

File tree

1 file changed

+41
-10
lines changed

1 file changed

+41
-10
lines changed

examples/dockerfile2llb/main.go

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,41 @@ package main
22

33
import (
44
"context"
5+
"encoding/json"
56
"flag"
67
"io"
7-
"log"
88
"os"
99

1010
"github.com/moby/buildkit/client/llb"
1111
"github.com/moby/buildkit/client/llb/imagemetaresolver"
1212
"github.com/moby/buildkit/frontend/dockerfile/dockerfile2llb"
1313
"github.com/moby/buildkit/solver/pb"
1414
"github.com/moby/buildkit/util/appcontext"
15+
"github.com/sirupsen/logrus"
1516
)
1617

1718
type buildOpt struct {
18-
target string
19+
target string
20+
partialImageConfigFile string
21+
partialMetadataFile string
1922
}
2023

2124
func main() {
25+
if err := xmain(); err != nil {
26+
logrus.Fatal(err)
27+
}
28+
}
29+
30+
func xmain() error {
2231
var opt buildOpt
2332
flag.StringVar(&opt.target, "target", "", "target stage")
33+
flag.StringVar(&opt.partialImageConfigFile, "partial-image-config-file", "", "Output partial image config as a JSON file")
34+
flag.StringVar(&opt.partialMetadataFile, "partial-metadata-file", "", "Output partial metadata sa a JSON file")
2435
flag.Parse()
2536

2637
df, err := io.ReadAll(os.Stdin)
2738
if err != nil {
28-
panic(err)
39+
return err
2940
}
3041

3142
caps := pb.Caps.CapSet(pb.Caps.All())
@@ -36,16 +47,36 @@ func main() {
3647
LLBCaps: &caps,
3748
})
3849
if err != nil {
39-
log.Printf("err: %+v", err)
40-
panic(err)
50+
return err
4151
}
4252

43-
_ = img
44-
_ = bi
45-
4653
dt, err := state.Marshal(context.TODO())
4754
if err != nil {
48-
panic(err)
55+
return err
56+
}
57+
if err := llb.WriteTo(dt, os.Stdout); err != nil {
58+
return err
59+
}
60+
if opt.partialImageConfigFile != "" {
61+
if err := writeJSON(opt.partialImageConfigFile, img); err != nil {
62+
return err
63+
}
64+
}
65+
if opt.partialMetadataFile != "" {
66+
if err := writeJSON(opt.partialMetadataFile, bi); err != nil {
67+
return err
68+
}
69+
}
70+
return nil
71+
}
72+
73+
func writeJSON(f string, x interface{}) error {
74+
b, err := json.Marshal(x)
75+
if err != nil {
76+
return err
77+
}
78+
if err := os.RemoveAll(f); err != nil {
79+
return err
4980
}
50-
llb.WriteTo(dt, os.Stdout)
81+
return os.WriteFile(f, b, 0o644)
5182
}

0 commit comments

Comments
 (0)