CI/CD : Automatiser la qualité avec ESLint 9 et GitHub Actions
Publié le 12/01/2026
Dans un projet moderne, la rapidité ne doit jamais se faire au détriment de la qualité. Pour la refonte de mon portfolio sous Astro, j’ai décidé de mettre en place une véritable “Quality Gate” (barrière de qualité) qui empêche tout code instable d’atteindre la production.
Pourquoi ESLint 9 ?
Le passage à ESLint 9 et sa nouvelle “Flat Config” (eslint.config.mjs) permet une gestion beaucoup plus granulaire des règles de codage. Voici les piliers de ma configuration actuelle :
- Zéro variable inutile : La règle
no-unused-varsest strictement appliquée pour garder un bundle léger. - Sécurité Astro : Utilisation de
astro/no-set-html-directivepour éviter les injections XSS accidentelles. - Complexité maîtrisée : Une règle de complexité cyclomatique (
complexity) limite la longueur des fonctions pour garantir la maintenabilité.
Le Pipeline de Déploiement
Pour automatiser cette vérification, j’utilise GitHub Actions. À chaque git push, le pipeline exécute les étapes suivantes :
%%{init: {'theme': 'dark', 'themeVariables': { 'edgeLabelBackground':'#1e293b', 'tertiaryColor': '#1e293b'}}}%%
graph LR
%% Définition des styles
classDef default fill:#1e293b,stroke:#334155,color:#cbd5e1,stroke-width:1px;
classDef highlight fill:#0f172a,stroke:#22c55e,color:#22c55e,stroke-width:2px;
classDef error fill:#0f172a,stroke:#ef4444,color:#ef4444,stroke-width:2px;
A[Push Code] --> B[Install Deps]
B --> C{Linting Check}
C -- Success --> E[Build Astro]:::highlight
C -- Error --> D[Stop & Notify]:::error
E --> F[Deploy to Cloudflare]:::highlight
Ce que cela m’apporte au quotidien
Grâce à ce workflow, je délègue la relecture de code de base à la machine.
Si j’oublie un console.log ou si j’utilise un comparateur faible (== au lieu de ===), le pipeline me l’indique immédiatement.
Note DevOps : Un pipeline qui échoue en local est une minute gagnée en production.
C’est la première brique d’une infrastructure robuste. La prochaine étape ? L’intégration de tests unitaires pour mes composants interactifs.