fix: add fallback for empty image_tag in deployment

- Add validation and fallback logic for IMAGE_TAG
- If build job output is empty, generate tag from commit SHA
- Use 'latest' tag as last resort fallback
- Add debug output to show what tag is being used
- Fixes 'invalid reference format' error when IMAGE_TAG is empty
This commit is contained in:
2025-10-31 22:16:50 +01:00
parent 2373060d3f
commit 6c7f27dae4

View File

@@ -644,15 +644,47 @@ jobs:
DEPLOYMENT_HOST="${{ env.DEPLOYMENT_HOST }}" DEPLOYMENT_HOST="${{ env.DEPLOYMENT_HOST }}"
REGISTRY="${{ env.REGISTRY }}" REGISTRY="${{ env.REGISTRY }}"
IMAGE_NAME="${{ env.IMAGE_NAME }}" IMAGE_NAME="${{ env.IMAGE_NAME }}"
# Get image tag from build job output with fallback
IMAGE_TAG="${{ needs.build.outputs.image_tag }}" IMAGE_TAG="${{ needs.build.outputs.image_tag }}"
# Debug: Show what we got from the build job
echo "🔍 Debug: Build job output image_tag: '${IMAGE_TAG}'"
# If IMAGE_TAG is empty or invalid, use fallback
if [ -z "$IMAGE_TAG" ] || [ "$IMAGE_TAG" = "..." ] || [ "$IMAGE_TAG" = "null" ]; then
echo "⚠️ Image tag from build job is empty or invalid, trying fallback..."
COMMIT_SHA="${{ github.sha }}"
if [ -z "$COMMIT_SHA" ]; then
# Try to get from git repo if checked out
COMMIT_SHA=$(cd /workspace/repo && git rev-parse HEAD 2>/dev/null || echo "")
fi
if [ -z "$COMMIT_SHA" ]; then
# Last resort: use latest tag (always exists after build)
echo " Using 'latest' tag as fallback"
IMAGE_TAG="latest"
else
SHORT_SHA=$(echo "$COMMIT_SHA" | cut -c1-7)
IMAGE_TAG="git-${SHORT_SHA}"
echo " Generated tag from commit SHA: ${IMAGE_TAG}"
fi
fi
FULL_IMAGE="${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}" FULL_IMAGE="${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"
STACK_PATH="~/deployment/stacks/application" STACK_PATH="~/deployment/stacks/application"
echo "🚀 Starting deployment..." echo "🚀 Starting deployment..."
echo " Image: ${FULL_IMAGE}" echo " Image: ${FULL_IMAGE}"
echo " Tag: ${IMAGE_TAG}"
echo " Host: ${DEPLOYMENT_HOST}" echo " Host: ${DEPLOYMENT_HOST}"
echo " Stack: ${STACK_PATH}" echo " Stack: ${STACK_PATH}"
# Validate that IMAGE_TAG is not empty
if [ -z "$IMAGE_TAG" ] || [ "$IMAGE_TAG" = "..." ]; then
echo "❌ Error: IMAGE_TAG is empty or invalid: '${IMAGE_TAG}'"
exit 1
fi
# SSH with proper key and execute deployment commands # SSH with proper key and execute deployment commands
ssh -i ~/.ssh/production \ ssh -i ~/.ssh/production \
-o StrictHostKeyChecking=no \ -o StrictHostKeyChecking=no \