IMAGE_NAME ?= botanjs IMAGE_TAG ?= dev JS_SRC_DIR ?= ./botanjs/src GO_SRC_DIR ?= ./botanres-go BUILDX_BUILDER ?= container-builder BUILDINFO_FILE := internal/generated/buildinfo_gen.go ensure-buildx: @if ! docker buildx inspect $(BUILDX_BUILDER) >/dev/null 2>&1; then \ echo "Creating buildx builder $(BUILDX_BUILDER)..."; \ docker buildx create \ --name $(BUILDX_BUILDER) \ --driver docker-container \ --driver-opt network=host \ --bootstrap --use; \ else \ echo "Using existing buildx builder $(BUILDX_BUILDER)"; \ docker buildx use $(BUILDX_BUILDER); \ fi .buildinfo: @mkdir -p $(dir $(BUILDINFO_FILE)) @printf '%s\n' \ 'package generated' \ '' \ 'const (' \ ' IMAGE_TAG = "$(IMAGE_TAG)"' \ ' Timestamp = "'$$(TZ=UTC date +%Y%m%d.%H%M%S)'"' \ ')' \ > $(BUILDINFO_FILE) gen: docker build \ -f $(GO_SRC_DIR)/dockerfiles/gen.Dockerfile \ --output type=local,dest=$(GO_SRC_DIR)/internal/generated . build: .buildinfo ensure-buildx gen docker build \ -f $(GO_SRC_DIR)/dockerfiles/api.Dockerfile \ --load \ -t $(IMAGE_NAME):$(IMAGE_TAG) . push: .buildinfo ensure-buildx gen docker buildx build \ --platform linux/amd64,linux/arm64 \ -f $(GO_SRC_DIR)/dockerfiles/api.Dockerfile \ -t $(IMAGE_NAME):$(IMAGE_TAG) \ --push . inspect: docker buildx imagetools inspect $(IMAGE_NAME):$(IMAGE_TAG) .PHONY: push build .buildinfo gen