ci(workflows): enhance debug logging and safety in image detection
Refactor the 'Detect changed images' step in the build-images workflow to improve robustness and debuggability. Changes include: - Pass `inputs.image` via an environment variable (`INPUT_IMAGE`) to avoid potential injection issues or syntax errors in shell scripts. - Add comprehensive `DEBUG` echo statements to trace the logic flow for both manual and automatic detection paths. - Use `printf` instead of `echo` for writing to `$GITHUB_OUTPUT` to ensure safer handling of string outputs. - Remove redundant comments to clean up the script block.
This commit is contained in:
@@ -36,16 +36,22 @@ jobs:
|
|||||||
|
|
||||||
- name: Detect changed images
|
- name: Detect changed images
|
||||||
id: changes
|
id: changes
|
||||||
|
env:
|
||||||
|
INPUT_IMAGE: ${{ inputs.image }}
|
||||||
run: |
|
run: |
|
||||||
# 1. Handle Manual Input
|
# 1. Handle Manual Input
|
||||||
if [ -n "${{ inputs.image }}" ]; then
|
if [ -n "$INPUT_IMAGE" ]; then
|
||||||
# Clean input
|
# Clean input
|
||||||
IMAGE=$(echo "${{ inputs.image }}" | xargs)
|
IMAGE=$(echo "$INPUT_IMAGE" | xargs)
|
||||||
|
echo "DEBUG: Processing manual input image: '$IMAGE'"
|
||||||
|
|
||||||
if [ -n "$IMAGE" ]; then
|
if [ -n "$IMAGE" ]; then
|
||||||
if [ -d "images/$IMAGE" ] && [ -f "images/$IMAGE/Dockerfile" ]; then
|
if [ -d "images/$IMAGE" ] && [ -f "images/$IMAGE/Dockerfile" ]; then
|
||||||
echo "Manual image detected: $IMAGE"
|
echo "DEBUG: Image directory and Dockerfile exist."
|
||||||
echo "matrix=[\"$IMAGE\"]" >> $GITHUB_OUTPUT
|
# Use printf for safer output
|
||||||
|
printf "matrix=[\"%s\"]\n" "$IMAGE" >> $GITHUB_OUTPUT
|
||||||
echo "has_changes=true" >> $GITHUB_OUTPUT
|
echo "has_changes=true" >> $GITHUB_OUTPUT
|
||||||
|
echo "DEBUG: Set matrix=['$IMAGE']"
|
||||||
exit 0
|
exit 0
|
||||||
else
|
else
|
||||||
echo "Error: Image '$IMAGE' not found or missing Dockerfile at images/$IMAGE/Dockerfile"
|
echo "Error: Image '$IMAGE' not found or missing Dockerfile at images/$IMAGE/Dockerfile"
|
||||||
@@ -54,7 +60,7 @@ jobs:
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "Input image name was empty."
|
echo "DEBUG: Input image name was empty after trimming."
|
||||||
echo "has_changes=false" >> $GITHUB_OUTPUT
|
echo "has_changes=false" >> $GITHUB_OUTPUT
|
||||||
echo "matrix=[]" >> $GITHUB_OUTPUT
|
echo "matrix=[]" >> $GITHUB_OUTPUT
|
||||||
exit 0
|
exit 0
|
||||||
@@ -62,15 +68,14 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# 2. Handle Automatic Detection (Git Diff)
|
# 2. Handle Automatic Detection (Git Diff)
|
||||||
|
echo "DEBUG: Running git diff detection..."
|
||||||
> valid_images.txt
|
> valid_images.txt
|
||||||
|
|
||||||
CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD -- images/ 2>/dev/null || true)
|
CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD -- images/ 2>/dev/null || true)
|
||||||
|
|
||||||
# Extract potential image directories (first level subdirs in images/)
|
|
||||||
CANDIDATES=$(echo "$CHANGED_FILES" | cut -d'/' -f2 | sort -u | grep -v '^$')
|
CANDIDATES=$(echo "$CHANGED_FILES" | cut -d'/' -f2 | sort -u | grep -v '^$')
|
||||||
|
|
||||||
for CANDIDATE in $CANDIDATES; do
|
for CANDIDATE in $CANDIDATES; do
|
||||||
# Verify it's a directory with a Dockerfile
|
|
||||||
if [ -d "images/$CANDIDATE" ] && [ -f "images/$CANDIDATE/Dockerfile" ]; then
|
if [ -d "images/$CANDIDATE" ] && [ -f "images/$CANDIDATE/Dockerfile" ]; then
|
||||||
echo "$CANDIDATE" >> valid_images.txt
|
echo "$CANDIDATE" >> valid_images.txt
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user