Skip to content

Commit 52cddf9

Browse files
committed
build: fix build details link in experimental mode
Signed-off-by: CrazyMax <[email protected]>
1 parent d3ff70a commit 52cddf9

File tree

9 files changed

+104
-18
lines changed

9 files changed

+104
-18
lines changed

cmd/buildx/main.go

+10-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"os"
77

88
"github.com/docker/buildx/commands"
9+
controllererrors "github.com/docker/buildx/controller/errdefs"
910
"github.com/docker/buildx/util/desktop"
1011
"github.com/docker/buildx/version"
1112
"github.com/docker/cli/cli"
@@ -16,6 +17,7 @@ import (
1617
cliflags "github.com/docker/cli/cli/flags"
1718
"github.com/moby/buildkit/solver/errdefs"
1819
"github.com/moby/buildkit/util/stack"
20+
"github.com/pkg/errors"
1921
"go.opentelemetry.io/otel"
2022

2123
//nolint:staticcheck // vendored dependencies may still use this
@@ -109,8 +111,15 @@ func main() {
109111
} else {
110112
fmt.Fprintf(cmd.Err(), "ERROR: %v\n", err)
111113
}
112-
if ebr, ok := err.(*desktop.ErrorWithBuildRef); ok {
114+
115+
var ebr *desktop.ErrorWithBuildRef
116+
if errors.As(err, &ebr) {
113117
ebr.Print(cmd.Err())
118+
} else {
119+
var be *controllererrors.BuildError
120+
if errors.As(err, &be) {
121+
be.PrintBuildDetails(cmd.Err())
122+
}
114123
}
115124

116125
os.Exit(1)

controller/errdefs/build.go

+16-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package errdefs
22

33
import (
4+
"io"
5+
46
"github.com/containerd/typeurl/v2"
7+
"github.com/docker/buildx/util/desktop"
58
"github.com/moby/buildkit/util/grpcerrors"
69
)
710

@@ -22,11 +25,22 @@ func (e *BuildError) ToProto() grpcerrors.TypedErrorProto {
2225
return e.Build
2326
}
2427

25-
func WrapBuild(err error, ref string) error {
28+
func (e *BuildError) PrintBuildDetails(w io.Writer) error {
29+
if e.BuildRef == "" {
30+
return nil
31+
}
32+
ebr := &desktop.ErrorWithBuildRef{
33+
Ref: e.BuildRef,
34+
Err: e.error,
35+
}
36+
return ebr.Print(w)
37+
}
38+
39+
func WrapBuild(err error, ref string, buildRef string) error {
2640
if err == nil {
2741
return nil
2842
}
29-
return &BuildError{Build: &Build{Ref: ref}, error: err}
43+
return &BuildError{Build: &Build{Ref: ref, BuildRef: buildRef}, error: err}
3044
}
3145

3246
func (b *Build) WrapError(err error) error {

controller/errdefs/errdefs.pb.go

+16-7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

controller/errdefs/errdefs.proto

+1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ option go_package = "github.com/docker/buildx/controller/errdefs";
66

77
message Build {
88
string Ref = 1;
9+
string BuildRef = 2;
910
}

controller/errdefs/errdefs_vtproto.pb.go

+47
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

controller/local/controller.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
controllererrors "github.com/docker/buildx/controller/errdefs"
1212
controllerapi "github.com/docker/buildx/controller/pb"
1313
"github.com/docker/buildx/controller/processes"
14+
"github.com/docker/buildx/util/desktop"
1415
"github.com/docker/buildx/util/ioset"
1516
"github.com/docker/buildx/util/progress"
1617
"github.com/docker/cli/cli/command"
@@ -56,7 +57,12 @@ func (b *localController) Build(ctx context.Context, options *controllerapi.Buil
5657
buildOptions: options,
5758
}
5859
if buildErr != nil {
59-
buildErr = controllererrors.WrapBuild(buildErr, b.ref)
60+
var buildRef string
61+
var ebr *desktop.ErrorWithBuildRef
62+
if errors.As(buildErr, &ebr) {
63+
buildRef = ebr.Ref
64+
}
65+
buildErr = controllererrors.WrapBuild(buildErr, b.ref, buildRef)
6066
}
6167
}
6268
if buildErr != nil {

controller/remote/server.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
controllererrors "github.com/docker/buildx/controller/errdefs"
1212
"github.com/docker/buildx/controller/pb"
1313
"github.com/docker/buildx/controller/processes"
14+
"github.com/docker/buildx/util/desktop"
1415
"github.com/docker/buildx/util/ioset"
1516
"github.com/docker/buildx/util/progress"
1617
"github.com/docker/buildx/version"
@@ -210,7 +211,12 @@ func (m *Server) Build(ctx context.Context, req *pb.BuildRequest) (*pb.BuildResp
210211
s.buildOptions = req.Options
211212
m.session[ref] = s
212213
if buildErr != nil {
213-
buildErr = controllererrors.WrapBuild(buildErr, ref)
214+
var buildRef string
215+
var ebr *desktop.ErrorWithBuildRef
216+
if errors.As(buildErr, &ebr) {
217+
buildRef = ebr.Ref
218+
}
219+
buildErr = controllererrors.WrapBuild(buildErr, ref, buildRef)
214220
}
215221
}
216222
} else {

tests/build.go

-5
Original file line numberDiff line numberDiff line change
@@ -492,11 +492,6 @@ RUN echo foo > /bar`)
492492
require.NoError(t, err, string(out))
493493
require.True(t, buildDetailsPattern.MatchString(string(out)), fmt.Sprintf("expected build details link in output, got %q", out))
494494

495-
if isExperimental() {
496-
// FIXME: https://github.com/docker/buildx/issues/2382
497-
t.Skip("build details link not displayed in experimental mode when build fails: https://github.com/docker/buildx/issues/2382")
498-
}
499-
500495
// build erroneous dockerfile
501496
dockerfile = []byte(`FROM busybox:latest
502497
RUN exit 1`)

util/desktop/desktop.go

-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ func hyperlink(url string) string {
6565
type ErrorWithBuildRef struct {
6666
Ref string
6767
Err error
68-
Msg string
6968
}
7069

7170
func (e *ErrorWithBuildRef) Error() string {

0 commit comments

Comments
 (0)