make push builds linux/amd64 and linux/arm64 natively, each on a daemon of that arch (amd64 on fsn1app1 via DOCKER_HOST, arm64 locally), pushes the per-arch tags, and joins them into the dated and latest manifest lists with docker buildx imagetools, mirroring the baseimage repo.
55 lines
1.4 KiB
Makefile
55 lines
1.4 KiB
Makefile
BIN := ipabusedb-docker-reporter
|
|
IMAGE := git.eeqj.de/sneak/$(BIN)
|
|
TAG := $(shell date -u +%Y-%m-%d)
|
|
|
|
# Each arch is built natively on a daemon of that arch: arm64 on the local
|
|
# daemon, amd64 on fsn1app1. Override on the command line if needed.
|
|
ARCHES := amd64 arm64
|
|
DOCKER_HOST_amd64 ?= ssh://root@fsn1app1
|
|
DOCKER_HOST_arm64 ?=
|
|
docker_for = $(if $(DOCKER_HOST_$(1)),DOCKER_HOST=$(DOCKER_HOST_$(1))) docker
|
|
|
|
.PHONY: build test lint fmt fmt-check check clean image push manifest \
|
|
$(ARCHES:%=image-%) $(ARCHES:%=push-%)
|
|
|
|
build:
|
|
go build -o $(BIN) .
|
|
|
|
# Local image for this machine's arch, for testing.
|
|
image:
|
|
docker build -t $(BIN) .
|
|
|
|
# image-ARCH builds on that arch's daemon; push-ARCH pushes the arch tag.
|
|
define arch_rules
|
|
image-$(1):
|
|
$$(call docker_for,$(1)) build --platform linux/$(1) -t $$(IMAGE):$(1) .
|
|
|
|
push-$(1): image-$(1)
|
|
$$(call docker_for,$(1)) push $$(IMAGE):$(1)
|
|
endef
|
|
$(foreach a,$(ARCHES),$(eval $(call arch_rules,$(a))))
|
|
|
|
# Join the per-arch tags into the dated and latest multi-arch manifests.
|
|
manifest:
|
|
docker buildx imagetools create -t $(IMAGE):$(TAG) -t $(IMAGE):latest \
|
|
$(ARCHES:%=$(IMAGE):%)
|
|
|
|
push: $(ARCHES:%=push-%) manifest
|
|
|
|
test:
|
|
go test ./...
|
|
|
|
fmt:
|
|
gofmt -w *.go
|
|
|
|
fmt-check:
|
|
@test -z "$$(gofmt -l .)" || { gofmt -l .; echo "gofmt: files need formatting"; exit 1; }
|
|
|
|
lint: fmt-check
|
|
go vet ./...
|
|
|
|
check: lint test build
|
|
|
|
clean:
|
|
rm -f $(BIN) *.csv
|