@@ -3,10 +3,11 @@ package tests
33import (
44 "bytes"
55 "encoding/json"
6- "errors"
76 "fmt"
87 "os"
8+ "path"
99 "path/filepath"
10+ "regexp"
1011 "strings"
1112 "testing"
1213
@@ -16,6 +17,7 @@ import (
1617 "github.com/moby/buildkit/util/testutil"
1718 "github.com/moby/buildkit/util/testutil/integration"
1819 "github.com/opencontainers/go-digest"
20+ "github.com/pkg/errors"
1921 "github.com/stretchr/testify/require"
2022)
2123
@@ -32,6 +34,7 @@ var buildTests = []func(t *testing.T, sb integration.Sandbox){
3234 testBuildLocalExport ,
3335 testBuildRegistryExport ,
3436 testBuildTarExport ,
37+ testBuildDetailsLink ,
3538}
3639
3740func testBuild (t * testing.T , sb integration.Sandbox ) {
@@ -139,6 +142,48 @@ func testImageIDOutput(t *testing.T, sb integration.Sandbox) {
139142 require .Equal (t , dgst , digest .Digest (md .ConfigDigest ))
140143}
141144
145+ func testBuildDetailsLink (t * testing.T , sb integration.Sandbox ) {
146+ buildDetailsPattern := regexp .MustCompile (`(?m)^View build details: docker-desktop://dashboard/build/[^/]+/[^/]+/[^/]+\n$` )
147+
148+ // build simple dockerfile
149+ dockerfile := []byte (`FROM busybox:latest
150+ RUN echo foo > /bar` )
151+ dir := tmpdir (t , fstest .CreateFile ("Dockerfile" , dockerfile , 0600 ))
152+ cmd := buildxCmd (sb , withArgs ("build" , "--output=type=cacheonly" , dir ))
153+ out , err := cmd .CombinedOutput ()
154+ require .NoError (t , err , string (out ))
155+ require .False (t , buildDetailsPattern .MatchString (string (out )), fmt .Sprintf ("build details link not expected in output, got %q" , out ))
156+
157+ // create desktop-build .lastaccess file
158+ home , err := os .UserHomeDir () // TODO: sandbox should create a temp home dir and expose it through its interface
159+ require .NoError (t , err )
160+ dbDir := path .Join (home , ".docker" , "desktop-build" )
161+ require .NoError (t , os .MkdirAll (dbDir , 0755 ))
162+ dblaFile , err := os .Create (path .Join (dbDir , ".lastaccess" ))
163+ require .NoError (t , err )
164+ defer func () {
165+ dblaFile .Close ()
166+ if err := os .Remove (dblaFile .Name ()); err != nil {
167+ t .Fatal (err )
168+ }
169+ }()
170+
171+ // build again
172+ cmd = buildxCmd (sb , withArgs ("build" , "--output=type=cacheonly" , dir ))
173+ out , err = cmd .CombinedOutput ()
174+ require .NoError (t , err , string (out ))
175+ require .True (t , buildDetailsPattern .MatchString (string (out )), fmt .Sprintf ("expected build details link in output, got %q" , out ))
176+
177+ // build erroneous dockerfile
178+ dockerfile = []byte (`FROM busybox:latest
179+ RUN exit 1` )
180+ dir = tmpdir (t , fstest .CreateFile ("Dockerfile" , dockerfile , 0600 ))
181+ cmd = buildxCmd (sb , withArgs ("build" , "--output=type=cacheonly" , dir ))
182+ out , err = cmd .CombinedOutput ()
183+ require .Error (t , err , string (out ))
184+ require .True (t , buildDetailsPattern .MatchString (string (out )), fmt .Sprintf ("expected build details link in output, got %q" , out ))
185+ }
186+
142187func createTestProject (t * testing.T ) string {
143188 dockerfile := []byte (`
144189FROM busybox:latest AS base
0 commit comments