name: Deploy Static Site

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm

      - name: Install dependencies
        run: npm ci

      - name: Build static site
        run: npm run build

      - name: Setup SSH key
        run: |
          mkdir -p ~/.ssh
          echo "${{ secrets.DEPLOY_SSH_KEY }}" > ~/.ssh/id_ed25519
          chmod 600 ~/.ssh/id_ed25519

      - name: Deploy static files to server
        env:
          DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
          REMOTE_DIR: /home/deploy/projects/ge-bos/static
        run: |
          SSH="ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=accept-new"
          # Recreate the target dir so removed files don't linger (rsync --delete equivalent)
          $SSH deploy@"$DEPLOY_HOST" "rm -rf '$REMOTE_DIR' && mkdir -p '$REMOTE_DIR'"
          # Stream the build output over ssh and extract it on the server
          tar -czf - -C out . | $SSH deploy@"$DEPLOY_HOST" "tar -xzf - -C '$REMOTE_DIR'"

      - name: Run deployment script
        run: |
          ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=accept-new \
            deploy@${{ secrets.DEPLOY_HOST }} \
            "cd /home/deploy/projects/ge-bos && ./deploy.sh"
