# Configuration des Secrets GitHub pour CI/CD

Ce guide explique comment configurer les secrets GitHub nécessaires pour le pipeline CI/CD de Xpeditis.

## Secrets Requis

Vous devez configurer les secrets suivants dans votre repository GitHub.

### Accès Repository GitHub

1. Allez sur votre repository GitHub : `https://github.com/VOTRE_USERNAME/xpeditis`
2. Cliquez sur **Settings** (Paramètres)
3. Dans le menu latéral, cliquez sur **Secrets and variables** → **Actions**
4. Cliquez sur **New repository secret**

## Liste des Secrets à Configurer

### 1. REGISTRY_TOKEN (Obligatoire)

**Description** : Token d'authentification pour le registre Docker Scaleway

**Comment l'obtenir** :
1. Connectez-vous à la console Scaleway : https://console.scaleway.com
2. Allez dans **Container Registry** (Registre de conteneurs)
3. Sélectionnez ou créez votre namespace `xpeditis`
4. Cliquez sur **API Keys** ou **Generate token**
5. Créez un nouveau token avec les permissions :
   - ✅ Read (Lecture)
   - ✅ Write (Écriture)
   - ✅ Delete (Suppression)
6. Copiez le token généré

**Configuration GitHub** :
- **Name** : `REGISTRY_TOKEN`
- **Value** : `scw_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`

---

### 2. PORTAINER_WEBHOOK_BACKEND (Obligatoire)

**Description** : URL du webhook Portainer pour redéployer le service backend

**Comment l'obtenir** :
1. Connectez-vous à Portainer : `https://portainer.votre-domaine.com`
2. Allez dans **Stacks** → Sélectionnez la stack `xpeditis`
3. Cliquez sur le service **xpeditis-backend**
4. Cliquez sur **Webhooks** (ou **Service webhooks**)
5. Cliquez sur **Add webhook**
6. Copiez l'URL générée (format : `https://portainer.example.com/api/webhooks/xxxxx`)

**Alternative - Créer via API** :

```bash
# Obtenir l'ID de la stack
curl -X GET "https://portainer.example.com/api/stacks" \
  -H "X-API-Key: YOUR_PORTAINER_API_KEY"

# Créer le webhook pour le backend
curl -X POST "https://portainer.example.com/api/webhooks" \
  -H "X-API-Key: YOUR_PORTAINER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "ResourceID": "xpeditis_xpeditis-backend",
    "EndpointID": 1,
    "WebhookType": 1
  }'
```

**Configuration GitHub** :
- **Name** : `PORTAINER_WEBHOOK_BACKEND`
- **Value** : `https://portainer.xpeditis.com/api/webhooks/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`

---

### 3. PORTAINER_WEBHOOK_FRONTEND (Obligatoire)

**Description** : URL du webhook Portainer pour redéployer le service frontend

**Comment l'obtenir** : Même procédure que pour `PORTAINER_WEBHOOK_BACKEND` mais pour le service **xpeditis-frontend**

**Configuration GitHub** :
- **Name** : `PORTAINER_WEBHOOK_FRONTEND`
- **Value** : `https://portainer.xpeditis.com/api/webhooks/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy`

---

### 4. DISCORD_WEBHOOK_URL (Optionnel)

**Description** : URL du webhook Discord pour recevoir les notifications de déploiement

**Comment l'obtenir** :
1. Ouvrez Discord et allez sur votre serveur
2. Cliquez sur **Paramètres du serveur** → **Intégrations**
3. Cliquez sur **Webhooks** → **Nouveau Webhook**
4. Donnez un nom au webhook : `Xpeditis CI/CD`
5. Sélectionnez le canal où envoyer les notifications (ex: `#deployments`)
6. Cliquez sur **Copier l'URL du Webhook**

**Configuration GitHub** :
- **Name** : `DISCORD_WEBHOOK_URL`
- **Value** : `https://discord.com/api/webhooks/123456789012345678/abcdefghijklmnopqrstuvwxyz1234567890`

---

## Vérification des Secrets

Une fois tous les secrets configurés, vous devriez avoir :

```
✅ REGISTRY_TOKEN                 (Scaleway Container Registry)
✅ PORTAINER_WEBHOOK_BACKEND      (Webhook Portainer Backend)
✅ PORTAINER_WEBHOOK_FRONTEND     (Webhook Portainer Frontend)
⚠️  DISCORD_WEBHOOK_URL           (Optionnel - Notifications Discord)
```

Pour vérifier, allez dans **Settings** → **Secrets and variables** → **Actions** de votre repository.

## Test du Pipeline CI/CD

### 1. Créer la branche preprod

```bash
# Sur votre machine locale
cd /chemin/vers/xpeditis2.0

# Créer et pousser la branche preprod
git checkout -b preprod
git push origin preprod
```

### 2. Effectuer un commit de test

```bash
# Faire un petit changement
echo "# Test CI/CD" >> README.md

# Commit et push
git add .
git commit -m "test: trigger CI/CD pipeline"
git push origin preprod
```

### 3. Vérifier l'exécution du pipeline

1. Allez sur GitHub : `https://github.com/VOTRE_USERNAME/xpeditis/actions`
2. Vous devriez voir le workflow **"CI/CD Pipeline - Xpeditis PreProd"** en cours d'exécution
3. Cliquez dessus pour voir les détails de chaque job

### 4. Ordre d'exécution des jobs

```
1. backend-build-test    │  Compile et teste le backend
2. frontend-build-test   │  Compile et teste le frontend
         ↓               │
3. backend-docker        │  Build image Docker backend
4. frontend-docker       │  Build image Docker frontend
         ↓               │
5. deploy-preprod        │  Déploie sur le serveur preprod
         ↓               │
6. smoke-tests           │  Tests de santé post-déploiement
```

## Dépannage

### Erreur : "Invalid login credentials"

**Problème** : Le token Scaleway est invalide ou expiré

**Solution** :
1. Vérifiez que le secret `REGISTRY_TOKEN` est correctement configuré
2. Régénérez un nouveau token dans Scaleway
3. Mettez à jour le secret dans GitHub

---

### Erreur : "Failed to trigger webhook"

**Problème** : L'URL du webhook Portainer est invalide ou le service n'est pas accessible

**Solution** :
1. Vérifiez que Portainer est accessible depuis GitHub Actions
2. Testez le webhook manuellement :
```bash
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"test": "true"}' \
  https://portainer.xpeditis.com/api/webhooks/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
```
3. Vérifiez que le webhook existe dans Portainer
4. Recréez le webhook si nécessaire

---

### Erreur : "Health check failed"

**Problème** : Le service déployé ne répond pas après le déploiement

**Solution** :
1. Vérifiez les logs du service dans Portainer
2. Vérifiez que les variables d'environnement sont correctes
3. Vérifiez que les certificats SSL sont valides
4. Vérifiez que les DNS pointent vers le bon serveur

---

### Erreur : "Docker build failed"

**Problème** : Échec de la construction de l'image Docker

**Solution** :
1. Vérifiez les logs du job dans GitHub Actions
2. Testez le build localement :
```bash
docker build -t test -f apps/backend/Dockerfile .
docker build -t test -f apps/frontend/Dockerfile .
```
3. Vérifiez que les Dockerfiles sont corrects
4. Vérifiez que toutes les dépendances sont disponibles

---

## Notifications Discord (Optionnel)

Si vous avez configuré le webhook Discord, vous recevrez des notifications avec :

- ✅ **Statut du déploiement** (Success / Failed)
- 📝 **Message du commit**
- 👤 **Auteur du commit**
- 🔗 **Liens vers Backend et Frontend**
- ⏰ **Horodatage du déploiement**

Exemple de notification :

```
✅ Deployment PreProd - SUCCESS

Branch: preprod
Commit: abc1234
Author: David
Message: feat: add CSV booking workflow

Backend: https://api-preprod.xpeditis.com
Frontend: https://app-preprod.xpeditis.com

Timestamp: 2025-01-15T10:30:00Z
```

---

## Configuration Avancée

### Ajouter des Secrets au Niveau de l'Organisation

Si vous avez plusieurs repositories, vous pouvez définir les secrets au niveau de l'organisation GitHub :

1. Allez dans **Organization settings**
2. Cliquez sur **Secrets and variables** → **Actions**
3. Cliquez sur **New organization secret**
4. Sélectionnez les repositories qui peuvent accéder au secret

### Utiliser des Environnements GitHub

Pour séparer preprod et production avec des secrets différents :

1. Dans **Settings** → **Environments**
2. Créez un environnement `preprod`
3. Ajoutez les secrets spécifiques à preprod
4. Ajoutez des règles de protection (ex: approbation manuelle)

Puis dans le workflow :

```yaml
jobs:
  deploy-preprod:
    environment: preprod  # Utilise les secrets de l'environnement preprod
    runs-on: ubuntu-latest
    steps:
      - name: Deploy
        run: echo "Deploying to preprod..."
```

---

## Support

Pour toute question ou problème, consultez :
- [Documentation GitHub Actions](https://docs.github.com/en/actions)
- [Documentation Portainer Webhooks](https://docs.portainer.io/api/webhooks)
- [Documentation Scaleway Container Registry](https://www.scaleway.com/en/docs/containers/container-registry/)
