name: Deploy All Sites on: push: branches: - main workflow_dispatch: jobs: build-and-deploy: runs-on: ubuntu-latest env: SSHPASS: ${{ secrets.HOSTINGER_PASS }} SSH_PORT: ${{ secrets.HOSTINGER_PORT || '65002' }} SSH_USER: ${{ secrets.HOSTINGER_USER }} SSH_HOST: ${{ secrets.HOSTINGER_HOST }} SSH_OPTS: "-o StrictHostKeyChecking=no -o ConnectTimeout=30 -o ServerAliveInterval=10" steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 20 - name: Enable corepack run: corepack enable - name: Setup pnpm run: corepack prepare pnpm@11.9.0 --activate - name: Install dependencies run: pnpm install --frozen-lockfile --ignore-scripts - name: Fix binary permissions run: | find node_modules/.pnpm -type f -path "*/bin/*" -exec chmod +x {} \; 2>/dev/null || true find node_modules/.pnpm -type f -name "*.node" -exec chmod +x {} \; 2>/dev/null || true - name: Deep clean run: | rm -rf dist apps/web/dist apps/web/node_modules/.vite echo "Clean complete" - name: Build run: pnpm run build - name: Inject unique build ID into index.html run: | BUILD_ID="${{ github.sha }}" SHORT_SHA="${BUILD_ID:0:7}" sed -i "s| |\n |" dist/index.html echo "=== Build ID: ${SHORT_SHA} ===" head -8 dist/index.html - name: Verify local build run: | echo "=== Total files ===" find dist -type f | wc -l echo "=== JS bundles ===" ls dist/assets/*.js echo "=== index.html OK ===" head -5 dist/index.html - name: Clear server LiteSpeed cache run: | sshpass -p "$SSHPASS" ssh -p "$SSH_PORT" $SSH_OPTS "$SSH_USER@$SSH_HOST" " echo 'Clearing LiteSpeed cache...' # Kill LiteSpeed page cache rm -rf ~/lscache 2>/dev/null || true rm -rf ~/.lscache 2>/dev/null || true find ~ -name 'lscache' -type d -exec rm -rf {} + 2>/dev/null || true # Kill any cached .tmp / .cache files find ~/public_html -name '*.tmp' -delete 2>/dev/null || true find ~/public_html -name '*.cache' -delete 2>/dev/null || true echo 'Done' " - name: Deploy to main site run: | sshpass -p "$SSHPASS" rsync -avz --delete \ -e "ssh -p $SSH_PORT $SSH_OPTS" \ dist/ "$SSH_USER@$SSH_HOST:~/public_html/" - name: Deploy OS subdomain run: | sshpass -p "$SSHPASS" rsync -avz --delete \ -e "ssh -p $SSH_PORT $SSH_OPTS" \ dist/ "$SSH_USER@$SSH_HOST:~/domains/marilogistic.com/public_html/os/" - name: Deploy TS subdomain run: | sshpass -p "$SSHPASS" rsync -avz --delete \ -e "ssh -p $SSH_PORT $SSH_OPTS" \ dist/ "$SSH_USER@$SSH_HOST:~/domains/marilogistic.com/public_html/ts/" - name: Deploy .htaccess files (CRITICAL - must not fail) run: | for dir in \ ~/public_html \ ~/domains/marilogistic.com/public_html/os \ ~/domains/marilogistic.com/public_html/ts; do echo "Deploying .htaccess to $dir" sshpass -p "$SSHPASS" ssh -p "$SSH_PORT" $SSH_OPTS "$SSH_USER@$SSH_HOST" \ "mkdir -p $dir" sshpass -p "$SSHPASS" rsync -avz \ -e "ssh -p $SSH_PORT $SSH_OPTS" \ public/.htaccess "$SSH_USER@$SSH_HOST:$dir/.htaccess" echo "✓ $dir/.htaccess" done - name: Verify server files run: | echo "=== Verifying server deployment ===" sshpass -p "$SSHPASS" ssh -p "$SSH_PORT" $SSH_OPTS "$SSH_USER@$SSH_HOST" " echo '--- Main index.html build ID ---' grep 'x-build' ~/public_html/index.html || echo 'WARNING: no build ID found' echo '--- Main .htaccess line count ---' wc -l ~/public_html/.htaccess echo '--- Main .htaccess contains CacheLookup ---' grep -c 'CacheLookup' ~/public_html/.htaccess || echo 'WARNING: no CacheLookup directive' echo '--- OS build ID ---' grep 'x-build' ~/domains/marilogistic.com/public_html/os/index.html || echo 'WARNING: no build ID' echo '--- TS build ID ---' grep 'x-build' ~/domains/marilogistic.com/public_html/ts/index.html || echo 'WARNING: no build ID' echo '--- JS file count ---' find ~/public_html -name '*.js' | wc -l " - name: Final verification - curl live site run: | echo "=== Checking live site ===" echo "--- Cache headers ---" curl -sI https://marilogistic.com/ | grep -iE 'cache|x-build|litespeed' || true echo "--- Build ID in response ---" curl -s https://marilogistic.com/ | grep 'x-build' || echo "WARNING: build ID not found in live site response"