From 4ebffa8c94fed437de1b804228c5ffe14cea0fc3 Mon Sep 17 00:00:00 2001 From: estebanthi Date: Mon, 5 Jan 2026 13:41:20 +0100 Subject: [PATCH] Normalize dockerfile paths for build and bake --- .github/workflows/docker-build-publish.yml | 27 ++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-build-publish.yml b/.github/workflows/docker-build-publish.yml index 5764b3a..dc1e405 100644 --- a/.github/workflows/docker-build-publish.yml +++ b/.github/workflows/docker-build-publish.yml @@ -148,10 +148,33 @@ jobs: done <<< "$BUILD_ARGS" fi + normalize_path() { + local p="$1" + while [[ "$p" == ./* ]]; do + p="${p#./}" + done + if [ "$p" != "/" ]; then + p="${p%/}" + fi + printf '%s' "$p" + } + while read -r group; do GROUP_COUNT=$(echo "$group" | jq 'length') CONTEXT=$(echo "$group" | jq -r '.[0].context') DOCKERFILE=$(echo "$group" | jq -r '.[0].dockerfile') + context_norm="$(normalize_path "$CONTEXT")" + dockerfile_norm="$(normalize_path "$DOCKERFILE")" + DOCKERFILE_FOR_BAKE="$DOCKERFILE" + DOCKERFILE_FOR_BUILD="$DOCKERFILE" + if [ -n "$context_norm" ] && [ "$context_norm" != "." ]; then + if [[ "$dockerfile_norm" == "$context_norm/"* ]]; then + DOCKERFILE_FOR_BAKE="${dockerfile_norm#$context_norm/}" + DOCKERFILE_FOR_BUILD="$dockerfile_norm" + elif [[ "$dockerfile_norm" != /* ]]; then + DOCKERFILE_FOR_BUILD="${context_norm}/${dockerfile_norm}" + fi + fi if [ "$GROUP_COUNT" -gt 1 ]; then echo "==== Building $GROUP_COUNT images from $DOCKERFILE (bake) ====" @@ -191,7 +214,7 @@ jobs: TARGET_OBJ=$(jq -n \ --arg context "$CONTEXT" \ - --arg dockerfile "$DOCKERFILE" \ + --arg dockerfile "$DOCKERFILE_FOR_BAKE" \ --arg target "$TARGET" \ --argjson tags "$TAGS_JSON" \ --argjson args "$BUILD_ARGS_JSON" \ @@ -264,7 +287,7 @@ jobs: echo "==== Building $FULL_IMAGE ====" docker buildx build \ - --file "$DOCKERFILE" \ + --file "$DOCKERFILE_FOR_BUILD" \ "${TARGET_FLAGS[@]}" \ "${CACHE_FLAGS[@]}" \ "${SSH_FLAGS[@]}" \