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

Commit b817045

Browse files
committed
Include fixes by buildx team
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
1 parent eff687d commit b817045

8 files changed

Lines changed: 47 additions & 81 deletions

File tree

Gopkg.lock

Lines changed: 4 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Gopkg.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ required = ["github.com/wadey/gocovmerge"]
2323

2424
[[constraint]]
2525
name = "github.com/docker/buildx"
26-
version = "=v0.3.0"
26+
revision = "96fb17b71125d4a11c904bd8a4298bac3b9e11e9"
2727

2828
[[override]]
2929
name = "github.com/moby/buildkit"

internal/commands/build.go

Lines changed: 20 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package commands
22

33
import (
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
}

internal/commands/bundle.go

Lines changed: 1 addition & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package commands
22

33
import (
4-
"bytes"
5-
"context"
64
"fmt"
75
"github.com/deislabs/cnab-go/bundle"
86
"github.com/docker/app/internal/packager"
@@ -12,11 +10,8 @@ import (
1210
"github.com/docker/cli/cli/command"
1311
"github.com/docker/cli/cli/config"
1412
"github.com/docker/distribution/reference"
15-
dockertypes "github.com/docker/docker/api/types"
16-
"github.com/docker/docker/pkg/jsonmessage"
1713
"github.com/pkg/errors"
1814
"github.com/sirupsen/logrus"
19-
"io/ioutil"
2015
)
2116

2217
func makeBundleFromApp(dockerCli command.Cli, app *types.App, refOverride reference.NamedTagged) (*bundle.Bundle, error) {
@@ -27,38 +22,7 @@ func makeBundleFromApp(dockerCli command.Cli, app *types.App, refOverride refere
2722
return nil, err
2823
}
2924

30-
buildContext := bytes.NewBuffer(nil)
31-
if err := packager.PackInvocationImageContext(dockerCli, app, buildContext); err != nil {
32-
return nil, err
33-
}
34-
35-
// TODO This should be managed by buildx at same time we build service images
36-
logrus.Debugf("Building invocation image %s", invocationImageName)
37-
buildResp, err := dockerCli.Client().ImageBuild(context.TODO(), buildContext, dockertypes.ImageBuildOptions{
38-
Dockerfile: "Dockerfile",
39-
Tags: []string{invocationImageName},
40-
BuildArgs: map[string]*string{},
41-
})
42-
if err != nil {
43-
return nil, err
44-
}
45-
defer buildResp.Body.Close()
46-
47-
if err := jsonmessage.DisplayJSONMessagesStream(buildResp.Body, ioutil.Discard, 0, false, func(jsonmessage.JSONMessage) {}); err != nil {
48-
// If the invocation image can't be found we will get an error of the form:
49-
// manifest for docker/cnab-app-base:v0.6.0-202-gbaf0b246c7 not found
50-
if err.Error() == fmt.Sprintf("manifest for %s not found", packager.BaseInvocationImage(dockerCli)) {
51-
return nil, fmt.Errorf("unable to resolve Docker App base image: %s", packager.BaseInvocationImage(dockerCli))
52-
}
53-
return nil, err
54-
}
55-
56-
inspect, _, err := dockerCli.Client().ImageInspectWithRaw(context.TODO(), invocationImageName)
57-
if err != nil {
58-
return nil, err
59-
}
60-
61-
return packager.ToCNAB(app, invocationImageName, inspect.ID)
25+
return packager.ToCNAB(app, invocationImageName)
6226
}
6327

6428
func makeInvocationImageName(meta metadata.AppMetadata, refOverride reference.NamedTagged) (string, error) {

internal/packager/cnab.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const (
1717
)
1818

1919
// ToCNAB creates a CNAB bundle from an app package
20-
func ToCNAB(app *types.App, invocationImageName string, digest string) (*bundle.Bundle, error) {
20+
func ToCNAB(app *types.App, invocationImageName string) (*bundle.Bundle, error) {
2121
mapping := ExtractCNABParameterMapping(app.Parameters())
2222
flatParameters := app.Parameters().Flatten()
2323
definitions := definition.Definitions{
@@ -160,7 +160,6 @@ func ToCNAB(app *types.App, invocationImageName string, digest string) (*bundle.
160160
BaseImage: bundle.BaseImage{
161161
Image: invocationImageName,
162162
ImageType: "docker",
163-
Digest: digest,
164163
},
165164
},
166165
},

internal/packager/cnab_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
func TestToCNAB(t *testing.T) {
1414
app, err := types.NewAppFromDefaultFiles("testdata/packages/packing.dockerapp")
1515
assert.NilError(t, err)
16-
actual, err := ToCNAB(app, "test-image", "")
16+
actual, err := ToCNAB(app, "test-image")
1717
assert.NilError(t, err)
1818
actualJSON, err := json.MarshalIndent(actual, "", " ")
1919
assert.NilError(t, err)

vendor/github.com/docker/buildx/bake/bake.go

Lines changed: 14 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/docker/buildx/build/build.go

Lines changed: 5 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)