From 5ec5c41a0aaf2b54c16f30e7723b623c5e6d7236 Mon Sep 17 00:00:00 2001 From: Michael Schiemer Date: Sat, 1 Nov 2025 22:16:23 +0100 Subject: [PATCH] fix(ci): improve image selection and registry handling in deployment workflow - Add better image selection logic with fallback handling - Support multiple registry logins for different image sources - Improve error handling and image URL parsing - Add proper argument escaping for SSH deployment script --- .gitea/workflows/build-image.yml | 110 +++++++++++++++++++++++-------- 1 file changed, 83 insertions(+), 27 deletions(-) diff --git a/.gitea/workflows/build-image.yml b/.gitea/workflows/build-image.yml index 714a2e14..faf4603a 100644 --- a/.gitea/workflows/build-image.yml +++ b/.gitea/workflows/build-image.yml @@ -830,57 +830,113 @@ jobs: set -e DEPLOYMENT_HOST="${{ env.DEPLOYMENT_HOST }}" - REGISTRY="${{ env.REGISTRY }}" + REGISTRY_HOST="${{ env.REGISTRY }}" IMAGE_NAME="${{ env.IMAGE_NAME }}" BUILD_RESULT="${{ needs.build.result }}" - IMAGE_TAG="${{ needs.build.outputs.image_tag || 'latest' }}" + IMAGE_TAG_RAW="${{ needs.build.outputs.image_tag }}" + IMAGE_URL_RAW="${{ needs.build.outputs.image_url }}" - if [ "$BUILD_RESULT" != "success" ]; then - IMAGE_TAG="latest" + DEFAULT_IMAGE="${REGISTRY_HOST}/${IMAGE_NAME}:latest" + SELECTED_IMAGE="" + + if [ "$BUILD_RESULT" = "success" ] && [ -n "$IMAGE_URL_RAW" ] && [ "$IMAGE_URL_RAW" != "null" ]; then + SELECTED_IMAGE="$IMAGE_URL_RAW" fi - if [ -z "$IMAGE_TAG" ] || [ "$IMAGE_TAG" = "null" ]; then - IMAGE_TAG="latest" + if [ -z "$SELECTED_IMAGE" ]; then + if [ "$BUILD_RESULT" = "success" ] && [ -n "$IMAGE_TAG_RAW" ] && [ "$IMAGE_TAG_RAW" != "null" ]; then + SELECTED_IMAGE="${REGISTRY_HOST}/${IMAGE_NAME}:${IMAGE_TAG_RAW}" + else + SELECTED_IMAGE="$DEFAULT_IMAGE" + fi + fi + + if [ -z "$SELECTED_IMAGE" ]; then + SELECTED_IMAGE="$DEFAULT_IMAGE" + fi + + SELECTED_TAG="${SELECTED_IMAGE##*:}" + SELECTED_REPO="${SELECTED_IMAGE%:*}" + + if [ -z "$SELECTED_REPO" ] || [ "$SELECTED_REPO" = "$SELECTED_IMAGE" ]; then + FALLBACK_IMAGE="$DEFAULT_IMAGE" + else + FALLBACK_IMAGE="${SELECTED_REPO}:latest" fi - FULL_IMAGE="${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}" STACK_PATH="~/deployment/stacks/staging" echo "🚀 Starting staging deployment..." - echo " Image: ${FULL_IMAGE}" - echo " Tag: ${IMAGE_TAG}" + echo " Image: ${SELECTED_IMAGE}" + echo " Tag: ${SELECTED_TAG}" echo " Host: ${DEPLOYMENT_HOST}" echo " Stack: ${STACK_PATH}" + FULL_IMAGE_ARG=$(printf '%q' "$SELECTED_IMAGE") + FALLBACK_IMAGE_ARG=$(printf '%q' "$FALLBACK_IMAGE") + IMAGE_NAME_ARG=$(printf '%q' "$IMAGE_NAME") + STACK_PATH_ARG=$(printf '%q' "$STACK_PATH") + REGISTRY_ARG=$(printf '%q' "$REGISTRY_HOST") + ssh -i ~/.ssh/production \ -o StrictHostKeyChecking=no \ -o UserKnownHostsFile=/dev/null \ - deploy@${DEPLOYMENT_HOST} <