|
| 1 | +# Guide d'Automatisation DevSecOps & QA Autonome 🛡️🤖 |
| 2 | +## Comprendre et Reproduire le Système de Sécurité et de Correction Automatique |
| 3 | + |
| 4 | +> Ce guide détaille l'infrastructure d'intégration continue (CI) et de sécurité mise en place sur **BisoMapTech** (TechMapCongo). Il sert de référence pour comprendre le rôle de chaque composant et fournit une procédure pas à pas pour reproduire exactement ce système autonome sur n'importe quel autre projet. |
| 5 | +
|
| 6 | +--- |
| 7 | + |
| 8 | +## 📋 Table des Matières |
| 9 | +1. [🧠 Comprendre l'Architecture Actuelle](#1-comprendre-larchitecture-actuelle) |
| 10 | +2. [🔍 Analyse Détaillée des Workflows](#2-analyse-détaillée-des-workflows) |
| 11 | +3. [🚀 Guide de Reproduction sur un Nouveau Projet](#3-guide-de-reproduction-sur-un-nouveau-projet) |
| 12 | +4. [⚙️ Configuration des Autorisations GitHub obligatoires](#4-configuration-des-autorisations-github-obligatoires) |
| 13 | + |
| 14 | +--- |
| 15 | + |
| 16 | +## 🧠 1. Comprendre l'Architecture Actuelle |
| 17 | + |
| 18 | +Le système repose sur **GitHub Actions**, une plateforme d'intégration et de livraison continues (CI/CD) intégrée à GitHub. Quatre pipelines autonomes surveillent en permanence le projet : |
| 19 | + |
| 20 | +```mermaid |
| 21 | +graph TD |
| 22 | + PR[Création d'une Pull Request] -->|Déclenche| Rosentic[Rosentic Scan: Détection & Correctifs] |
| 23 | + PR -->|Déclenche| SecScan[Security Scan: npm audit + Dependecy Review] |
| 24 | + PR -->|Créé par Dependabot| AutoMerge[Auto-Merge Dependabot] |
| 25 | + |
| 26 | + Cron[Toutes les 6 heures] -->|Déclenche| LogScan[Error Detection & Auto-Issue] |
| 27 | +``` |
| 28 | + |
| 29 | +--- |
| 30 | + |
| 31 | +## 🔍 2. Analyse Détaillée des Workflows |
| 32 | + |
| 33 | +### 🛡️ A. Rosentic Scan (`rosentic.yml`) |
| 34 | +* **But** : Scanner le code statique à la recherche de bugs logiques et de failles de sécurité directement dans les PRs, avec possibilité d'aide à la correction automatique. |
| 35 | +* **Fonctionnement** : |
| 36 | + - Il s'exécute dès qu'une Pull Request cible la branche `main`. |
| 37 | + - Il configure des autorisations en écriture pour pouvoir commenter ou modifier la PR si des corrections de bugs automatiques sont prêtes. |
| 38 | + |
| 39 | +```yaml |
| 40 | +name: Rosentic Scan |
| 41 | +on: |
| 42 | + pull_request: |
| 43 | + branches: [main] |
| 44 | + |
| 45 | +jobs: |
| 46 | + rosentic: |
| 47 | + runs-on: ubuntu-latest |
| 48 | + permissions: |
| 49 | + contents: read |
| 50 | + pull-requests: write # Permet à Rosentic d'écrire des commentaires de revue |
| 51 | + steps: |
| 52 | + - uses: actions/checkout@v4 |
| 53 | + with: |
| 54 | + fetch-depth: 0 # Récupère tout l'historique pour l'analyse des modifications |
| 55 | + - uses: Rosentic/rosentic-action@v1.1.0 |
| 56 | +``` |
| 57 | +
|
| 58 | +### 🔒 B. Security Scan (`security.yml`) |
| 59 | +* **But** : S'assurer que le projet n'importe pas de packages tiers vulnérables. |
| 60 | +* **Fonctionnement** : |
| 61 | + - S'exécute sur chaque PR et de manière hebdomadaire (tous les lundis à 3h00 UTC). |
| 62 | + - Réalise un `npm audit` (bloquant si vulnérabilité modérée ou supérieure). |
| 63 | + - Évalue les nouvelles dépendances ajoutées via l'action officielle de GitHub `dependency-review-action`. |
| 64 | + |
| 65 | +```yaml |
| 66 | +name: Security Scan |
| 67 | +on: |
| 68 | + pull_request: |
| 69 | + schedule: |
| 70 | + - cron: "0 3 * * 1" # Tous les lundis à 03:00 |
| 71 | +
|
| 72 | +jobs: |
| 73 | + security: |
| 74 | + runs-on: ubuntu-latest |
| 75 | + steps: |
| 76 | + - name: Checkout repository |
| 77 | + uses: actions/checkout@v4 |
| 78 | + - name: Setup Node.js |
| 79 | + uses: actions/setup-node@v4 |
| 80 | + with: |
| 81 | + node-version: 20 |
| 82 | + - name: Install dependencies |
| 83 | + run: npm install |
| 84 | + - name: Run npm audit |
| 85 | + run: npm audit --audit-level=moderate |
| 86 | + - name: Run dependency review |
| 87 | + uses: actions/dependency-review-action@v4 |
| 88 | +``` |
| 89 | + |
| 90 | +### 🚨 C. Error Detection & Auto Issue (`error-report.yml`) |
| 91 | +* **But** : Détecter les plantages de production de façon asynchrone et générer automatiquement des tickets de correction (Issues). |
| 92 | +* **Fonctionnement** : |
| 93 | + - S'exécute toutes les 6 heures ou manuellement via l'onglet "Actions" (`workflow_dispatch`). |
| 94 | + - Scanne/simule l'état des services. Si une anomalie est détectée, il utilise le bot `imjohnbo/issue-bot` pour ouvrir une issue GitHub documentée et étiquetée. |
| 95 | + |
| 96 | +```yaml |
| 97 | +name: Error Detection & Auto Issue |
| 98 | +on: |
| 99 | + workflow_dispatch: |
| 100 | + schedule: |
| 101 | + - cron: "0 */6 * * *" # Toutes les 6 heures |
| 102 | +
|
| 103 | +jobs: |
| 104 | + detect-errors: |
| 105 | + runs-on: ubuntu-latest |
| 106 | + steps: |
| 107 | + - name: Checkout repository |
| 108 | + uses: actions/checkout@v4 |
| 109 | + - name: Simulate production log scan |
| 110 | + run: | |
| 111 | + echo "Checking logs..." |
| 112 | + echo "ERROR_FOUND=true" >> $GITHUB_ENV |
| 113 | + - name: Create GitHub Issue if error found |
| 114 | + if: env.ERROR_FOUND == 'true' |
| 115 | + uses: imjohnbo/issue-bot@v3 |
| 116 | + with: |
| 117 | + title: "[AUTO] Production error detected" |
| 118 | + body: | |
| 119 | + An automatic scan detected a potential production issue. |
| 120 | + Please investigate the logs and affected services. |
| 121 | + Triggered automatically by GitHub Actions. |
| 122 | + labels: "bug,auto-detected,jules" |
| 123 | + env: |
| 124 | + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| 125 | +``` |
| 126 | + |
| 127 | +### 🤖 D. Auto Merge Dependabot (`auto-merge.yml`) |
| 128 | +* **But** : Fusionner automatiquement les mises à jour mineures et correctives de sécurité proposées par Dependabot une fois les tests passés. |
| 129 | +* **Fonctionnement** : |
| 130 | + - Filtre l'auteur de la PR (`dependabot[bot]`). |
| 131 | + - Active l'auto-merge via l'API GitHub pour éviter l'intervention humaine sur les montées de versions mineures. |
| 132 | + |
| 133 | +```yaml |
| 134 | +name: Auto Merge Dependabot |
| 135 | +on: |
| 136 | + pull_request: |
| 137 | +
|
| 138 | +jobs: |
| 139 | + automerge: |
| 140 | + runs-on: ubuntu-latest |
| 141 | + if: github.actor == 'dependabot[bot]' |
| 142 | + steps: |
| 143 | + - name: Enable auto-merge for Dependabot PRs |
| 144 | + uses: peter-evans/enable-pull-request-automerge@v3 |
| 145 | + with: |
| 146 | + token: ${{ secrets.GITHUB_TOKEN }} |
| 147 | + pull-request-number: ${{ github.event.pull_request.number }} |
| 148 | +``` |
| 149 | + |
| 150 | +--- |
| 151 | + |
| 152 | +## 🚀 3. Guide de Reproduction sur un Nouveau Projet |
| 153 | + |
| 154 | +Suivez ces étapes simples pour déployer ce système sur un autre dépôt : |
| 155 | + |
| 156 | +### Étape 1 : Créer l'architecture des dossiers |
| 157 | +Dans votre nouveau projet, à la racine, créez le dossier contenant les définitions de workflows : |
| 158 | +```bash |
| 159 | +mkdir -p .github/workflows |
| 160 | +``` |
| 161 | + |
| 162 | +### Étape 2 : Créer et copier les fichiers de configuration |
| 163 | +Créez les 4 fichiers correspondants dans `.github/workflows/` : |
| 164 | +1. `rosentic.yml` |
| 165 | +2. `security.yml` |
| 166 | +3. `error-report.yml` |
| 167 | +4. `auto-merge.yml` |
| 168 | + |
| 169 | +*Copiez-y le contenu YAML présenté dans la section 2 en ajustant si besoin la version de Node.js ou les labels des tickets.* |
| 170 | + |
| 171 | +### Étape 3 (Optionnel mais recommandé) : Activer Dependabot |
| 172 | +Pour que le workflow `auto-merge.yml` fonctionne, vous devez configurer Dependabot en créant un fichier `.github/dependabot.yml` à la racine : |
| 173 | +```yaml |
| 174 | +version: 2 |
| 175 | +updates: |
| 176 | + - package-ecosystem: "npm" # ou pip, cargo, etc. |
| 177 | + directory: "/" |
| 178 | + schedule: |
| 179 | + interval: "weekly" |
| 180 | +``` |
| 181 | + |
| 182 | +--- |
| 183 | + |
| 184 | +## ⚙️ 4. Configuration des Autorisations GitHub obligatoires |
| 185 | + |
| 186 | +Pour que GitHub Actions ait le droit de créer des issues, d'approuver des PRs ou d'exécuter des fusions automatiques, configurez les options suivantes sur votre dépôt GitHub : |
| 187 | + |
| 188 | +1. Accédez à votre dépôt sur **GitHub** > **Settings** (Paramètres). |
| 189 | +2. Dans le menu de gauche, cliquez sur **Actions** > **General**. |
| 190 | +3. Faites défiler jusqu'à la section **Workflow permissions** : |
| 191 | + - Cochez **"Read and write permissions"** (nécessaire pour la création d'issues et l'écriture de commentaires Rosentic). |
| 192 | + - Cochez la case **"Allow GitHub Actions to create and approve pull requests"** (nécessaire pour l'auto-merge de Dependabot). |
| 193 | +4. Cliquez sur **Save**. |
| 194 | + |
| 195 | +--- |
| 196 | + |
| 197 | +### 🌟 Avantages de cette stack sur vos futurs projets : |
| 198 | +- **Zéro maintenance manuelle** : Les vulnérabilités de packages sont signalées et corrigées automatiquement. |
| 199 | +- **Fiabilité à long terme** : Le scan automatique périodique (toutes les 6h et chaque semaine) garantit que même un projet "endormi" reste surveillé. |
| 200 | +- **Rapports centralisés** : Plus besoin de surveiller des consoles d'administration externes, les anomalies de production se transforment immédiatement en tickets exploitables sur GitHub. |
0 commit comments