Skip to content

Commit cb1812e

Browse files
committed
test: build details output
Signed-off-by: CrazyMax <[email protected]> (cherry picked from commit 20d2501)
1 parent 47e4c25 commit cb1812e

1 file changed

Lines changed: 46 additions & 1 deletion

File tree

tests/build.go

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ package tests
33
import (
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

3740
func 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+
142187
func createTestProject(t *testing.T) string {
143188
dockerfile := []byte(`
144189
FROM busybox:latest AS base

0 commit comments

Comments
 (0)