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.md b/PR.md new file mode 100644 index 0000000..42742be --- /dev/null +++ b/PR.md @@ -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 (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.