Normalize dockerfile paths for build and bake
This commit is contained in:
27
.github/workflows/docker-build-publish.yml
vendored
27
.github/workflows/docker-build-publish.yml
vendored
@@ -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[@]}" \
|
||||
|
||||
Reference in New Issue
Block a user