From c13919c217fc51bf20da982b99bfb1cc5a13f482 Mon Sep 17 00:00:00 2001 From: Terence Ong Date: Wed, 8 Apr 2026 10:34:17 +0700 Subject: [PATCH] fix: switch plugin deploy from git-pull to rsync The git-pull deploy failed silently because Hostinger doesn't have SSH keys to access the private GitHub repo. Switched to rsync from the GH Actions runner (same proven approach as the theme repo), which avoids needing git access on the server entirely. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/deploy.yml | 72 +++++++++++++++++------------------- 1 file changed, 34 insertions(+), 38 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 1f60643..f5d6439 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -67,56 +67,52 @@ jobs: # Normal push (fast-forward). git push origin deploy - # -- Deploy to Hostinger via SSH -- - # SSH into Hostinger and git pull the deploy branch directly into - # the correct plugin directory (peptide-news-plugin). + # -- Deploy to Hostinger via rsync -- + # Rsync the deploy branch content from the GH Actions runner directly + # to the plugin directory on Hostinger (avoids needing git access on server). deploy: name: Deploy to Hostinger runs-on: ubuntu-latest needs: sync-deploy-branch environment: production steps: - - name: Pull deploy branch on Hostinger - uses: appleboy/ssh-action@v1 + - name: Checkout deploy branch + uses: actions/checkout@v4 with: - host: ${{ secrets.SSH_HOST }} - username: ${{ secrets.SSH_USERNAME }} - key: ${{ secrets.SSH_PRIVATE_KEY }} - port: ${{ secrets.SSH_PORT }} - script: | - # Ensure GitHub host key is trusted (one-time setup). - mkdir -p ~/.ssh - ssh-keyscan github.com >> ~/.ssh/known_hosts 2>/dev/null + ref: deploy - PLUGIN_DIR="$HOME/domains/peptiderepo.com/public_html/wp-content/plugins/peptide-news-plugin" - REPO_URL="git@github.com:peptiderepo/peptide-news-plugin.git" + - name: Setup SSH key + run: | + mkdir -p ~/.ssh + echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/deploy_key + chmod 600 ~/.ssh/deploy_key + ssh-keyscan -p ${{ secrets.SSH_PORT }} ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts 2>/dev/null - if [ -d "$PLUGIN_DIR/.git" ]; then - # Existing clone -- just pull latest. - cd "$PLUGIN_DIR" - git fetch origin deploy - git reset --hard origin/deploy - else - # First deploy -- clone the deploy branch. - rm -rf "$PLUGIN_DIR" - git clone -b deploy "$REPO_URL" "$PLUGIN_DIR" - fi - - echo "Deployed to $PLUGIN_DIR" - ls -la "$PLUGIN_DIR" + - name: Deploy via rsync + run: | + rsync -avz --delete \ + --exclude='.git' \ + --exclude='.github' \ + -e "ssh -i ~/.ssh/deploy_key -p ${{ secrets.SSH_PORT }} -o StrictHostKeyChecking=no" \ + ./ ${{ secrets.SSH_USERNAME }}@${{ secrets.SSH_HOST }}:/home/${{ secrets.SSH_USERNAME }}/domains/peptiderepo.com/public_html/wp-content/plugins/peptide-news-plugin/ - name: Purge LiteSpeed Cache if: success() run: | - # Trigger a cache purge via the WordPress REST API. - if [ -n "${{ secrets.WP_APP_PASSWORD }}" ]; then - curl -s -X POST \ - -u "${{ secrets.WP_ADMIN_USER }}:${{ secrets.WP_APP_PASSWORD }}" \ - "${{ secrets.WP_SITE_URL }}/wp-json/peptide-news/v1/cache-purge" \ - --max-time 15 || echo "Cache purge skipped (endpoint not available)" - else - echo "No WP_APP_PASSWORD set -- skipping remote cache purge." - fi + ssh -i ~/.ssh/deploy_key -p ${{ secrets.SSH_PORT }} -o StrictHostKeyChecking=no \ + ${{ secrets.SSH_USERNAME }}@${{ secrets.SSH_HOST }} << 'ENDSSH' + CACHE_DIR="/home/${{ secrets.SSH_USERNAME }}/domains/peptiderepo.com/public_html/wp-content/litespeed" + if [ -d "$CACHE_DIR" ]; then + rm -rf "$CACHE_DIR"/* + echo "LiteSpeed cache purged." + fi + touch "/home/${{ secrets.SSH_USERNAME }}/domains/peptiderepo.com/public_html/.lscache_purge" 2>/dev/null || true + echo "Cache purge signal sent." + ENDSSH + + - name: Cleanup + if: always() + run: rm -f ~/.ssh/deploy_key - name: Deploy summary run: | @@ -124,5 +120,5 @@ jobs: echo "" >> $GITHUB_STEP_SUMMARY echo "- **Branch:** \`${{ github.ref_name }}\`" >> $GITHUB_STEP_SUMMARY echo "- **Commit:** \`${GITHUB_SHA::7}\`" >> $GITHUB_STEP_SUMMARY - echo "- **Method:** SSH direct deploy (git pull on Hostinger)" >> $GITHUB_STEP_SUMMARY + echo "- **Method:** rsync from deploy branch to Hostinger" >> $GITHUB_STEP_SUMMARY echo "- **Deployed to:** ${{ secrets.WP_SITE_URL || 'peptiderepo.com' }}" >> $GITHUB_STEP_SUMMARY