name: Deploy to Tower

on:
  push:
    branches: [main]
  workflow_dispatch:

permissions:
  contents: read

concurrency:
  group: deploy-production
  cancel-in-progress: true

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    env:
      PUBLIC_SITE_URL: https://www.lelectronrare.fr/

    steps:
      - name: Checkout
        uses: actions/checkout@v4

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

      - name: Install dependencies
        run: npm ci

      - name: Build site
        run: npm run build

      - name: Deploy to Tower
        uses: appleboy/scp-action@v0.1.7
        with:
          host: ${{ secrets.TOWER_HOST }}
          username: ${{ secrets.TOWER_USER }}
          key: ${{ secrets.TOWER_SSH_KEY }}
          source: "dist/"
          target: "/home/clems/electron-rare-site/"
          overwrite: true
          rm: true

      - name: Restart site container
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.TOWER_HOST }}
          username: ${{ secrets.TOWER_USER }}
          key: ${{ secrets.TOWER_SSH_KEY }}
          script: |
            cd /home/clems/electron-rare-site
            docker rm -f electron-rare-site 2>/dev/null || true
            docker run -d \
              --name electron-rare-site \
              --network mascarade-frontend \
              -v /home/clems/electron-rare-site/dist:/app/dist \
              -v /home/clems/electron-rare-site/node_modules:/app/node_modules \
              -w /app \
              -p 4321:4321 \
              -e HOST=0.0.0.0 \
              -e PORT=4321 \
              --restart unless-stopped \
              node:22-alpine \
              node dist/server/entry.mjs

      - name: Verify deployment
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.TOWER_HOST }}
          username: ${{ secrets.TOWER_USER }}
          key: ${{ secrets.TOWER_SSH_KEY }}
          script: |
            sleep 5
            STATUS=$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:4321/)
            if [ "$STATUS" != "200" ]; then
              echo "Site returned $STATUS instead of 200"
              exit 1
            fi
            echo "Site is live (HTTP 200)"
