From 0757f80c336f69eb44bdd50783a2064cb3207e91 Mon Sep 17 00:00:00 2001 From: Michael Fornaro <20387402+xUnholy@users.noreply.github.com> Date: Mon, 30 Mar 2020 11:28:26 +1100 Subject: [PATCH] Allow Dockerfile --build-args to override GOOS and GOARCH defaults Allow Dockerfile --build-args to override GOOS and GOARCH defaults Support building multi architecture binaries remove default OS and ARCH to avoid tag confusion when compiling image through Makefile Tag image with corrosponding OS and ARCH build variables updating Makefile Signed-off-by: Michael Fornaro <20387402+xUnholy@users.noreply.github.com> --- Dockerfile | 11 ++++++----- Makefile | 36 +++++++++++++++++++++++++++--------- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/Dockerfile b/Dockerfile index 97ef11e3..ca5716b6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,11 @@ # use a builder image for building cloudflare +ARG TARGET_GOOS +ARG TARGET_GOARCH FROM golang:1.13.3 as builder -ENV GO111MODULE=on -ENV CGO_ENABLED=0 -ENV GOOS=linux +ENV GO111MODULE=on \ + CGO_ENABLED=0 \ + TARGET_GOOS=${TARGET_GOOS} \ + TARGET_GOARCH=${TARGET_GOARCH} WORKDIR /go/src/github.com/cloudflare/cloudflared/ @@ -12,8 +15,6 @@ COPY . . # compile cloudflared RUN make cloudflared -# --- - # use a distroless base image with glibc FROM gcr.io/distroless/base-debian10:nonroot diff --git a/Makefile b/Makefile index 7aef9225..12ec9209 100644 --- a/Makefile +++ b/Makefile @@ -7,17 +7,35 @@ PACKAGE_DIR := $(CURDIR)/packaging INSTALL_BINDIR := usr/local/bin EQUINOX_FLAGS = --version="$(VERSION)" \ - --platforms="$(EQUINOX_BUILD_PLATFORMS)" \ - --app="$(EQUINOX_APP_ID)" \ - --token="$(EQUINOX_TOKEN)" \ - --channel="$(EQUINOX_CHANNEL)" + --platforms="$(EQUINOX_BUILD_PLATFORMS)" \ + --app="$(EQUINOX_APP_ID)" \ + --token="$(EQUINOX_TOKEN)" \ + --channel="$(EQUINOX_CHANNEL)" ifeq ($(EQUINOX_IS_DRAFT), true) EQUINOX_FLAGS := --draft $(EQUINOX_FLAGS) endif -ifeq ($(GOARCH),) - GOARCH := amd64 +LOCAL_ARCH ?= $(shell uname -m) +ifeq ($(LOCAL_ARCH),x86_64) + TARGET_ARCH ?= amd64 +else ifeq ($(shell echo $(LOCAL_ARCH) | head -c 5),armv8) + TARGET_ARCH ?= arm64 +else ifeq ($(LOCAL_ARCH),aarch64) + TARGET_ARCH ?= arm64 +else ifeq ($(shell echo $(LOCAL_ARCH) | head -c 4),armv) + TARGET_ARCH ?= arm +else + $(error This system's architecture $(LOCAL_ARCH) isn't supported) +endif + +LOCAL_OS ?= $(shell go env GOOS) +ifeq ($(LOCAL_OS),linux) + TARGET_OS ?= linux +else ifeq ($(LOCAL_OS),darwin) + TARGET_OS ?= darwin +else + $(error This system's OS $(LOCAL_OS) isn't supported) endif .PHONY: all @@ -29,11 +47,11 @@ clean: .PHONY: cloudflared cloudflared: tunnel-deps - go build -v -mod=vendor $(VERSION_FLAGS) $(IMPORT_PATH)/cmd/cloudflared + GOOS=$(TARGET_OS) GOARCH=$(TARGET_ARCH) go build -v -mod=vendor $(VERSION_FLAGS) $(IMPORT_PATH)/cmd/cloudflared .PHONY: container container: - docker build -t cloudflare/cloudflared:"$(VERSION)" . + docker build --build-arg=TARGET_ARCH=$(TARGET_ARCH) --build-arg=TARGET_OS=$(TARGET_OS) -t cloudflare/cloudflared-$(TARGET_OS)-$(TARGET_ARCH):"$(VERSION)" . .PHONY: test test: vet @@ -48,7 +66,7 @@ cloudflared-deb: cloudflared mkdir -p $(PACKAGE_DIR) cp cloudflared $(PACKAGE_DIR)/cloudflared fakeroot fpm -C $(PACKAGE_DIR) -s dir -t deb --deb-compression bzip2 \ - -a $(GOARCH) -v $(VERSION) -n cloudflared cloudflared=/usr/local/bin/ + -a $(TARGET_ARCH) -v $(VERSION) -n cloudflared cloudflared=/usr/local/bin/ .PHONY: cloudflared-darwin-amd64.tgz cloudflared-darwin-amd64.tgz: cloudflared