Files
sneak ce924fd762 Add Makefile and bin/ scripts for one-command multi-arch release
make release builds, smoke-tests and pushes amd64 (on fsn1app1 via
DOCKER_HOST) and arm64 (local), joins them into latest and dated
multi-arch manifests, and commits the day's logs. Logic lives in bin/;
the Makefile only wires dependencies so -j2 runs the arches in parallel.
2026-11-05 04:41:47 -08:00

48 lines
1.2 KiB
Makefile

# Build and publish the base image. All logic lives in bin/; targets here
# only wire dependencies and export configuration.
#
# make release build, test, push both arches, tag, commit logs
# make -j2 release same, with the two arches in parallel
# make build build for this machine's arch only
# make test run the image smoke test for this machine's arch
IMAGE ?= git.eeqj.de/sneak/baseimage
DATE ?= $(shell date +%Y-%m-%d)
ARCHES ?= amd64 arm64
# Docker daemon to use per arch. Empty means the local daemon.
DOCKER_HOST_amd64 ?= ssh://root@fsn1app1
DOCKER_HOST_arm64 ?=
NATIVE_ARCH := $(shell bin/native-arch)
export IMAGE DATE ARCHES DOCKER_HOST_amd64 DOCKER_HOST_arm64
.PHONY: release manifest commit-logs build test push clean \
$(ARCHES:%=build-%) $(ARCHES:%=test-%) $(ARCHES:%=push-%)
release: commit-logs
commit-logs: manifest
bin/commit-logs
manifest: $(ARCHES:%=push-%)
bin/manifest
# Static pattern rules: plain pattern rules are skipped for .PHONY targets.
$(ARCHES:%=push-%): push-%: test-%
bin/push $*
$(ARCHES:%=test-%): test-%: build-%
bin/test $*
$(ARCHES:%=build-%): build-%:
bin/build $*
build: build-$(NATIVE_ARCH)
test: test-$(NATIVE_ARCH)
push: push-$(NATIVE_ARCH)
clean:
bin/clean