|
| 1 | +.SUFFIXES: |
| 2 | + |
| 3 | +# Find all directories containing metadata.hcl |
| 4 | +FILES := $(shell find . -type f -name metadata.hcl) |
| 5 | +DIRS := $(patsubst %/,%,$(patsubst ./%,%,$(dir $(FILES)))) |
| 6 | + |
| 7 | +.PHONY: all clean check prereqs $(DIRS) |
| 8 | + |
| 9 | +# Colours |
| 10 | +GREEN := \033[0;32m |
| 11 | +BLUE := \033[0;34m |
| 12 | +RED := \033[0;31m |
| 13 | +NC := \033[0m |
| 14 | + |
| 15 | +# Dry run flag |
| 16 | +DRY_RUN ?= false |
| 17 | + |
| 18 | +# -------------------------- |
| 19 | +# Prerequisite checks |
| 20 | +# -------------------------- |
| 21 | +prereqs: |
| 22 | + @echo -e "$(BLUE)Checking prerequisites...$(NC)" |
| 23 | + @command -v docker >/dev/null 2>&1 || { echo -e "$(RED)Docker is not installed.$(NC)"; exit 1; } |
| 24 | + @docker --version >/dev/null 2>&1 || { echo -e "$(RED)Cannot run docker command.$(NC)"; exit 1; } |
| 25 | + @docker buildx version >/dev/null 2>&1 || { echo -e "$(RED)Docker Buildx not available.$(NC)"; exit 1; } |
| 26 | + @docker context inspect >/dev/null 2>&1 || { echo -e "$(RED)Docker context not configured.$(NC)"; exit 1; } |
| 27 | + @echo -e "$(GREEN)All prerequisites satisfied!$(NC)" |
| 28 | + |
| 29 | +# -------------------------- |
| 30 | +# Dry-run or verification |
| 31 | +# -------------------------- |
| 32 | +check: prereqs |
| 33 | + @echo -e "$(BLUE)Performing bake --check for all projects...$(NC)" |
| 34 | + @$(foreach dir,$(DIRS), \ |
| 35 | + echo -e "$(BLUE)[CHECK] $dir$(NC)"; \ |
| 36 | + docker buildx bake -f $(dir)/metadata.hcl -f docker-bake.hcl --check; \ |
| 37 | + ) |
| 38 | + |
| 39 | +# -------------------------- |
| 40 | +# Push all images |
| 41 | +# -------------------------- |
| 42 | +push: all |
| 43 | + @echo -e "$(BLUE)Performing bake --push for all projects...$(NC)" |
| 44 | + @$(foreach dir,$(DIRS), \ |
| 45 | + echo -e "$(BLUE)[PUSH] $dir$(NC)"; \ |
| 46 | + if [ "$(DRY_RUN)" = "true" ]; then \ |
| 47 | + echo -e "$(GREEN)[DRY RUN] docker buildx bake -f $(dir)/metadata.hcl -f docker-bake.hcl --push$(NC)"; \ |
| 48 | + else \ |
| 49 | + docker buildx bake -f $(dir)/metadata.hcl -f docker-bake.hcl --push; \ |
| 50 | + fi; \ |
| 51 | + ) |
| 52 | + |
| 53 | +# -------------------------- |
| 54 | +# Build targets |
| 55 | +# -------------------------- |
| 56 | +all: prereqs $(DIRS) |
| 57 | + @echo -e "$(GREEN)======================================================$(NC)" |
| 58 | + @echo -e "$(GREEN)Build successful for all projects: $(DIRS)$(NC)" |
| 59 | + @echo -e "$(GREEN)======================================================$(NC)" |
| 60 | + |
| 61 | +# Per-project build |
| 62 | +$(DIRS): %: %/metadata.hcl |
| 63 | + @echo -e "$(BLUE)--- Starting Docker Buildx Bake for target: $@ ---$(NC)" |
| 64 | +ifeq ($(DRY_RUN),true) |
| 65 | + @echo -e "$(GREEN)[DRY RUN] docker buildx bake -f $@/metadata.hcl -f docker-bake.hcl$(NC)" |
| 66 | +else |
| 67 | + docker buildx bake -f $@/metadata.hcl -f docker-bake.hcl |
| 68 | +endif |
| 69 | + @echo -e "$(GREEN)--- Successfully built $@ ---$(NC)" |
0 commit comments