Files
hacks/ipabusedb-docker-reporter/Makefile
T
sneak ea0c484370 ipabusedb-docker-reporter: build and push multi-arch image
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.
2026-11-06 20:37:00 -08:00

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