From 588f215078d69aba2b323c8e48998408ca401672 Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Mon, 16 Mar 2026 21:25:00 +0100 Subject: [PATCH] chore(release): improve upload script with retries, directory check, and fallback to scp --- .gitea/workflows/release.yaml | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml index 64ca651..f1b2a36 100644 --- a/.gitea/workflows/release.yaml +++ b/.gitea/workflows/release.yaml @@ -155,5 +155,26 @@ jobs: USER: ${{ secrets.HETZNER_USER }} PASS: ${{ secrets.HETZNER_PASS }} run: | - # Use rsync to efficiently upload only the changed files (the new APK and updated index files) - sshpass -p "$PASS" rsync -avz -e "ssh -o StrictHostKeyChecking=no" fdroid/repo/ $USER@$HOST:dev/fdroid/repo/ + set -euo pipefail + REMOTE_REPO_DIR="dev/fdroid/repo" + SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=20 -o ServerAliveInterval=30 -o ServerAliveCountMax=5" + + # Ensure target directory exists before upload. + sshpass -p "$PASS" ssh $SSH_OPTS "$USER@$HOST" "mkdir -p '$REMOTE_REPO_DIR'" + + if sshpass -p "$PASS" ssh $SSH_OPTS "$USER@$HOST" "command -v rsync >/dev/null 2>&1"; then + ATTEMPT=1 + until [ "$ATTEMPT" -gt 3 ]; do + echo "Rsync upload attempt $ATTEMPT/3" + if sshpass -p "$PASS" rsync -avz --timeout=60 -e "ssh $SSH_OPTS" fdroid/repo/ "$USER@$HOST:$REMOTE_REPO_DIR/"; then + exit 0 + fi + sleep $((ATTEMPT * 5)) + ATTEMPT=$((ATTEMPT + 1)) + done + echo "Rsync failed after retries, falling back to scp" + else + echo "Remote rsync not found, using scp fallback" + fi + + sshpass -p "$PASS" scp $SSH_OPTS -r fdroid/repo/. "$USER@$HOST:$REMOTE_REPO_DIR/"