# 🔧 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