@@ -2,30 +2,41 @@ package main
22
33import (
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
1718type buildOpt struct {
18- target string
19+ target string
20+ partialImageConfigFile string
21+ partialMetadataFile string
1922}
2023
2124func 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