From ccf7eba6b5aef5c6bebbf5f56465d28326ae377a Mon Sep 17 00:00:00 2001 From: Ben Vincent Date: Sun, 9 Mar 2025 17:21:51 +1100 Subject: [PATCH] feat: build base before other - ensure base images are build first --- Makefile | 17 ++++++++++++++--- ci/build.sh | 17 ++++++++++++++--- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index a8a987c..fcb0948 100644 --- a/Makefile +++ b/Makefile @@ -20,16 +20,27 @@ DIRS := $(shell find $(IMAGES_PATH) -mindepth 3 -maxdepth 3 -type d | sed 's|$(I default: clean ./ci/build.sh -# Make all images +# Separate base images from others +BASE_IMAGES = $(filter %/base,$(DIRS)) +OTHER_IMAGES = $(filter-out %/base,$(DIRS)) + +# Make all images, ensuring base images build first all: - @for dir in $(DIRS); do \ + @for dir in $(BASE_IMAGES); do \ $(MAKE) $$dir; \ done + @for dir in $(OTHER_IMAGES); do \ + $(MAKE) $$dir; \ + done + # List all directories list: @echo "Images:" - @for dir in $(DIRS); do \ + @for dir in $(BASE_IMAGES); do \ + echo " '$$dir'"; \ + done + @for dir in $(OTHER_IMAGES); do \ echo " '$$dir'"; \ done diff --git a/ci/build.sh b/ci/build.sh index 19b7fe3..c6523a2 100755 --- a/ci/build.sh +++ b/ci/build.sh @@ -20,9 +20,20 @@ if [ -n "$images_changes" ]; then echo "Changes detected in images/. Running specific 'make' commands..." # Extract unique paths for `make` commands - export TARGETS=$(echo "$images_changes" | sed -E 's|images/||; s|/[^/]+$||' | sort -u) - echo $TARGETS - for target in $TARGETS; do + TARGETS=$(echo "$images_changes" | sed -E 's|images/||; s|/[^/]+$||' | sort -u) + + # Prioritize base images first + BASE_TARGETS=$(echo "$TARGETS" | grep '/base$' || true) + OTHER_TARGETS=$(echo "$TARGETS" | grep -v '/base$' || true) + + # Build base images first + for target in $BASE_TARGETS; do + echo "Running 'make $target' (base image first)..." + make "$target" + done + + # Then build other images + for target in $OTHER_TARGETS; do echo "Running 'make $target'..." make "$target" done