# Déploiement production — johanleroy.fr
# Push sur `main` → contrôle de types → build statique Astro → mirror FTP vers Plesk.
# Secrets requis dans Gitea (Settings → Actions → Secrets) :
#   FTP_HOST, FTP_USER, FTP_PASSWORD, FTP_TARGET_DIR (chemin docroot, ex. /httpdocs/johanleroy/public)
name: Deploy production

on:
  push:
    branches:
      - main

jobs:
  build-deploy:
    runs-on: ubuntu-latest
    container: node:22-bullseye
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Install dependencies
        run: npm install --no-audit --no-fund

      - name: Type check
        run: npm run check

      - name: Build static site
        run: npm run build

      - name: Verify build output
        run: ls -la dist

      - name: Deploy via FTPS (Plesk)
        run: |
          apt-get update && apt-get install -y lftp
          # FTPS forcé (jamais de transport en clair) + validation du certificat par la CA.
          # ssl:check-hostname no : le cert Plesk est valide (signé CA) mais son CN ne correspond
          # pas à FTP_HOST (alias/IP) → on garde la validation de chaîne, on tolère le nom d'hôte.
          # Bien plus sûr que `verify-certificate no` (qui accepterait n'importe quel cert).
          # Alternative sans compromis : SFTP par clé SSH (sftp://) — à câbler si souhaité.
          lftp -e "
            set ftp:ssl-force true;
            set ftp:ssl-protect-data true;
            set ssl:verify-certificate yes;
            set ssl:check-hostname no;
            open ${{ secrets.FTP_HOST }};
            user ${{ secrets.FTP_USER }} ${{ secrets.FTP_PASSWORD }};
            mirror --reverse --delete --verbose dist/ ${{ secrets.FTP_TARGET_DIR }};
            bye
          "
