Exercice 01 : Configurer Dependabot pour la mise à jour automatique des dépendances
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Créer un fichier
.github/dependabot.ymlcomplet pour npm et Docker - ✅ Distinguer
security-updatesetversion-updates - ✅ Configurer des reviewers automatiques et des labels pour les PRs Dependabot
- ✅ Activer les alertes Dependabot dans les paramètres GitHub
- ✅ Configurer l'auto-merge pour les patchs de sécurité
Durée estimée : 25 minutes
Difficulté : ⭐⭐☆☆☆ (Intermédiaire)
Prérequis : Compte GitHub, repository npm ou Docker existant
📖 Contexte
Dependabot est intégré nativement dans GitHub. Il analyse quotidiennement vos dépendances contre la base GitHub Advisory Database et crée automatiquement des Pull Requests quand une mise à jour de sécurité est disponible.
Il existe deux modes distincts :
- Security updates : PRs uniquement pour les CVE (gratuit, activé par défaut)
- Version updates : PRs pour toutes les nouvelles versions (nécessite configuration)
📋 Énoncé
Configurez Dependabot sur un repository GitHub pour npm et pour les images Docker.
🧭 Déroulement de l'exercice
Tâche 1 : Activer Dependabot dans les paramètres GitHub
- Allez dans Settings de votre repository
- Dans le menu latéral, cliquez sur Security → Code security and analysis
- Activez :
- Dependabot alerts : alertes quand une dépendance a une CVE
- Dependabot security updates : PRs automatiques pour les patches de sécurité
- Dependency graph : visualisation des dépendances
Indice : "Dependabot alerts" est la détection passive (vous recevez une notification). "Security updates" est l'action active (Dependabot crée une PR avec le fix).
Vérification : Allez dans l'onglet Security → Dependabot - vous devriez voir "Dependabot alerts enabled".
Tâche 2 : Créer le fichier dependabot.yml
Créez .github/dependabot.yml dans votre repository :
# .github/dependabot.yml
version: 2
updates:
# Dépendances npm
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "09:00"
timezone: "Europe/Paris"
open-pull-requests-limit: 10
# Grouper les mises à jour mineures (moins de bruit)
groups:
dev-dependencies:
dependency-type: "development"
update-types:
- "minor"
- "patch"
production-dependencies:
dependency-type: "production"
update-types:
- "patch"
# Reviewers automatiques
reviewers:
- "votre-username"
# Labels automatiques sur les PRs
labels:
- "dependencies"
- "security"
# Ignorer les mises à jour majeures de certains packages instables
ignore:
- dependency-name: "webpack"
update-types: ["version-update:semver-major"]
# Images Docker dans les Dockerfiles
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "weekly"
labels:
- "docker"
- "security"
# Actions GitHub
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
labels:
- "github-actions"Indice :
groupspermet de regrouper plusieurs mises à jour dans une seule PR. Sans groupement, Dependabot crée une PR par dépendance - avec 50 dépendances, ça génère beaucoup de bruit. Grouper lespatchetminoren une PR hebdomadaire est une bonne pratique.
Tâche 3 : Configurer l'auto-merge pour les patches de sécurité
Créez un workflow GitHub Actions pour auto-merger les PRs Dependabot de type patch :
mkdir -p .github/workflows
cat > .github/workflows/dependabot-auto-merge.yml << 'EOF'
name: Dependabot Auto-merge
on:
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: write
pull-requests: write
jobs:
auto-merge:
runs-on: ubuntu-latest
if: github.actor == 'dependabot[bot]'
steps:
- name: Récupérer les métadonnées Dependabot
id: metadata
uses: dependabot/fetch-metadata@v2
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Auto-merger les patches de sécurité
if: |
steps.metadata.outputs.update-type == 'version-update:semver-patch' ||
steps.metadata.outputs.dependency-type == 'direct:development'
run: gh pr merge --auto --squash "$PR_URL"
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
EOFIndice : Ce workflow ne s'exécute que si l'auteur est
dependabot[bot]. Il auto-merge uniquement les PRs de typepatch(corrections de bugs, pas de nouvelles fonctionnalités) et les dépendances de développement. Les mises à jourminoretmajorrestent soumises à review humaine.
Tâche 4 : Tester la configuration
Pushez la configuration sur GitHub :
git add .github/
git commit -m "ci: configurer Dependabot avec auto-merge pour les patches"
git pushAllez vérifier :
- Onglet Security → Dependabot : Dependabot analyse déjà vos dépendances
- Onglet Insights → Dependency graph : visualisation de toutes les dépendances
- Settings → Security : confirmez que les 3 options sont activées
Indice : Dependabot ne crée pas immédiatement des PRs. Il analyse d'abord le graphe de dépendances. Avec un nouveau
.dependabot.yml, les premières PRs apparaissent généralement dans l'heure.
Tâche 5 : Simuler une alerte Dependabot
Si votre projet a des dépendances avec des CVE connues, les alertes apparaissent directement dans Security → Dependabot alerts.
Pour forcer une détection, ajoutez temporairement une dépendance vulnérable connue :
npm install --save-dev qs@6.5.0 # CVE-2022-24999 connue
git add package.json package-lock.json
git commit -m "test: ajout dépendance vulnérable pour test Dependabot"
git pushVérification : Dans l'onglet Security, une alerte Dependabot devrait apparaître pour qs avec le lien vers la CVE et la version corrigée.
✅ Vérification du résultat
- Dependabot alerts activé dans Settings → Security
.github/dependabot.ymlcommité avec npm + docker + github-actions- Workflow
dependabot-auto-merge.ymlcréé git pushréussi sans erreurs- L'onglet Dependency graph (Insights) affiche les dépendances
💡 À retenir
Dependabot est la première ligne de défense contre les dépendances vulnérables. La configuration optimale :
- Alertes activées (passif - zéro configuration)
- Security updates activées (PRs automatiques pour CVE)
- Version updates configurées dans
dependabot.yml(PRs pour toutes nouvelles versions) - Auto-merge pour les patches (réduit la charge de revue)
✨ Solution Complète
# .github/dependabot.yml (minimal)
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
groups:
all-patches:
update-types: ["patch"]