# 🔧 Configuration CI/CD - Registry Scaleway

## ✅ Bonne Nouvelle !

La CI/CD est **déjà configurée** dans `.github/workflows/ci.yml` pour :
- ✅ Build les images Docker (backend + frontend)
- ✅ **Support multi-architecture (AMD64 + ARM64)** 🎉
- ✅ Push vers le registry Scaleway
- ✅ Créer les tags corrects (`preprod`)

## ⚙️ Configuration Requise

Pour que la CI/CD puisse push vers le registry Scaleway, il faut configurer le secret GitHub.

### Étape 1 : Obtenir le Token Scaleway

1. Aller sur [console.scaleway.com](https://console.scaleway.com)
2. **Container Registry** → `weworkstudio`
3. Cliquer sur **Push/Pull credentials**
4. Créer ou copier un token d'accès

### Étape 2 : Ajouter le Secret dans GitHub

1. Aller sur votre repo GitHub : https://github.com/VOTRE_USERNAME/xpeditis
2. **Settings** → **Secrets and variables** → **Actions**
3. Cliquer sur **New repository secret**
4. Créer le secret :
   - **Name** : `REGISTRY_TOKEN`
   - **Value** : Coller le token Scaleway
5. Cliquer **Add secret**

### Étape 3 : Vérifier les Autres Secrets (Optionnels)

Pour le frontend, vérifier ces secrets (si vous utilisez des URLs différentes) :

| Secret Name | Description | Exemple |
|-------------|-------------|---------|
| `NEXT_PUBLIC_API_URL` | URL de l'API backend | `https://api.preprod.xpeditis.com` |
| `NEXT_PUBLIC_APP_URL` | URL du frontend | `https://app.preprod.xpeditis.com` |
| `DISCORD_WEBHOOK_URL` | Webhook Discord pour notifications | `https://discord.com/api/webhooks/...` |

**Note** : Si ces secrets ne sont pas définis, la CI/CD utilisera les valeurs par défaut (`http://localhost:4000` et `http://localhost:3000`).

---

## 🚀 Déclencher la CI/CD

Une fois le secret `REGISTRY_TOKEN` configuré :

### Option 1 : Push sur preprod (Recommandé)

```bash
# Committer les derniers changements
git add .
git commit -m "feat: add automatic migrations and Docker fixes"

# Push sur la branche preprod
git push origin preprod
```

La CI/CD se déclenchera automatiquement et :
1. ✅ Build l'image backend (AMD64 + ARM64)
2. ✅ Build l'image frontend (AMD64 + ARM64)
3. ✅ Push vers le registry Scaleway
4. ✅ Envoie une notification Discord (si configuré)

**Note** : Le build multi-architecture prend ~10-15 min (au lieu de ~5-7 min pour AMD64 seul). Voir [ARM64_SUPPORT.md](ARM64_SUPPORT.md) pour plus de détails.

### Option 2 : Re-run un Workflow Existant

1. Aller sur GitHub → **Actions**
2. Sélectionner le dernier workflow
3. Cliquer sur **Re-run all jobs**

---

## 📊 Vérifier que ça fonctionne

### 1. Vérifier les Logs GitHub Actions

1. GitHub → **Actions**
2. Cliquer sur le workflow en cours
3. Vérifier les étapes :
   - ✅ `Build and push Backend Docker image`
   - ✅ `Build and push Frontend Docker image`

**Logs attendus** :
```
Building image...
Pushing to rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod
✓ Image pushed successfully
```

### 2. Vérifier sur Scaleway Console

1. [console.scaleway.com](https://console.scaleway.com)
2. **Container Registry** → `weworkstudio`
3. Vérifier que vous voyez :
   - ✅ `xpeditis-backend:preprod`
   - ✅ `xpeditis-frontend:preprod`

### 3. Vérifier avec Docker CLI

```bash
# Login au registry
docker login rg.fr-par.scw.cloud/weworkstudio

# Vérifier que les images existent (multi-architecture)
docker manifest inspect rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod
docker manifest inspect rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend:preprod

# Si vous voyez du JSON avec "manifests": [{ "platform": { "architecture": "amd64" }}, { "platform": { "architecture": "arm64" }}]
# Les images multi-architecture existent ✅
```

---

## 🔍 Tags Créés par la CI/CD

La CI/CD crée automatiquement ces tags :

| Image | Tag | Quand |
|-------|-----|-------|
| `xpeditis-backend` | `preprod` | À chaque push sur `preprod` |
| `xpeditis-frontend` | `preprod` | À chaque push sur `preprod` |
| `xpeditis-backend` | `latest` | Si `preprod` est la branche par défaut |
| `xpeditis-frontend` | `latest` | Si `preprod` est la branche par défaut |

**Configuration actuelle dans `.github/workflows/ci.yml`** :

```yaml
tags: |
  type=ref,event=branch        # Tag avec le nom de la branche
  type=raw,value=latest,enable={{is_default_branch}}  # Tag 'latest' si branche par défaut
```

Pour la branche `preprod`, cela crée :
- `rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod`
- `rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend:preprod`

---

## ⚠️ Problèmes Courants

### Erreur : "denied: requested access to the resource is denied"

**Cause** : Le secret `REGISTRY_TOKEN` n'est pas configuré ou invalide

**Solution** :
1. Vérifier que le secret existe : GitHub → Settings → Secrets → Actions
2. Régénérer un token sur Scaleway Console
3. Mettre à jour le secret dans GitHub

---

### Erreur : "manifest unknown: manifest unknown"

**Cause** : L'image n'existe pas dans le registry

**Solution** :
1. Vérifier que la CI/CD s'est exécutée sans erreur
2. Vérifier les logs de l'étape `Build and push Docker image`
3. Re-run le workflow si nécessaire

---

### Erreur : "server gave HTTP response to HTTPS client"

**Cause** : Configuration Docker incorrecte

**Solution** :
Le registry Scaleway utilise toujours HTTPS. Si vous voyez cette erreur, vérifier que l'URL du registry est correcte :
```yaml
registry: rg.fr-par.scw.cloud/weworkstudio  # ✅ Correct
registry: rg.fr-par.scw.cloud                # ❌ Incorrect
```

---

## 🎯 Après Configuration

Une fois le secret configuré et la CI/CD exécutée :

### 1. Portainer Pourra Pull les Images

Dans Portainer, lors de l'update du stack :
```yaml
xpeditis-backend:
  image: rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod
  # ✅ Cette image existe maintenant dans le registry

xpeditis-frontend:
  image: rg.fr-par.scw.cloud/weworkstudio/xpeditis-frontend:preprod
  # ✅ Cette image existe maintenant dans le registry
```

### 2. Workflow Automatique

À chaque push sur `preprod` :
1. ✅ CI/CD build les images
2. ✅ CI/CD push vers le registry
3. ✅ Portainer peut pull les nouvelles images
4. ✅ Notification Discord envoyée

**Plus besoin de build et push manuellement !**

---

## 📝 Résumé des Actions à Faire

- [ ] **Étape 1** : Obtenir le token Scaleway (Console → Container Registry → Push/Pull credentials)
- [ ] **Étape 2** : Ajouter le secret `REGISTRY_TOKEN` dans GitHub (Settings → Secrets → Actions)
- [ ] **Étape 3** : Push sur `preprod` pour déclencher la CI/CD
- [ ] **Étape 4** : Vérifier sur GitHub Actions que le workflow réussit
- [ ] **Étape 5** : Vérifier sur Scaleway Console que les images sont là
- [ ] **Étape 6** : Update le stack Portainer avec re-pull image

---

## 🔗 Liens Utiles

- [Scaleway Console](https://console.scaleway.com/registry/namespaces)
- [GitHub Actions (votre repo)](https://github.com/VOTRE_USERNAME/xpeditis/actions)
- [Docker Login Action](https://github.com/docker/login-action)
- [Docker Build Push Action](https://github.com/docker/build-push-action)
- [ARM64 Support Documentation](ARM64_SUPPORT.md) - Multi-architecture builds

---

## ✅ Confirmation que tout fonctionne

Une fois tout configuré, vous devriez voir dans GitHub Actions :

```
✓ Checkout code
✓ Setup Node.js
✓ Install dependencies
✓ Lint code
✓ Run unit tests
✓ Build application
✓ Set up Docker Buildx
✓ Login to Scaleway Registry
✓ Extract metadata for Docker
✓ Build and push Backend Docker image
   → Pushing to rg.fr-par.scw.cloud/weworkstudio/xpeditis-backend:preprod
   → Image pushed successfully
✓ Deployment Summary
✓ Discord Notification (Success)
```

Et dans Portainer, l'update du stack réussira sans erreur de pull ! 🎉

---

**Date** : 2025-11-19
**Version** : 1.0
**Statut** : Configuration requise pour activer la CI/CD
