Skip to content

Commit 8aea313

Browse files
authored
Merge pull request moby#3994 from alexcb/acb/race
dockerfile: arg for controlling go build flags
2 parents 5e24548 + 9f319c2 commit 8aea313

File tree

4 files changed

+30
-4
lines changed

4 files changed

+30
-4
lines changed

.github/CONTRIBUTING.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,9 @@ TESTPKGS=./client TESTFLAGS="--run //worker=containerd -v" ./hack/test integrati
156156

157157
# run a specific dockerfile test only on labs channel
158158
DOCKERFILE_RELEASES=labs TESTFLAGS="--run /TestRunGlobalNetwork/worker=oci$/ -v" ./hack/test dockerfile
159+
160+
# enabling go data race detector
161+
CGO_ENABLED=1 GOBUILDFLAGS="-race" ./hack/test integration
159162
```
160163

161164
Set `TEST_KEEP_CACHE=1` for the test framework to keep external dependant images in a docker volume

Dockerfile

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,14 @@ FROM buildkit-base AS buildkitd
9494
# BUILDKITD_TAGS defines additional Go build tags for compiling buildkitd
9595
ARG BUILDKITD_TAGS
9696
ARG TARGETPLATFORM
97+
ARG GOBUILDFLAGS
98+
ARG VERIFYFLAGS="--static"
99+
ARG CGO_ENABLED=0
97100
RUN --mount=target=. --mount=target=/root/.cache,type=cache \
98101
--mount=target=/go/pkg/mod,type=cache \
99102
--mount=source=/tmp/.ldflags,target=/tmp/.ldflags,from=buildkit-version \
100-
CGO_ENABLED=0 xx-go build -ldflags "$(cat /tmp/.ldflags) -extldflags '-static'" -tags "osusergo netgo static_build seccomp ${BUILDKITD_TAGS}" -o /usr/bin/buildkitd ./cmd/buildkitd && \
101-
xx-verify --static /usr/bin/buildkitd
103+
xx-go build ${GOBUILDFLAGS} -ldflags "$(cat /tmp/.ldflags) -extldflags '-static'" -tags "osusergo netgo static_build seccomp ${BUILDKITD_TAGS}" -o /usr/bin/buildkitd ./cmd/buildkitd && \
104+
xx-verify ${VERIFYFLAGS} /usr/bin/buildkitd
102105

103106
FROM scratch AS binaries-linux
104107
COPY --link --from=runc /usr/bin/runc /buildkit-runc

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ clean:
3434
test:
3535
./hack/test integration gateway dockerfile
3636

37+
.PHONY: test-race
38+
test-race:
39+
CGO_ENABLED=1 GOBUILDFLAGS="-race" ./hack/test integration gateway dockerfile
40+
3741
.PHONY: lint
3842
lint:
3943
$(BUILDX_CMD) bake lint

hack/test

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ set -eu -o pipefail
1313
: ${TEST_DOCKERD_BINARY=$(which dockerd)}
1414
: ${TEST_REPORT_SUFFIX=}
1515
: ${TEST_KEEP_CACHE=}
16+
: ${GOBUILDFLAGS=}
17+
: ${VERIFYFLAGS=}
18+
: ${CGO_ENABLED=}
1619
: ${DOCKERFILE_RELEASES=}
1720
: ${BUILDKIT_WORKER_RANDOM=}
1821
: ${BUILDKITD_TAGS=}
@@ -60,11 +63,24 @@ testReportsVol="-v $testReportsDir:/testreports"
6063
gotestsumArgs="--format=standard-verbose --jsonfile=/testreports/go-test-report$TEST_REPORT_SUFFIX.json --junitfile=/testreports/junit-report$TEST_REPORT_SUFFIX.xml"
6164
gotestArgs="-mod=vendor -coverprofile=/testreports/coverage-report$TEST_REPORT_SUFFIX.txt -covermode=atomic"
6265

66+
if [[ "$GOBUILDFLAGS" == *"-race"* ]]; then
67+
if [ "$CGO_ENABLED" != "1" ]; then
68+
echo >&2 "go race detector requires CGO_ENABLED=1"
69+
exit 1
70+
fi
71+
# force buildkitd to halt on detected race conditions, which will cause the tests to fail
72+
export GORACE="halt_on_error=1"
73+
export VERIFYFLAGS="" # prevent -static verification
74+
fi
75+
6376
buildxCmd build $cacheFromFlags \
6477
--build-arg BUILDKITD_TAGS \
6578
--build-arg HTTP_PROXY \
6679
--build-arg HTTPS_PROXY \
6780
--build-arg NO_PROXY \
81+
--build-arg GOBUILDFLAGS \
82+
--build-arg VERIFYFLAGS \
83+
--build-arg CGO_ENABLED \
6884
--target "integration-tests" \
6985
--output "type=docker,name=$iid" \
7086
$currentcontext
@@ -75,7 +91,7 @@ if ! docker container inspect "$cacheVolume" >/dev/null 2>/dev/null; then
7591
fi
7692

7793
if [ "$TEST_INTEGRATION" == 1 ]; then
78-
cid=$(docker create --rm -v /tmp $testReportsVol --volumes-from=$cacheVolume -e GITHUB_REF -e ACTIONS_RUNTIME_TOKEN -e ACTIONS_CACHE_URL -e TEST_DOCKERD -e SKIP_INTEGRATION_TESTS -e BUILDKIT_TEST_ENABLE_FEATURES -e GOTESTSUM_FORMAT ${BUILDKIT_INTEGRATION_SNAPSHOTTER:+"-eBUILDKIT_INTEGRATION_SNAPSHOTTER"} -e BUILDKIT_REGISTRY_MIRROR_DIR=/root/.cache/registry -e BUILDKIT_INTEGRATION_DOCKERD_FLAGS --privileged $iid gotestsum $gotestsumArgs --packages="${TESTPKGS:-./...}" -- $gotestArgs ${TESTFLAGS:--v})
94+
cid=$(docker create --rm -v /tmp $testReportsVol --volumes-from=$cacheVolume -e GITHUB_REF -e ACTIONS_RUNTIME_TOKEN -e ACTIONS_CACHE_URL -e TEST_DOCKERD -e SKIP_INTEGRATION_TESTS -e BUILDKIT_TEST_ENABLE_FEATURES -e GOTESTSUM_FORMAT ${BUILDKIT_INTEGRATION_SNAPSHOTTER:+"-eBUILDKIT_INTEGRATION_SNAPSHOTTER"} -e BUILDKIT_REGISTRY_MIRROR_DIR=/root/.cache/registry -e BUILDKIT_INTEGRATION_DOCKERD_FLAGS -e GORACE --privileged $iid gotestsum $gotestsumArgs --packages="${TESTPKGS:-./...}" -- $gotestArgs ${TESTFLAGS:--v})
7995
if [ "$TEST_DOCKERD" = "1" ]; then
8096
docker cp "$TEST_DOCKERD_BINARY" $cid:/usr/bin/dockerd
8197
fi
@@ -115,7 +131,7 @@ if [ "$TEST_DOCKERFILE" == 1 ]; then
115131

116132
if [ -s $tarout ]; then
117133
if [ "$release" = "mainline" ] || [ "$release" = "labs" ] || [ -n "$DOCKERFILE_RELEASES_CUSTOM" ] || [ "$GITHUB_ACTIONS" = "true" ]; then
118-
cid=$(docker create -v /tmp $testReportsVol --rm --privileged --volumes-from=$cacheVolume -e GITHUB_REF -e ACTIONS_RUNTIME_TOKEN -e ACTIONS_CACHE_URL -e TEST_DOCKERD -e BUILDKIT_TEST_ENABLE_FEATURES -e GOTESTSUM_FORMAT -e BUILDKIT_REGISTRY_MIRROR_DIR=/root/.cache/registry -e BUILDKIT_WORKER_RANDOM -e BUILDKIT_INTEGRATION_DOCKERD_FLAGS -e FRONTEND_GATEWAY_ONLY=local:/$release.tar -e EXTERNAL_DF_FRONTEND=/dockerfile-frontend $iid gotestsum $gotestsumArgs --packages=./frontend/dockerfile -- $gotestArgs --count=1 -tags "$buildtags" ${TESTFLAGS:--v})
134+
cid=$(docker create -v /tmp $testReportsVol --rm --privileged --volumes-from=$cacheVolume -e GITHUB_REF -e ACTIONS_RUNTIME_TOKEN -e ACTIONS_CACHE_URL -e TEST_DOCKERD -e BUILDKIT_TEST_ENABLE_FEATURES -e GOTESTSUM_FORMAT -e BUILDKIT_REGISTRY_MIRROR_DIR=/root/.cache/registry -e BUILDKIT_WORKER_RANDOM -e BUILDKIT_INTEGRATION_DOCKERD_FLAGS -e FRONTEND_GATEWAY_ONLY=local:/$release.tar -e EXTERNAL_DF_FRONTEND=/dockerfile-frontend -e GORACE $iid gotestsum $gotestsumArgs --packages=./frontend/dockerfile -- $gotestArgs --count=1 -tags "$buildtags" ${TESTFLAGS:--v})
119135
docker cp $tarout $cid:/$release.tar
120136
if [ "$TEST_DOCKERD" = "1" ]; then
121137
docker cp "$TEST_DOCKERD_BINARY" $cid:/usr/bin/dockerd

0 commit comments

Comments
 (0)