# menu-admin — container image builds.
#
# Built with Podman/Buildah, not Docker, from the committed tree
# (`git archive HEAD`) and tagged with that commit, so a deploy ships exactly
# what git knows about. deploy.sh pushes first and refuses a dirty tree.

COMMIT ?= $(shell git rev-parse --short HEAD)

# The deploy host (emily) is aarch64, so that is the default target: the image
# is built for the machine it runs on, not the one running make. Podman carries
# no built-in QEMU (unlike docker buildx), so a foreign platform needs binfmt
# handlers on this host — qemu-user-binfmt is installed here. Override with e.g.
# `make build-production PLATFORM=linux/amd64`.
PLATFORM ?= linux/arm64

IMAGE ?= registry.tanshu.com/menu-admin

.PHONY: build-production
build-production: ## Build HEAD with podman, tag :$(COMMIT) + :latest, and push
	@echo "==> podman build --platform $(PLATFORM) → $(IMAGE):$(COMMIT) + :latest"
	@git archive --format=tar HEAD | podman build \
		--platform $(PLATFORM) \
		--tag $(IMAGE):$(COMMIT) \
		--tag $(IMAGE):latest \
		--pull=always \
		- || { \
		echo "✗ podman build failed."; \
		echo "  Cross-platform builds need binfmt on this host (podman has no built-in QEMU):"; \
		echo "    sudo apt install qemu-user-binfmt  # or qemu-user-static"; \
		exit 1; \
	}
	podman push $(IMAGE):$(COMMIT)
	podman push $(IMAGE):latest

.PHONY: build-check
build-check: ## Compile check from HEAD with podman, nothing pushed
	@echo "==> podman build --platform $(PLATFORM) (no push)"
	git archive --format=tar HEAD | podman build \
		--platform $(PLATFORM) \
		--tag localhost/menu-admin:check \
		--pull=always \
		-
