name: CD - Déploiement continu

# Déploiement continu : après un push sur master, une fois la CI passée,
# on se connecte en SSH au serveur de production et on met à jour l'application
# (git pull, rebuild des conteneurs, migrations, mise en cache).
#
# Secrets à définir dans Gitea (Settings > Actions > Secrets du dépôt) :
#   - SSH_HOST        : IP ou domaine du serveur
#   - SSH_USER        : utilisateur SSH
#   - SSH_PRIVATE_KEY : clé privée SSH autorisée sur le serveur
#   - SSH_PORT        : port SSH (optionnel, 22 par défaut)

on:
  push:
    branches: [ master ]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Déploiement sur le serveur via SSH
        uses: appleboy/ssh-action@v1.2.0
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          port: ${{ secrets.SSH_PORT }}
          script: |
            set -e
            cd /home/sam/mon-app-laravel

            # Récupération de la dernière version du code
            git pull origin master

            # Reconstruction et redémarrage des conteneurs
            docker compose up -d --build

            # Migrations de la base de données (sans interaction)
            docker exec laravel_php php artisan migrate --force

            # Mise en cache de la configuration et des routes (performances en prod)
            docker exec laravel_php php artisan config:cache
            docker exec laravel_php php artisan route:cache
            docker exec laravel_php php artisan view:cache

            # Correction des permissions sur les dossiers écrits par Laravel
            docker exec -u 0 laravel_php chown -R www-data:www-data \
              /var/www/storage /var/www/bootstrap/cache
