From f33f9419309e3b35d230e9b2a7e2968d930bf3dd Mon Sep 17 00:00:00 2001 From: Teris35740 Date: Thu, 30 Apr 2026 21:53:01 +0200 Subject: [PATCH 1/3] add .md for pr --- PR | 168 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 PR diff --git a/PR b/PR new file mode 100644 index 0000000..ce9f6aa --- /dev/null +++ b/PR @@ -0,0 +1,168 @@ +# DevOps and bots : PR + +Authors : **Louis FLÉCHAIRE - Paul JOUAN - Tanguy MAIRE AMIGOT - Ones CHERIF** + +## Contexte + +Dans le cadre du module DevOps, nous avons dus configuré et intégré différents Software Bots afin d'automatiser les tâches répétitives, d'améliorer notre flux de travail et d'en apprendre davantage sur leur fonctionnement. L'objectif principal de ces ajouts est d'assurer une intégration continue fiable, de maintenir la sécurité de nos dépendances à jour et d'automatiser la communication. + +## Ce qui a été fait + +### Le Bot de mise à jour (Dependabot) +Ce bot scan notre projet pour trouver des dépendances obsolètes et crée des PR automatiques pour les mettre à jour. +* **Comment ça marche :** Nous avons ajouté un fichier `.github/dependabot.yml` qui indique à GitHub l'écosystème à surveiller (ex: `npm` pour le front) et la fréquence. +```yaml +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/front" + schedule: + interval: "weekly" +``` + +### Le Bot de Vérification (Intégration Continue) +Un workflow GitHub Actions a été mis en place pour compiler le code et lancer les tests à chaque push. Cela empêche le déploiement de code défectueux. + +- Comment ça marche : Un fichier .github/workflows/ci.yml définit les étapes à exécuter sur une machine virtuelle (runner) à chaque modification de la branche principale. + +```yaml +name: CI Build +on: + push: + branches: [ main ] +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: '16' + - name: Build Front + run: cd front && npm install && npm run build +``` + +### Le Bot de Sécurité Docker (Trivy) + +Nous avons ajouté un bot de sécurité pour analyser les images Docker de notre projet (notamment le backend Java) à la recherche de vulnérabilités et de failles connues (CVE). + +- **Comment ça marche :** Ce bot utilise `aquasecurity/trivy-action`. Il se lance à chaque `push` ou `pull_request`, construit l'image Docker de l'API, puis la scanne. S'il trouve une faille de niveau `CRITICAL` ou `HIGH`, il fait volontairement échouer le processus (grâce à l'option `exit-code: '1'`) et bloque l'intégration. + +```yaml +name: Docker Security Bot +on: [push, pull_request] +jobs: + scan: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Build API Image + run: docker build -t mon-api-java ./backend-api + + - name: Run Trivy Scanner + uses: aquasecurity/trivy-action@master + with: + image-ref: 'mon-api-java' + format: 'table' + exit-code: '1' + severity: 'CRITICAL,HIGH' +``` + +### Le Bot de Formatage (Prettier Polyglot) + +Pour garantir un style de code propre et uniforme sur l'ensemble du projet, nous avons mis en place un bot de formatage. + +- **Comment ça marche :** Déclenché uniquement sur les Pull Requests, ce bot installe Prettier ainsi que son plugin Java. Il vérifie l'intégralité du code source (Front et Back : `.ts`, `.js`, `.java`, `.css`, etc.). S'il détecte des problèmes de formatage, il les corrige et pousse directement un nouveau commit sur la PR avec le message `"style: formatage auto (Angular & Java Maven)"`. + +```yaml +name: Prettier Polyglot Bot +on: + pull_request: + branches: [main] +jobs: + format: + runs-on: ubuntu-latest + permissions: + contents: write + + steps: + - name: Checkout Code + uses: actions/checkout@v4 + with: + ref: ${{ github.head_ref }} + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install Prettier & Java Plugin + run: npm install prettier prettier-plugin-java + + - name: Run Prettier Bot + uses: crey08/prettier_action@v4.3 + with: + prettier_options: --write **/*.{ts,js,html,css,java,json,md,yml} + commit_message: "style: formatage auto (Angular & Java Maven)" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} +``` + +### Le Bot de Notification (Discord) +Pour garder l'équipe informée, un bot notifie un salon Discord du statut de l'intégration continue (succès ou échec). + +- Comment ça marche : Nous utilisons un script dans notre workflow de CI qui envoie une requête HTTP (via curl) à un Webhook Discord, dont l'URL est cachée dans les secrets GitHub. + +```yaml +- name: Discord notification + env: + DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} + run: | + curl -H "Content-Type: application/json" \ + -d '{"content": "Nouveau code poussé et compilé avec succès !"}' \ + $DISCORD_WEBHOOK +``` + +### Le Bot de gestion des Releases (Release Drafter) +Afin d'automatiser nos notes de version, ce bot analyse les Pull Requests fusionnées et génère automatiquement un changelog basé sur les labels (ex: bug, feature). + +Comment ça marche : L'action se déclenche au merge et met à jour un brouillon de "Release" en lisant la configuration .github/release-drafter.yml. + +```yaml +name: Release Drafter +on: + push: + branches: + - main +jobs: + update_release_draft: + runs-on: ubuntu-latest + steps: + - uses: release-drafter/release-drafter@v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} +``` + +## Où voir les résultats des bots + +Voici comment observer les bots : + +1. **Les vérifications CI & Sécurité :** Allez dans l'onglet **"Actions"** sur GitHub pour voir les bots compiler le projet et scanner les images Docker avec Trivy lors d'un nouveau push. + +2. **Le formatage auto :** Ouvrez une Pull Request avec du code mal indenté. Le bot Prettier s'activera et ajoutera automatiquement un commit de correction à votre PR. + +3. **Les mises à jour :** Allez dans l'onglet **"Pull requests"**. Dependabot y proposera ses améliorations de dépendances de façon automatisée. + +4. **Les alertes :** Regardez le salon dédié sur **Discord** après avoir poussé du code sur GitHub pour recevoir les retours du bot de notification. + +5. **Les notes de version :** Allez dans l'onglet **"Releases"** (à droite de l'accueil du dépôt) pour voir le brouillon (draft) de la version se générer tout seul suite à vos merges. + + +## Ce que nous pouvons ajouter + +1. Ajouter un bot d'analyse de qualité de code plus profond (comme SonarCloud) pour commenter les Pull Requests avec des métriques de dette technique et des suggestions algorithmiques. + +2. Implémenter l'Auto-assignation pour attribuer automatiquement des relecteurs (reviewers) lors de l'ouverture d'une Pull Request afin de fluidifier la validation du code. From 89139ba3ff5820cd08f132c862599b2d427065a3 Mon Sep 17 00:00:00 2001 From: Teris35740 Date: Thu, 30 Apr 2026 21:57:17 +0200 Subject: [PATCH 2/3] pr md --- PR | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PR b/PR index ce9f6aa..42742be 100644 --- a/PR +++ b/PR @@ -163,6 +163,6 @@ Voici comment observer les bots : ## Ce que nous pouvons ajouter -1. Ajouter un bot d'analyse de qualité de code plus profond (comme SonarCloud) pour commenter les Pull Requests avec des métriques de dette technique et des suggestions algorithmiques. +1. Ajouter un bot d'analyse de qualité de code (comme SonarCloud). 2. Implémenter l'Auto-assignation pour attribuer automatiquement des relecteurs (reviewers) lors de l'ouverture d'une Pull Request afin de fluidifier la validation du code. From 3a5ee9267bd5bcf54ee3d764634de4cfdd2e2341 Mon Sep 17 00:00:00 2001 From: Teris35740 Date: Thu, 30 Apr 2026 22:07:14 +0200 Subject: [PATCH 3/3] add code --- .github/dependabot.yml | 13 ++++++++ .github/release-drafter.yml | 26 ++++++++++++++++ .github/workflows/ci.yml | 44 +++++++++++++++++++++++++++ .github/workflows/release-drafter.yml | 20 ++++++++++++ PR => PR.md | 0 5 files changed, 103 insertions(+) create mode 100644 .github/dependabot.yml create mode 100644 .github/release-drafter.yml create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/release-drafter.yml rename PR => PR.md (100%) diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..6e42c5b --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,13 @@ +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/front" + schedule: + interval: "weekly" + open-pull-requests-limit: 5 + + - package-ecosystem: "maven" + directory: "/api" + schedule: + interval: "weekly" + open-pull-requests-limit: 5 \ No newline at end of file diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml new file mode 100644 index 0000000..6e29ae9 --- /dev/null +++ b/.github/release-drafter.yml @@ -0,0 +1,26 @@ +name-template: 'v$RESOLVED_VERSION 🌈' +tag-template: 'v$RESOLVED_VERSION' +categories: + - title: 'Nouvelles Fonctionnalités' + labels: + - 'feature' + - 'enhancement' + - title: 'Corrections de Bugs' + labels: + - 'fix' + - 'bug' + - title: 'Dépendances & Sécurité (Dependabot)' + labels: + - 'dependencies' + - 'security' + - title: 'Autres modifications' + labels: + - '*' + +change-template: '- $TITLE par @$AUTHOR dans la PR #$NUMBER' + +template: | + ## Quoi de neuf dans cette version ? + $CHANGES + + **Lien direct des modifications :** https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...$RESOLVED_VERSION \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..ec00cc3 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,44 @@ +name: Bot CI/CD Doodle + +on: + push: + branches: [ "main", "master" ] + pull_request: + branches: [ "main", "master" ] + +jobs: + build-and-notify: + runs-on: ubuntu-latest + + steps: + - name: Récupération du code + uses: actions/checkout@v3 + + - name: Setup Node.js (Frontend) + uses: actions/setup-node@v3 + with: + node-version: '14' + + - name: Build Frontend + working-directory: ./front + run: | + npm install + npm run build --if-present + + - name: ☕ Setup Java (Backend) + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '11' + + - name: Build Backend + working-directory: ./api + run: ./mvnw clean package -DskipTests + + - name: Bot Notification Discord + if: always() + uses: Ilshidur/action-discord@master + env: + DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} + with: + args: 'Build du projet Doodle par ${{ github.actor }} terminé ! Résultat : **${{ job.status }}**' \ No newline at end of file diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml new file mode 100644 index 0000000..a7531ee --- /dev/null +++ b/.github/workflows/release-drafter.yml @@ -0,0 +1,20 @@ +name: Release Drafter + +on: + push: + branches: + - main + - master + +permissions: + contents: read + pull-requests: write + +jobs: + update_release_draft: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/PR b/PR.md similarity index 100% rename from PR rename to PR.md