diff --git a/scripts/git-incremental-deploy.ps1 b/scripts/git-incremental-deploy.ps1 index a395944..38dfdc4 100644 --- a/scripts/git-incremental-deploy.ps1 +++ b/scripts/git-incremental-deploy.ps1 @@ -407,6 +407,16 @@ fi if [ "$SKIP_DEPLOY" != "1" ]; then start_remote_step "Deploy on Production Server" + log "Ensuring production server can access image $REGISTRY_COMMIT" + if ssh -o StrictHostKeyChecking=no "$PROD_SERVER_USER@$PROD_SERVER_IP" "docker pull '$REGISTRY_COMMIT'" >/tmp/git-deploy-prod-pull.log 2>&1; then + ok "Production server pulled image from registry" + else + warn "Production server could not pull image directly; streaming image from build server" + cat /tmp/git-deploy-prod-pull.log >&2 || true + docker save "$REGISTRY_COMMIT" | ssh -o StrictHostKeyChecking=no "$PROD_SERVER_USER@$PROD_SERVER_IP" "docker load" + ok "Image loaded on production server via SSH stream" + fi + PROD_PAYLOAD="$(cat <<'PROD_SCRIPT' set -Eeuo pipefail @@ -459,8 +469,12 @@ require_file "$ENV_FILE_PATH" [ -d "$UPLOADS_MOUNT" ] || fail "Uploads mount does not exist: $UPLOADS_MOUNT" docker network inspect "$NETWORK_NAME" >/dev/null 2>&1 || fail "Docker network missing: $NETWORK_NAME" -log "Pulling image $REGISTRY_COMMIT" -docker pull "$REGISTRY_COMMIT" +log "Checking image $REGISTRY_COMMIT" +if docker image inspect "$REGISTRY_COMMIT" >/dev/null 2>&1; then + ok "Image already available on production server" +else + docker pull "$REGISTRY_COMMIT" +fi OLD_IMAGE="$(docker inspect -f '{{.Config.Image}}' "$CONTAINER_NAME" 2>/dev/null || true)" if [ -n "$OLD_IMAGE" ]; then