@@ -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
@@ -33,6 +35,7 @@ var buildTests = []func(t *testing.T, sb integration.Sandbox){
3335 testBuildRegistryExport ,
3436 testBuildTarExport ,
3537 testBuildMobyFromLocalImage ,
38+ testBuildDetailsLink ,
3639}
3740
3841func testBuild (t * testing.T , sb integration.Sandbox ) {
@@ -187,6 +190,48 @@ RUN busybox | head -1 | grep v1.35.0
187190 require .NoError (t , cmd .Run ())
188191}
189192
193+ func testBuildDetailsLink (t * testing.T , sb integration.Sandbox ) {
194+ buildDetailsPattern := regexp .MustCompile (`(?m)^View build details: docker-desktop://dashboard/build/[^/]+/[^/]+/[^/]+\n$` )
195+
196+ // build simple dockerfile
197+ dockerfile := []byte (`FROM busybox:latest
198+ RUN echo foo > /bar` )
199+ dir := tmpdir (t , fstest .CreateFile ("Dockerfile" , dockerfile , 0600 ))
200+ cmd := buildxCmd (sb , withArgs ("build" , "--output=type=cacheonly" , dir ))
201+ out , err := cmd .CombinedOutput ()
202+ require .NoError (t , err , string (out ))
203+ require .False (t , buildDetailsPattern .MatchString (string (out )), fmt .Sprintf ("build details link not expected in output, got %q" , out ))
204+
205+ // create desktop-build .lastaccess file
206+ home , err := os .UserHomeDir () // TODO: sandbox should create a temp home dir and expose it through its interface
207+ require .NoError (t , err )
208+ dbDir := path .Join (home , ".docker" , "desktop-build" )
209+ require .NoError (t , os .MkdirAll (dbDir , 0755 ))
210+ dblaFile , err := os .Create (path .Join (dbDir , ".lastaccess" ))
211+ require .NoError (t , err )
212+ defer func () {
213+ dblaFile .Close ()
214+ if err := os .Remove (dblaFile .Name ()); err != nil {
215+ t .Fatal (err )
216+ }
217+ }()
218+
219+ // build again
220+ cmd = buildxCmd (sb , withArgs ("build" , "--output=type=cacheonly" , dir ))
221+ out , err = cmd .CombinedOutput ()
222+ require .NoError (t , err , string (out ))
223+ require .True (t , buildDetailsPattern .MatchString (string (out )), fmt .Sprintf ("expected build details link in output, got %q" , out ))
224+
225+ // build erroneous dockerfile
226+ dockerfile = []byte (`FROM busybox:latest
227+ RUN exit 1` )
228+ dir = tmpdir (t , fstest .CreateFile ("Dockerfile" , dockerfile , 0600 ))
229+ cmd = buildxCmd (sb , withArgs ("build" , "--output=type=cacheonly" , dir ))
230+ out , err = cmd .CombinedOutput ()
231+ require .Error (t , err , string (out ))
232+ require .True (t , buildDetailsPattern .MatchString (string (out )), fmt .Sprintf ("expected build details link in output, got %q" , out ))
233+ }
234+
190235func createTestProject (t * testing.T ) string {
191236 dockerfile := []byte (`
192237FROM busybox:latest AS base
0 commit comments