ci: refine image detection logic in build workflow
Updated the image detection step in the `.gitea/workflows/build-images.yml` workflow to better handle manual inputs and automatic change detection. Changes: - Reorganized the logic to handle manual inputs first; if a manual input is present, it validates the image, sets the output matrix immediately, and exits, bypassing git diff checks. - Added explicit error handling and output setting for invalid or empty manual inputs to prevent workflow failure confusion. - Grouped the Git diff detection logic into a distinct block that runs only if no manual input is provided. - Added a debug echo statement to the build job to verify the current matrix image being built.
This commit is contained in:
@@ -37,35 +37,45 @@ jobs:
|
|||||||
- name: Detect changed images
|
- name: Detect changed images
|
||||||
id: changes
|
id: changes
|
||||||
run: |
|
run: |
|
||||||
# Prepare output file for valid images
|
# 1. Handle Manual Input
|
||||||
> valid_images.txt
|
|
||||||
|
|
||||||
if [ -n "${{ inputs.image }}" ]; then
|
if [ -n "${{ inputs.image }}" ]; then
|
||||||
# Manual trigger with input
|
# Clean input
|
||||||
IMAGE=$(echo "${{ inputs.image }}" | xargs)
|
IMAGE=$(echo "${{ inputs.image }}" | xargs)
|
||||||
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 "$IMAGE" >> valid_images.txt
|
echo "Manual image detected: $IMAGE"
|
||||||
|
echo "matrix=[\"$IMAGE\"]" >> $GITHUB_OUTPUT
|
||||||
|
echo "has_changes=true" >> $GITHUB_OUTPUT
|
||||||
|
exit 0
|
||||||
else
|
else
|
||||||
echo "Warning: Image '$IMAGE' not found or missing Dockerfile at images/$IMAGE/Dockerfile"
|
echo "Error: Image '$IMAGE' not found or missing Dockerfile at images/$IMAGE/Dockerfile"
|
||||||
|
echo "has_changes=false" >> $GITHUB_OUTPUT
|
||||||
|
echo "matrix=[]" >> $GITHUB_OUTPUT
|
||||||
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
echo "Input image name was empty."
|
||||||
|
echo "has_changes=false" >> $GITHUB_OUTPUT
|
||||||
|
echo "matrix=[]" >> $GITHUB_OUTPUT
|
||||||
|
exit 0
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
# Automatic detection via git diff
|
|
||||||
CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD -- images/ 2>/dev/null || true)
|
|
||||||
|
|
||||||
# Extract potential image directories (first level subdirs in images/)
|
|
||||||
# cut -d'/' -f2 takes the second component: images/COMPONENT/...
|
|
||||||
CANDIDATES=$(echo "$CHANGED_FILES" | cut -d'/' -f2 | sort -u | grep -v '^$')
|
|
||||||
|
|
||||||
for CANDIDATE in $CANDIDATES; do
|
|
||||||
# Verify it's a directory with a Dockerfile
|
|
||||||
if [ -d "images/$CANDIDATE" ] && [ -f "images/$CANDIDATE/Dockerfile" ]; then
|
|
||||||
echo "$CANDIDATE" >> valid_images.txt
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 2. Handle Automatic Detection (Git Diff)
|
||||||
|
> valid_images.txt
|
||||||
|
|
||||||
|
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 '^$')
|
||||||
|
|
||||||
|
for CANDIDATE in $CANDIDATES; do
|
||||||
|
# Verify it's a directory with a Dockerfile
|
||||||
|
if [ -d "images/$CANDIDATE" ] && [ -f "images/$CANDIDATE/Dockerfile" ]; then
|
||||||
|
echo "$CANDIDATE" >> valid_images.txt
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
if [ ! -s valid_images.txt ]; then
|
if [ ! -s valid_images.txt ]; then
|
||||||
echo "No valid images detected."
|
echo "No valid images detected."
|
||||||
echo "has_changes=false" >> $GITHUB_OUTPUT
|
echo "has_changes=false" >> $GITHUB_OUTPUT
|
||||||
@@ -114,6 +124,8 @@ jobs:
|
|||||||
IMAGE_NAME: ${{ env.REGISTRY }}/damien/${{ matrix.image }}
|
IMAGE_NAME: ${{ env.REGISTRY }}/damien/${{ matrix.image }}
|
||||||
IMAGE_PATH: images/${{ matrix.image }}
|
IMAGE_PATH: images/${{ matrix.image }}
|
||||||
run: |
|
run: |
|
||||||
|
echo "Debug: Matrix Image is '${{ matrix.image }}'"
|
||||||
|
|
||||||
if [ -z "${{ matrix.image }}" ]; then
|
if [ -z "${{ matrix.image }}" ]; then
|
||||||
echo "Skipping empty image name"
|
echo "Skipping empty image name"
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
Reference in New Issue
Block a user