Skip to content

Commit

Permalink
test: build with emulator
Browse files Browse the repository at this point in the history
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
  • Loading branch information
crazy-max committed Sep 20, 2024
1 parent da99c56 commit 7ef57b3
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 2 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ require (
github.com/alecthomas/kong v0.9.0
github.com/containerd/containerd v1.7.22
github.com/containerd/continuity v0.4.3
github.com/containerd/platforms v0.2.1
github.com/go-echarts/go-echarts/v2 v2.4.2
github.com/gofrs/flock v0.12.1
github.com/google/go-github/v65 v65.0.0
Expand All @@ -29,7 +30,6 @@ require (
github.com/bitfield/gotestdox v0.2.2 // indirect
github.com/containerd/errdefs v0.1.0 // indirect
github.com/containerd/log v0.1.0 // indirect
github.com/containerd/platforms v0.2.1 // indirect
github.com/containerd/typeurl/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/distribution/reference v0.6.0 // indirect
Expand Down
42 changes: 42 additions & 0 deletions test/build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package test

import (
"fmt"
"strings"
"sync"
"testing"

"github.com/containerd/continuity/fs/fstest"
"github.com/containerd/platforms"
"github.com/moby/buildkit-bench/util/testutil"
"github.com/stretchr/testify/require"
)
Expand All @@ -19,6 +21,8 @@ func BenchmarkBuild(b *testing.B) {
"python:latest",
)
mirroredImages[dockerfileImagePin] = "docker.io/" + dockerfileImagePin
mirroredImages["amd64/busybox:latest"] = "docker.io/amd64/busybox:latest"
mirroredImages["arm64v8/busybox:latest"] = "docker.io/arm64v8/busybox:latest"
testutil.Run(b, testutil.BenchFuncs(
benchmarkBuildSimple,
benchmarkBuildMultistage,
Expand All @@ -29,6 +33,7 @@ func BenchmarkBuild(b *testing.B) {
benchmarkBuildHighParallelization64x,
benchmarkBuildHighParallelization128x,
benchmarkBuildFileTransfer,
benchmarkBuildEmulator,
), testutil.WithMirroredImages(mirroredImages))
}

Expand Down Expand Up @@ -175,3 +180,40 @@ RUN du -sh . && tree .
sb.WriteLogFile(b, "buildx", []byte(out))
require.NoError(b, err, out)
}

// https://github.com/moby/buildkit/pull/4949
func benchmarkBuildEmulator(b *testing.B, sb testutil.Sandbox) {
var busyboxImage string
var platform platforms.Platform
defaultPlatform := platforms.Normalize(platforms.DefaultSpec())
if strings.HasPrefix(defaultPlatform.Architecture, "arm") {
busyboxImage = "amd64/busybox:latest"
platform = platforms.Normalize(platforms.Platform{
OS: defaultPlatform.OS,
Architecture: "amd64",
})
} else {
busyboxImage = "arm64v8/busybox:latest"
platform = platforms.Normalize(platforms.Platform{
OS: defaultPlatform.OS,
Architecture: "arm64",
})
}

dockerfile := []byte(fmt.Sprintf(`
FROM %s
ENV QEMU_STRACE=1
RUN uname -a
`, busyboxImage))

dir := tmpdir(b, fstest.CreateFile("Dockerfile", dockerfile, 0600))
b.StartTimer()
out, err := buildxBuildCmd(sb, withArgs(
"--build-arg", "BUILDKIT_DOCKERFILE_CHECK=skip=all", // skip all checks (for InvalidBaseImagePlatform): https://docs.docker.com/build/checks/#skip-checks
"--platform", platforms.Format(platform),
dir,
))
b.StopTimer()
sb.WriteLogFile(b, "buildx", []byte(out))
require.NoError(b, err, out)
}
7 changes: 7 additions & 0 deletions testconfig.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,13 @@ runs:
duration:
description: Time (s)
chart: boxplot
BenchmarkBuildEmulator:
description: Build with emulator
count: 10
metrics:
duration:
description: Time (s)
chart: boxplot

BenchmarkDaemon:
BenchmarkDaemonVersion:
Expand Down
5 changes: 4 additions & 1 deletion util/testutil/ref.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package testutil
import (
"bufio"
"context"
"fmt"
"log"
"os"
"os/exec"
Expand Down Expand Up @@ -100,7 +101,9 @@ func (c *Ref) New(ctx context.Context, cfg *BackendConfig) (b Backend, cl func()
"--containerd-worker=false",
"--oci-worker-gc=false",
"--oci-worker-labels=org.mobyproject.buildkit.worker.sandbox=true",
}, cfg.Logs, nil)
}, cfg.Logs, []string{
fmt.Sprintf("PATH=%s:%s", path.Join(binsDir, c.id), os.Getenv("PATH")),
})
if err != nil {
printLogs(cfg.Logs, log.Println)
return nil, nil, err
Expand Down

0 comments on commit 7ef57b3

Please sign in to comment.