|
|
@@ -3,8 +3,7 @@ export GO111MODULE=on
|
|
|
|
|
|
ARCH ?= amd64
|
|
|
ALL_ARCH := amd64 arm arm64
|
|
|
-DOCKER_ARCH := "" "arm v7" "arm64 v8"
|
|
|
-IMAGE_ARCH := amd64 armhf arm64
|
|
|
+DOCKER_ARCH := "amd64" "arm v7" "arm64 v8"
|
|
|
BINS := $(addprefix bin/$(ARCH)/,kg kgctl)
|
|
|
PROJECT := kilo
|
|
|
PKG := github.com/squat/$(PROJECT)
|
|
|
@@ -34,6 +33,7 @@ OPENAPI_GEN_BINARY := bin/openapi-gen
|
|
|
GOLINT_BINARY := bin/golint
|
|
|
|
|
|
BUILD_IMAGE ?= golang:1.13.4-alpine
|
|
|
+BASE_IMAGE ?= alpine:3.11
|
|
|
|
|
|
build: $(BINS)
|
|
|
|
|
|
@@ -203,9 +203,12 @@ header: .header
|
|
|
container: .container-$(ARCH)-$(VERSION) container-name
|
|
|
.container-$(ARCH)-$(VERSION): $(BINS) Dockerfile
|
|
|
@i=0; for a in $(ALL_ARCH); do [ "$$a" = $(ARCH) ] && break; i=$$((i+1)); done; \
|
|
|
- ia=""; \
|
|
|
- j=0; for a in $(IMAGE_ARCH); do [ "$$i" -eq "$$j" ] && ia="$$a" && break; j=$$((j+1)); done; \
|
|
|
- docker build -t $(IMAGE):$(ARCH)-$(VERSION) --build-arg FROM=multiarch/alpine:$$ia-v3.11 --build-arg GOARCH=$(ARCH) .
|
|
|
+ ia=""; iv=""; \
|
|
|
+ j=0; for a in $(DOCKER_ARCH); do \
|
|
|
+ [ "$$i" -eq "$$j" ] && ia=$$(echo "$$a" | awk '{print $$1}') && iv=$$(echo "$$a" | awk '{print $$2}') && break; j=$$((j+1)); \
|
|
|
+ done; \
|
|
|
+ SHA=$$(docker manifest inspect $(BASE_IMAGE) | jq '.manifests[] | select(.platform.architecture == "'$$ia'") | if .platform | has("variant") then select(.platform.variant == "'$$iv'") else . end | .digest' -r); \
|
|
|
+ docker build -t $(IMAGE):$(ARCH)-$(VERSION) --build-arg FROM=$(BASE_IMAGE)@$$SHA --build-arg GOARCH=$(ARCH) .
|
|
|
@docker images -q $(IMAGE):$(ARCH)-$(VERSION) > $@
|
|
|
|
|
|
container-latest: .container-$(ARCH)-$(VERSION)
|