summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorDave Henderson <dhenderson@gmail.com>2019-05-09 19:09:10 -0400
committerDave Henderson <dhenderson@gmail.com>2020-04-20 20:09:31 -0400
commit44887b9f8f7490835fdee9a48accc73fa64b5b32 (patch)
tree8279af06c67edcfba734149d7bedf22b6bd4982b /Makefile
parent5833b4fcad10e3917b2e7e8a0a8bfd0b1de3f162 (diff)
Produce multi-platform Docker images
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile47
1 files changed, 40 insertions, 7 deletions
diff --git a/Makefile b/Makefile
index d6eda98d..0c3cf49a 100644
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,10 @@
extension = $(patsubst windows,.exe,$(filter windows,$(1)))
GO := go
PKG_NAME := gomplate
+DOCKER_REPO ?= hairyhenderson/$(PKG_NAME)
PREFIX := .
+DOCKER_LINUX_PLATFORMS ?= linux/amd64,linux/arm64,linux/arm/v6,linux/arm/v7
+DOCKER_PLATFORMS ?= $(DOCKER_LINUX_PLATFORMS),windows/amd64
ifeq ("$(CI)","true")
LINT_PROCS ?= 1
@@ -19,8 +22,18 @@ VERSION_FLAG := -X `go list ./version`.Version=$(VERSION)
GOOS ?= $(shell go version | sed 's/^.*\ \([a-z0-9]*\)\/\([a-z0-9]*\)/\1/')
GOARCH ?= $(shell go version | sed 's/^.*\ \([a-z0-9]*\)\/\([a-z0-9]*\)/\2/')
-platforms := freebsd-amd64 linux-amd64 linux-386 linux-arm linux-arm64 darwin-amd64 solaris-amd64 windows-amd64.exe windows-386.exe
-compressed-platforms := linux-amd64-slim linux-arm-slim linux-arm64-slim darwin-amd64-slim windows-amd64-slim.exe
+ifeq ("$(TARGETVARIANT)","")
+ifneq ("$(GOARM)","")
+TARGETVARIANT := v$(GOARM)
+endif
+else
+ifeq ("$(GOARM)","")
+GOARM ?= $(subst v,,$(TARGETVARIANT))
+endif
+endif
+
+platforms := freebsd-amd64 linux-amd64 linux-386 linux-armv6 linux-armv7 linux-arm64 darwin-amd64 solaris-amd64 windows-amd64.exe windows-386.exe
+compressed-platforms := linux-amd64-slim linux-armv6-slim linux-armv7-slim linux-arm64-slim darwin-amd64-slim windows-amd64-slim.exe
clean:
rm -Rf $(PREFIX)/bin/*
@@ -47,7 +60,7 @@ $(PREFIX)/bin/checksums.txt: \
$(PREFIX)/%.signed: $(PREFIX)/%
@keybase sign < $< > $@
-compress: $(PREFIX)/bin/$(PKG_NAME)_$(GOOS)-$(GOARCH)-slim$(call extension,$(GOOS))
+compress: $(PREFIX)/bin/$(PKG_NAME)_$(GOOS)-$(GOARCH)$(TARGETVARIANT)-slim$(call extension,$(GOOS))
cp $< $(PREFIX)/bin/$(PKG_NAME)-slim$(call extension,$(GOOS))
%.iid: Dockerfile
@@ -57,6 +70,26 @@ compress: $(PREFIX)/bin/$(PKG_NAME)_$(GOOS)-$(GOARCH)-slim$(call extension,$(GOO
--iidfile $@ \
.
+docker-multi: Dockerfile
+ docker buildx build \
+ --build-arg VCS_REF=$(COMMIT) \
+ --platform $(DOCKER_PLATFORMS) \
+ --tag $(DOCKER_REPO):latest-$(COMMIT) \
+ --target gomplate \
+ --push .
+ docker buildx build \
+ --build-arg VCS_REF=$(COMMIT) \
+ --platform $(DOCKER_PLATFORMS) \
+ --tag $(DOCKER_REPO):slim-$(COMMIT) \
+ --target gomplate-slim \
+ --push .
+ docker buildx build \
+ --build-arg VCS_REF=$(COMMIT) \
+ --platform $(DOCKER_LINUX_PLATFORMS) \
+ --tag $(DOCKER_REPO):alpine-$(COMMIT) \
+ --target gomplate-alpine \
+ --push .
+
%.cid: %.iid
@docker create $(shell cat $<) > $@
@@ -65,17 +98,17 @@ build-release: artifacts.cid
docker-images: gomplate.iid gomplate-slim.iid
-$(PREFIX)/bin/$(PKG_NAME)_%: $(shell find $(PREFIX) -type f -name "*.go")
- GOOS=$(shell echo $* | cut -f1 -d-) GOARCH=$(shell echo $* | cut -f2 -d- | cut -f1 -d.) CGO_ENABLED=0 \
+$(PREFIX)/bin/$(PKG_NAME)_%$(TARGETVARIANT)$(call extension,$(GOOS)): $(shell find $(PREFIX) -type f -name "*.go")
+ GOOS=$(shell echo $* | cut -f1 -d-) GOARCH=$(shell echo $* | cut -f2 -d- ) GOARM=$(GOARM) CGO_ENABLED=0 \
$(GO) build \
-ldflags "-w -s $(COMMIT_FLAG) $(VERSION_FLAG)" \
-o $@ \
./cmd/gomplate
-$(PREFIX)/bin/$(PKG_NAME)$(call extension,$(GOOS)): $(PREFIX)/bin/$(PKG_NAME)_$(GOOS)-$(GOARCH)$(call extension,$(GOOS))
+$(PREFIX)/bin/$(PKG_NAME)$(call extension,$(GOOS)): $(PREFIX)/bin/$(PKG_NAME)_$(GOOS)-$(GOARCH)$(TARGETVARIANT)$(call extension,$(GOOS))
cp $< $@
-build: $(PREFIX)/bin/$(PKG_NAME)$(call extension,$(GOOS))
+build: $(PREFIX)/bin/$(PKG_NAME)_$(GOOS)-$(GOARCH)$(TARGETVARIANT)$(call extension,$(GOOS)) $(PREFIX)/bin/$(PKG_NAME)$(call extension,$(GOOS))
ifeq ($(OS),Windows_NT)
test: