Browse code

Merge pull request #40089 from thaJeztah/fix_buildx_target

Fix various issues with the "make buildx" target

Sebastiaan van Stijn authored on 2019/10/22 09:07:05
Showing 3 changed files
... ...
@@ -1,14 +1,27 @@
1 1
 ARG GO_VERSION=1.12.10
2
-FROM golang:${GO_VERSION}-stretch
2
+ARG BUILDX_COMMIT=v0.3.1
3 3
 ARG BUILDX_REPO=https://github.com/docker/buildx.git
4
+
5
+FROM golang:${GO_VERSION}-stretch AS build
6
+ARG BUILDX_REPO
4 7
 RUN git clone "${BUILDX_REPO}" /buildx
5 8
 WORKDIR /buildx
6
-ARG BUILDX_COMMIT=master
9
+ARG BUILDX_COMMIT
7 10
 RUN git fetch origin "${BUILDX_COMMIT}":build && git checkout build
8 11
 RUN go mod download
9 12
 ARG GOOS
10 13
 ARG GOARCH
11 14
 # Keep these essentially no-op var settings for debug purposes.
12 15
 # It allows us to see what the GOOS/GOARCH that's being built for is.
13
-RUN GOOS=${GOOS} GOARCH=${GOARCH} go build -ldflags '-X github.com/docker/buildx/version.Version=${BUILDX_COMMIT} -X github.com/docker/buildx/version.Revision=${BUILDX_COMMIT} -X github.com/docker/buildx/version.Package=github.com/docker/buildx' -o /usr/bin/buildx ./cmd/buildx
14
-ENTRYPOINT ["/usr/bin/buildx"]
15 16
\ No newline at end of file
17
+RUN GOOS="${GOOS}" GOARCH="${GOARCH}" BUILDX_COMMIT="${BUILDX_COMMIT}"; \
18
+    pkg="github.com/docker/buildx"; \
19
+    ldflags="\
20
+      -X \"${pkg}/version.Version=$(git describe --tags)\" \
21
+      -X \"${pkg}/version.Revision=$(git rev-parse --short HEAD)\" \
22
+      -X \"${pkg}/version.Package=buildx\" \
23
+    "; \
24
+    go build -ldflags "${ldflags}" -o /usr/bin/buildx ./cmd/buildx
25
+
26
+FROM golang:${GO_VERSION}-stretch
27
+COPY --from=build /usr/bin/buildx /usr/bin/buildx
28
+ENTRYPOINT ["/usr/bin/buildx"]
... ...
@@ -377,8 +377,12 @@ pipeline {
377 377
                         expression { params.s390x }
378 378
                     }
379 379
                     agent { label 's390x-ubuntu-1604' }
380
-                    // s390x machines run on Docker 18.06, and buildkit has some bugs on that version
381
-                    environment { DOCKER_BUILDKIT = '0' }
380
+                    // s390x machines run on Docker 18.06, and buildkit has some
381
+                    // bugs on that version. Build and use buildx instead.
382
+                    environment {
383
+                        USE_BUILDX      = '1'
384
+                        DOCKER_BUILDKIT = '0'
385
+                    }
382 386
 
383 387
                     stages {
384 388
                         stage("Print info") {
... ...
@@ -486,8 +490,12 @@ pipeline {
486 486
                         expression { params.s390x }
487 487
                     }
488 488
                     agent { label 's390x-ubuntu-1604' }
489
-                    // s390x machines run on Docker 18.06, and buildkit has some bugs on that version
490
-                    environment { DOCKER_BUILDKIT = '0' }
489
+                    // s390x machines run on Docker 18.06, and buildkit has some
490
+                    // bugs on that version. Build and use buildx instead.
491
+                    environment {
492
+                        USE_BUILDX      = '1'
493
+                        DOCKER_BUILDKIT = '0'
494
+                    }
491 495
 
492 496
                     stages {
493 497
                         stage("Print info") {
... ...
@@ -571,8 +579,12 @@ pipeline {
571 571
                         expression { params.ppc64le }
572 572
                     }
573 573
                     agent { label 'ppc64le-ubuntu-1604' }
574
-                    // ppc64le machines run on Docker 18.06, and buildkit has some bugs on that version
575
-                    environment { DOCKER_BUILDKIT = '0' }
574
+                    // ppc64le machines run on Docker 18.06, and buildkit has some
575
+                    // bugs on that version. Build and use buildx instead.
576
+                    environment {
577
+                        USE_BUILDX      = '1'
578
+                        DOCKER_BUILDKIT = '0'
579
+                    }
576 580
 
577 581
                     stages {
578 582
                         stage("Print info") {
... ...
@@ -680,8 +692,12 @@ pipeline {
680 680
                         expression { params.ppc64le }
681 681
                     }
682 682
                     agent { label 'ppc64le-ubuntu-1604' }
683
-                    // ppc64le machines run on Docker 18.06, and buildkit has some bugs on that version
684
-                    environment { DOCKER_BUILDKIT = '0' }
683
+                    // ppc64le machines run on Docker 18.06, and buildkit has some
684
+                    // bugs on that version. Build and use buildx instead.
685
+                    environment {
686
+                        USE_BUILDX      = '1'
687
+                        DOCKER_BUILDKIT = '0'
688
+                    }
685 689
 
686 690
                     stages {
687 691
                         stage("Print info") {
... ...
@@ -247,21 +247,25 @@ swagger-docs: ## preview the API documentation
247 247
 
248 248
 .PHONY: buildx
249 249
 ifeq ($(BUILDX), bundles/buildx)
250
-buildx: bundles/buildx # build buildx cli tool
251
-else
252
-buildx:
250
+buildx: bundles/buildx ## build buildx cli tool
253 251
 endif
254 252
 
255
-bundles/buildx: BUILDX_DOCKERFILE ?= Dockerfile.buildx
256
-bundles/buildx: BUILDX_COMMIT ?= v0.3.0
253
+# This intentionally is not using the `--output` flag from the docker CLI, which
254
+# is a buildkit option. The idea here being that if buildx is being used, it's
255
+# because buildkit is not supported natively
257 256
 bundles/buildx: bundles ## build buildx CLI tool
258
-	# This intetionally is not using the `--output` flag from the docker CLI which is a buildkit option
259
-	# The idea here being that if buildx is being used, it's because buildkit is not supported natively
260
-	docker build -f $(BUILDX_DOCKERFILE) -t "moby-buildx:$(BUILDX_COMMIT)" \
257
+	docker build -f $${BUILDX_DOCKERFILE:-Dockerfile.buildx} -t "moby-buildx:$${BUILDX_COMMIT:-latest}" \
261 258
 		--build-arg BUILDX_COMMIT \
262 259
 		--build-arg BUILDX_REPO \
263 260
 		--build-arg GOOS=$$(if [ -n "$(GOOS)" ]; then echo $(GOOS); else go env GOHOSTOS || uname | awk '{print tolower($$0)}' || true; fi) \
264 261
 		--build-arg GOARCH=$$(if [ -n "$(GOARCH)" ]; then echo $(GOARCH); else go env GOHOSTARCH || true; fi) \
265
-		. && \
266
-		id=$$(docker create moby-buildx:$(BUILDX_COMMIT)); \
267
-		if [ -n "$${id}" ]; then docker cp $${id}:/usr/bin/buildx $@ && touch $@; docker rm -f $${id}; fi
262
+		.
263
+
264
+	id=$$(docker create moby-buildx:$${BUILDX_COMMIT:-latest}); \
265
+	if [ -n "$${id}" ]; then \
266
+		docker cp $${id}:/usr/bin/buildx $@ \
267
+		&& touch $@; \
268
+		docker rm -f $${id}; \
269
+	fi
270
+
271
+	$@ version