Skip to content
This repository was archived by the owner on Jul 18, 2025. It is now read-only.

Commit 67f946e

Browse files
committed
Workaround buildx#149 to get built images digests
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
1 parent 2177388 commit 67f946e

1 file changed

Lines changed: 27 additions & 10 deletions

File tree

internal/commands/build.go

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func runBuild(dockerCli command.Cli, application string, opt buildOptions) error
7373
return err
7474
}
7575

76-
for k, t := range targets {
76+
for service, t := range targets {
7777
if strings.HasPrefix(*t.Context, ".") {
7878
// Relative path in compose file under x.dockerapp refers to parent folder
7979
// FIXME docker app init should maybe udate them ?
@@ -82,8 +82,8 @@ func runBuild(dockerCli command.Cli, application string, opt buildOptions) error
8282
return err
8383
}
8484
t.Context = &path
85-
t.Tags = []string{fmt.Sprintf("%s:%s", bundle.Name, bundle.Version)}
86-
targets[k] = t
85+
t.Tags = []string{fmt.Sprintf("%s:%s-%s", bundle.Name, bundle.Version, service)}
86+
targets[service] = t
8787
}
8888
}
8989

@@ -117,28 +117,45 @@ func runBuild(dockerCli command.Cli, application string, opt buildOptions) error
117117
// FIXME add invocation image as another build target
118118

119119
pw := progress.NewPrinter(ctx2, os.Stderr, opt.progress)
120-
resp, err := build.Build(ctx2, driverInfo, buildopts, dockerAPI(dockerCli), dockerCli.ConfigFile(), pw)
120+
_, err = build.Build(ctx2, driverInfo, buildopts, dockerAPI(dockerCli), dockerCli.ConfigFile(), pw)
121121
if err != nil {
122122
return err
123123
}
124124

125125
fmt.Println("Successfully built service images")
126-
for k, r := range resp {
126+
127+
/* FIXME Build should tell us everything we need to know about digests https://github.com/docker/buildx/issues/149
128+
for service, r := range resp {
127129
digest := r.ExporterResponse["containerimage.digest"]
128-
image := bundle.Images[k]
130+
image := bundle.Images[service]
129131
image.ImageType = cnab.ImageTypeDocker
130-
image.Digest = digest
131-
bundle.Images[k] = image
132-
fmt.Printf(" - %s : %s\n", k, image.Digest)
132+
image.Image = fmt.Sprintf("%s@%s", bundle.Name, digest)
133+
bundle.Images[service] = image
134+
fmt.Printf(" - %s : %s\n", service, image.Digest)
133135
}
134-
135136
// -- debug
136137
dt, err = json.MarshalIndent(resp, "", " ")
137138
if err != nil {
138139
return err
139140
}
140141
fmt.Fprintln(dockerCli.Out(), string(dt))
141142
// -- debug
143+
*/
144+
// FIXME as a workaround, inspect image we've just built to get digest
145+
for service, _ := range targets {
146+
ref := fmt.Sprintf("%s:%s-%s", bundle.Name, bundle.Version, service)
147+
inspect, _, err := dockerCli.Client().ImageInspectWithRaw(ctx, ref)
148+
if err != nil {
149+
return err
150+
}
151+
image := bundle.Images[service]
152+
image.ImageType = cnab.ImageTypeDocker
153+
image.Image = fmt.Sprintf("%s:%s-%s", bundle.Name, bundle.Version, service)
154+
image.Digest = inspect.ID
155+
bundle.Images[service] = image
156+
fmt.Printf(" - %s : %s:%s-%s (%s)\n", service, bundle.Name, bundle.Version, service, inspect.ID)
157+
}
158+
142159

143160
if opt.tag == "" {
144161
opt.tag = bundle.Name + ":" + bundle.Version

0 commit comments

Comments
 (0)