From 6c7f27dae411f047d0bbd5df006de3add230c130 Mon Sep 17 00:00:00 2001 From: Michael Schiemer Date: Fri, 31 Oct 2025 22:16:50 +0100 Subject: [PATCH] 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 --- .gitea/workflows/production-deploy.yml | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/.gitea/workflows/production-deploy.yml b/.gitea/workflows/production-deploy.yml index 971ffaa5..59604226 100644 --- a/.gitea/workflows/production-deploy.yml +++ b/.gitea/workflows/production-deploy.yml @@ -644,15 +644,47 @@ jobs: DEPLOYMENT_HOST="${{ env.DEPLOYMENT_HOST }}" REGISTRY="${{ env.REGISTRY }}" IMAGE_NAME="${{ env.IMAGE_NAME }}" + + # Get image tag from build job output with fallback 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}" STACK_PATH="~/deployment/stacks/application" echo "🚀 Starting deployment..." echo " Image: ${FULL_IMAGE}" + echo " Tag: ${IMAGE_TAG}" echo " Host: ${DEPLOYMENT_HOST}" 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 -i ~/.ssh/production \ -o StrictHostKeyChecking=no \