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:
darnodo
2025-12-07 20:58:54 +01:00
parent 528a24beb0
commit 3458b1c8a0

View File

@@ -37,25 +37,36 @@ 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"
fi echo "has_changes=false" >> $GITHUB_OUTPUT
echo "matrix=[]" >> $GITHUB_OUTPUT
exit 0
fi fi
else else
# Automatic detection via git diff echo "Input image name was empty."
echo "has_changes=false" >> $GITHUB_OUTPUT
echo "matrix=[]" >> $GITHUB_OUTPUT
exit 0
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) CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD -- images/ 2>/dev/null || true)
# Extract potential image directories (first level subdirs in images/) # 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 '^$') CANDIDATES=$(echo "$CHANGED_FILES" | cut -d'/' -f2 | sort -u | grep -v '^$')
for CANDIDATE in $CANDIDATES; do for CANDIDATE in $CANDIDATES; do
@@ -64,7 +75,6 @@ jobs:
echo "$CANDIDATE" >> valid_images.txt echo "$CANDIDATE" >> valid_images.txt
fi fi
done done
fi
if [ ! -s valid_images.txt ]; then if [ ! -s valid_images.txt ]; then
echo "No valid images detected." echo "No valid images detected."
@@ -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