11package commands
22
33import (
4+ "bytes"
45 "context"
56 "encoding/json"
67 "fmt"
78 "github.com/docker/app/internal/packager"
9+ "github.com/moby/buildkit/session"
10+ "github.com/moby/buildkit/session/auth/authprovider"
811 "github.com/sirupsen/logrus"
912 "os"
1013 "path/filepath"
@@ -102,16 +105,14 @@ func runBuild(dockerCli command.Cli, application string, opt buildOptions) error
102105 if err != nil {
103106 return err
104107 }
105- fmt . Fprintln ( dockerCli . Out (), string (dt ))
108+ logrus . Debug ( string (dt ))
106109 }
107110
108111 buildopts , err := bake .TargetsToBuildOpt (targets , opt .noCache , opt .pull )
109112 if err != nil {
110113 return err
111114 }
112115
113- /**
114- // FIXME it seems there's no way to setup a build.Options without a plain DockerContext path
115116 buildContext := bytes .NewBuffer (nil )
116117 if err := packager .PackInvocationImageContext (dockerCli , app , buildContext ); err != nil {
117118 return err
@@ -120,11 +121,11 @@ func runBuild(dockerCli command.Cli, application string, opt buildOptions) error
120121 buildopts ["invocation-image" ] = build.Options {
121122 Inputs : build.Inputs {
122123 InStream : buildContext ,
124+ ContextPath : "-" ,
123125 },
124126 Tags : []string { fmt .Sprintf ("%s:%s-%s" , bundle .Name , bundle .Version , "-invoc" ) },
125127 Session : []session.Attachable {authprovider .NewDockerAuthProvider (os .Stderr )},
126128 }
127- */
128129
129130 d , err := driver .GetDriver (ctx , "buildx_buildkit_default" , nil , dockerCli .Client (), nil , "" , nil )
130131 if err != nil {
@@ -140,49 +141,36 @@ func runBuild(dockerCli command.Cli, application string, opt buildOptions) error
140141 ctx2 , cancel := context .WithCancel (context .TODO ())
141142 defer cancel ()
142143
143- // FIXME add invocation image as another build target
144-
145144 pw := progress .NewPrinter (ctx2 , os .Stderr , opt .progress )
146- _ , err = build .Build (ctx2 , driverInfo , buildopts , dockerAPI (dockerCli ), dockerCli .ConfigFile (), pw )
145+ resp , err : = build .Build (ctx2 , driverInfo , buildopts , dockerAPI (dockerCli ), dockerCli .ConfigFile (), pw )
147146 if err != nil {
148147 return err
149148 }
150149
151150 fmt .Println ("Successfully built service images" )
152151
153- /* FIXME Build should tell us everything we need to know about digests https://github.com/docker/buildx/issues/149
154152 for service , r := range resp {
155153 digest := r .ExporterResponse ["containerimage.digest" ]
156- image := bundle.Images[service]
157- image.ImageType = cnab.ImageTypeDocker
158- image.Image = fmt.Sprintf("%s@%s", bundle.Name, digest)
159- bundle.Images[service] = image
160- fmt.Printf(" - %s : %s\n ", service, image.Digest )
161- }
162- // -- debug
163- dt, err = json.MarshalIndent(resp, "", " ")
164- if err != nil {
165- return err
154+ if service == "invocation-image" {
155+ bundle . InvocationImages [ 0 ]. Digest = digest
156+ } else {
157+ image := bundle .Images [service ]
158+ image . Image = fmt .Sprintf ( "%s:%s-%s " , bundle . Name , bundle . Version , service )
159+ image . ImageType = cnab . ImageTypeDocker
160+ image . Digest = digest
161+ bundle . Images [ service ] = image
162+ }
163+ fmt . Printf ( " - %s : %s \n " , service , digest )
166164 }
167- fmt.Fprintln(dockerCli.Out(), string(dt))
168- // -- debug
169- */
170- // FIXME as a workaround, inspect image we've just built to get digest
171- for service , _ := range targets {
172- ref := fmt .Sprintf ("%s:%s-%s" , bundle .Name , bundle .Version , service )
173- inspect , _ , err := dockerCli .Client ().ImageInspectWithRaw (ctx , ref )
165+
166+ if logrus .IsLevelEnabled (logrus .DebugLevel ) {
167+ dt , err := json .MarshalIndent (resp , "" , " " )
174168 if err != nil {
175169 return err
176170 }
177- image := bundle .Images [service ]
178- image .ImageType = cnab .ImageTypeDocker
179- image .Image = fmt .Sprintf ("%s:%s-%s" , bundle .Name , bundle .Version , service )
180- image .Digest = inspect .ID // Content Digest
181- bundle .Images [service ] = image
182- fmt .Printf (" - %s : %s:%s-%s (%s)\n " , service , bundle .Name , bundle .Version , service , inspect .ID )
171+ logrus .Debug (string (dt ))
183172 }
184173
185-
186174 if opt .tag == "" {
187175 opt .tag = bundle .Name + ":" + bundle .Version
188176 }
0 commit comments