push-guardian 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/.dockerignore +15 -0
  2. package/.pushguardian-plugins.json +10 -0
  3. package/Dockerfile +41 -0
  4. package/Dockerfile.dev +20 -0
  5. package/README.md +386 -0
  6. package/TECHNO.md +139 -0
  7. package/babel.config.js +1 -0
  8. package/developper_utils.md +119 -0
  9. package/docker-compose.yml +41 -0
  10. package/docs/PLUGINS.md +223 -0
  11. package/docs/technical/architecture.md +298 -0
  12. package/docs/technical/performance-guide.md +390 -0
  13. package/docs/technical/plugin-persistence.md +169 -0
  14. package/docs/technical/plugins-guide.md +409 -0
  15. package/jest.config.js +22 -0
  16. package/package.json +53 -0
  17. package/plugins/example-plugin/index.js +55 -0
  18. package/plugins/example-plugin/plugin.json +8 -0
  19. package/scripts/coverage-report.js +75 -0
  20. package/src/cli/command/config.js +33 -0
  21. package/src/cli/command/install.js +137 -0
  22. package/src/cli/command/mirror.js +90 -0
  23. package/src/cli/command/performance.js +160 -0
  24. package/src/cli/command/plugin.js +171 -0
  25. package/src/cli/command/security.js +152 -0
  26. package/src/cli/command/shell.js +238 -0
  27. package/src/cli/command/validate.js +54 -0
  28. package/src/cli/index.js +23 -0
  29. package/src/cli/install/codeQualityTools.js +156 -0
  30. package/src/cli/install/hooks.js +89 -0
  31. package/src/cli/install/mirroring.js +299 -0
  32. package/src/core/codeQualityTools/configAnalyzer.js +216 -0
  33. package/src/core/codeQualityTools/configGenerator.js +381 -0
  34. package/src/core/codeQualityTools/configManager.js +65 -0
  35. package/src/core/codeQualityTools/fileDetector.js +62 -0
  36. package/src/core/codeQualityTools/languageTools.js +104 -0
  37. package/src/core/codeQualityTools/toolInstaller.js +53 -0
  38. package/src/core/configManager.js +43 -0
  39. package/src/core/errorCMD.js +9 -0
  40. package/src/core/interactiveMenu/interactiveMenu.js +73 -0
  41. package/src/core/mirroring/branchSynchronizer.js +59 -0
  42. package/src/core/mirroring/generate.js +114 -0
  43. package/src/core/mirroring/repoManager.js +112 -0
  44. package/src/core/mirroring/syncManager.js +176 -0
  45. package/src/core/module/env-loader.js +109 -0
  46. package/src/core/performance/metricsCollector.js +217 -0
  47. package/src/core/performance/performanceAnalyzer.js +182 -0
  48. package/src/core/plugins/basePlugin.js +89 -0
  49. package/src/core/plugins/pluginManager.js +123 -0
  50. package/src/core/plugins/pluginRegistry.js +215 -0
  51. package/src/core/validator.js +53 -0
  52. package/src/hooks/constrains/constrains.js +174 -0
  53. package/src/hooks/constrains/constraintEngine.js +140 -0
  54. package/src/utils/chalk-wrapper.js +26 -0
  55. package/src/utils/exec-wrapper.js +6 -0
  56. package/tests/fixtures/mock-eslint-config-array.js +8 -0
  57. package/tests/fixtures/mock-eslint-config-single.js +6 -0
  58. package/tests/fixtures/mockLoadedPlugin.js +11 -0
  59. package/tests/setup.js +28 -0
  60. package/tests/unit/basePlugin.test.js +355 -0
  61. package/tests/unit/branchSynchronizer.test.js +308 -0
  62. package/tests/unit/cli-commands.test.js +144 -0
  63. package/tests/unit/codeQualityConfigManager.test.js +233 -0
  64. package/tests/unit/codeQualityTools.test.js +36 -0
  65. package/tests/unit/command-install.test.js +247 -0
  66. package/tests/unit/command-mirror.test.js +179 -0
  67. package/tests/unit/command-performance.test.js +169 -0
  68. package/tests/unit/command-plugin.test.js +288 -0
  69. package/tests/unit/command-security.test.js +277 -0
  70. package/tests/unit/command-shell.test.js +325 -0
  71. package/tests/unit/configAnalyzer.test.js +593 -0
  72. package/tests/unit/configGenerator.test.js +808 -0
  73. package/tests/unit/configManager.test.js +195 -0
  74. package/tests/unit/constrains.test.js +463 -0
  75. package/tests/unit/constraint.test.js +554 -0
  76. package/tests/unit/env-loader.test.js +279 -0
  77. package/tests/unit/fileDetector.test.js +171 -0
  78. package/tests/unit/install-codeQualityTools.test.js +343 -0
  79. package/tests/unit/install-hooks.test.js +280 -0
  80. package/tests/unit/install-mirroring.test.js +731 -0
  81. package/tests/unit/install-modules.test.js +81 -0
  82. package/tests/unit/interactiveMenu.test.js +426 -0
  83. package/tests/unit/languageTools.test.js +244 -0
  84. package/tests/unit/metricsCollector.test.js +354 -0
  85. package/tests/unit/mirroring-generate.test.js +96 -0
  86. package/tests/unit/modules-exist.test.js +96 -0
  87. package/tests/unit/performanceAnalyzer.test.js +473 -0
  88. package/tests/unit/pluginManager.test.js +427 -0
  89. package/tests/unit/pluginRegistry.test.js +592 -0
  90. package/tests/unit/repoManager.test.js +469 -0
  91. package/tests/unit/reviewAppManager.test.js +5 -0
  92. package/tests/unit/security-command.test.js +43 -0
  93. package/tests/unit/syncManager.test.js +494 -0
  94. package/tests/unit/toolInstaller.test.js +240 -0
  95. package/tests/unit/utils.test.js +144 -0
  96. package/tests/unit/validator.test.js +215 -0
package/.dockerignore ADDED
@@ -0,0 +1,15 @@
1
+ node_modules
2
+ npm-debug.log
3
+ coverage
4
+ .git
5
+ .gitignore
6
+ .env
7
+ *.md
8
+ tests
9
+ .github
10
+ .vscode
11
+ .idea
12
+ *.log
13
+ temp-*
14
+ dist
15
+ build
@@ -0,0 +1,10 @@
1
+ {
2
+ "plugins": {
3
+ "example-plugin": {
4
+ "path": "example-plugin",
5
+ "version": "1.0.0",
6
+ "enabled": true,
7
+ "installedAt": "2024-01-15T12:00:00.000Z"
8
+ }
9
+ }
10
+ }
package/Dockerfile ADDED
@@ -0,0 +1,41 @@
1
+ # Build stage
2
+ FROM node:22-alpine AS builder
3
+
4
+ WORKDIR /app
5
+
6
+ # Copier les fichiers de dépendances
7
+ COPY package*.json ./
8
+
9
+ # Installer les dépendances (production uniquement)
10
+ RUN npm ci --only=production
11
+
12
+ # Production stage
13
+ FROM node:22-alpine
14
+
15
+ WORKDIR /app
16
+
17
+ # Installer git (requis pour push-guardian)
18
+ RUN apk add --no-cache git
19
+
20
+ # Créer un utilisateur non-root
21
+ RUN addgroup -g 1001 -S push-guardian && \
22
+ adduser -S push-guardian -u 1001
23
+
24
+ # Copier les dépendances depuis builder
25
+ COPY --from=builder /app/node_modules ./node_modules
26
+
27
+ # Copier le code source
28
+ COPY . .
29
+
30
+ # Installer globalement AVANT de changer d'utilisateur
31
+ RUN npm link
32
+
33
+ # Créer les répertoires nécessaires et ajuster les permissions
34
+ RUN chown -R push-guardian:push-guardian /app
35
+
36
+ # Passer Ă  l'utilisateur non-root
37
+ USER push-guardian
38
+
39
+ # Point d'entrée
40
+ ENTRYPOINT ["push-guardian"]
41
+ CMD ["--help"]
package/Dockerfile.dev ADDED
@@ -0,0 +1,20 @@
1
+ FROM node:22-alpine
2
+
3
+ WORKDIR /app
4
+
5
+ # Installer git et dépendances de build
6
+ RUN apk add --no-cache git python3 make g++
7
+
8
+ # Copier les fichiers de dépendances
9
+ COPY package*.json ./
10
+
11
+ # Installer toutes les dépendances (dev incluses)
12
+ RUN npm install
13
+
14
+ # Copier le code source
15
+ COPY . .
16
+
17
+ # Exposer le port pour le debugger (optionnel)
18
+ EXPOSE 9229
19
+
20
+ CMD ["npm", "test"]
package/README.md ADDED
@@ -0,0 +1,386 @@
1
+ # **push-guardian 🛡️**
2
+
3
+ **push-guardian** est un outil complet de validation CI/CD conçu pour garantir la qualité du code et automatiser les vérifications avant les pushs Git. Il intègre des outils comme ESLint, Prettier et des contraintes personnalisées pour analyser, formater et valider votre code selon les meilleures pratiques.
4
+
5
+ ---
6
+
7
+ ## 📋 Table des matières
8
+
9
+ - [Fonctionnalités](#fonctionnalités)
10
+ - [Installation](#installation)
11
+ - [Utilisation](#utilisation)
12
+ - [Configuration](#configuration)
13
+ - [Sections de Configuration](#sections-de-configuration)
14
+ - [Contraintes Disponibles](#contraintes-disponibles)
15
+ - [Architecture](#architecture)
16
+ - [Flux de Validation](#flux-de-validation)
17
+ - [Développement](#développement)
18
+ - [Dépannage](#dépannage)
19
+ - [Contribution](#contribution)
20
+ - [Licence](#licence)
21
+ - [Auteurs](#auteurs)
22
+ ---
23
+
24
+ ## **Fonctionnalités**
25
+
26
+ ### **đź”§ Validation de Code Automatique**
27
+ - **Analyse statique** avec ESLint pour multiples langages (JavaScript, TypeScript, JSON, Markdown, CSS, YAML, HTML)
28
+ - **Formatage automatique** avec Prettier
29
+ - **Correction automatique** des erreurs fixables
30
+ - **Mode strict** pour échouer sur les warnings
31
+
32
+ ### **đź”— Hooks Git Intelligents**
33
+ - **Pre-push** : Validation du code avant le push
34
+ - **Commit-msg** : Validation du format des messages de commit
35
+ - **Post-checkout** : Validation des noms de branches
36
+
37
+ ### **🎯 Contraintes Personnalisables**
38
+ - **Messages de commit** : Format [TYPE]: description avec types personnalisables
39
+ - **Noms de branches** : Validation selon des patterns définis
40
+ - **Contraintes avancées** : longueur, caractères spéciaux, mots interdits, etc.
41
+
42
+ ### **📊 Multi-Langages Supportés**
43
+ - **JavaScript/TypeScript** avec configuration ESLint avancée
44
+ - **CSS/SCSS** avec Stylelint
45
+ - **Markdown, JSON, YAML, HTML** avec plugins dédiés
46
+ - **Détection automatique** des langages utilisés dans le projet
47
+
48
+ ---
49
+
50
+ ## **Installation**
51
+
52
+ ### **Prérequis**
53
+
54
+ - **Node.js** version 16 ou supérieure
55
+ - **npm** ou **yarn**
56
+ - **Git** (pour les hooks)
57
+
58
+ ### **Installation Globale**
59
+
60
+ ```bash
61
+ npm install -g push-guardian
62
+ ```
63
+ ### **Installation Locale dans un Projet**
64
+
65
+ ```bash
66
+ cd votre-projet
67
+ npx push-guardian install
68
+ ```
69
+
70
+ ### **Développement**
71
+ ```bash
72
+ git clone <repository>
73
+ cd push-guardian
74
+ npm install
75
+ npm link # Pour l'utiliser en développement
76
+ ```
77
+
78
+ ## **Utilisation**
79
+ ### **Commandes Principales**
80
+
81
+ ### **1. Installation Interactive**
82
+ ```bash
83
+ npx push-guardian install
84
+ ```
85
+
86
+ Lance un menu interactif pour installer :
87
+
88
+ * **Hooks Git** : Configure les hooks Git automatiquement
89
+ * **Code Quality Tools** : Installe et configure ESLint, Prettier, etc.
90
+ * **Mirroring** : Configure le système de mirroring multi-plateformes
91
+
92
+ Options:
93
+ * `--force`: Force l'installation même si les hooks existent déjà
94
+
95
+ ### **2. Validation du Code**
96
+ ```bash
97
+ npx push-guardian validate
98
+ ```
99
+ Valide le code selon la configuration établie.
100
+
101
+ Options :
102
+
103
+ * `**--fix**` : Corrige automatiquement les erreurs fixables
104
+ * `**--strict**` : Échoue si des warnings sont détectés
105
+ * `**--verbose**` : Affiche plus de détails
106
+ * `**--hooks <hook>**` : Valide spécifiquement certains hooks
107
+
108
+ ### **3. Mirroring de Référentiels**
109
+
110
+ ```bash
111
+ npx push-guardian mirror
112
+ ```
113
+ Effectue le mirroring d'un référentiel source vers une plateforme cible (GitHub, GitLab, BitBucket, Azure DevOps).
114
+
115
+ Options :
116
+ * `--source <platform>` : Plateforme source (github, gitlab, bitbucket, azure)
117
+ * `--target <platform>` : Plateforme cible (github, gitlab, bitbucket, azure)
118
+ * `--repo <name>` : Nom du référentiel source (et cible si --target-repo non spécifié)
119
+ * `--source-repo <name>` : Nom du référentiel source
120
+ * `--target-repo <name>` : Nom du référentiel cible
121
+ * `--source-owner <owner>` : Propriétaire du référentiel source (requis pour GitHub)
122
+ * `--target-owner <owner>` : Propriétaire du référentiel cible (requis pour GitHub)
123
+ * `--sync-branches` : Active la synchronisation des branches
124
+ * `--public-repo` : Visibilité du mirroir en public
125
+ * `--generate` : Génère un workflow GitHub Actions pour automatiser le mirroring
126
+
127
+ Exemples :
128
+
129
+ ```bash
130
+ npx push-guardian mirror --source github --target gitlab --repo myproject --source-owner myorg --target-owner myorg
131
+ npx push-guardian mirror --sync-branches --public-repo
132
+ npx push-guardian mirror --generate
133
+ ```
134
+
135
+ #### **Workflow GitHub Actions**
136
+ push-guardian inclut un workflow GitHub Actions pour automatiser le mirroring. Le workflow se déclenche automatiquement sur les événements suivants :
137
+ - **Push** sur les branches `main` ou `master`
138
+ - **Manuellement** via workflow_dispatch
139
+ - **Planifié** tous les jours à 2h UTC
140
+
141
+ Pour configurer le mirroring automatique :
142
+
143
+ 1. **Copiez le workflow** `.github/workflows/mirror.yml` dans votre repository
144
+ 2. **Configurez les variables d'environnement** dans Settings > Secrets and variables > Actions :
145
+ - Variables (Variables) :
146
+ - `SOURCE_PLATFORM` : Plateforme source (github, gitlab, bitbucket, azure)
147
+ - `TARGET_PLATFORM` : Plateforme cible (github, gitlab, bitbucket, azure)
148
+ - `REPO_NAME` : Nom du repository
149
+ - `SOURCE_OWNER` : Propriétaire/organisation source
150
+ - `TARGET_OWNER` : Propriétaire/organisation cible
151
+ - `SYNC_BRANCHES` : true/false pour synchroniser les branches
152
+ - `PUBLIC_REPO` : true/false pour rendre le mirror public
153
+ - Secrets :
154
+ - `GITHUB_TOKEN` : Token GitHub (généré automatiquement)
155
+ - `GITLAB_TOKEN` : Token d'accès GitLab
156
+ - `BITBUCKET_USERNAME` : Nom d'utilisateur BitBucket
157
+ - `BITBUCKET_PASSWORD` : Mot de passe ou token d'app BitBucket
158
+ - `AZURE_DEVOPS_URL` : URL de l'organisation Azure DevOps
159
+ - `AZURE_DEVOPS_TOKEN` : Token d'accès Azure DevOps
160
+
161
+ Le workflow clonera automatiquement push-guardian, installera les dépendances et exécutera la commande mirror avec vos paramètres configurés.
162
+
163
+ ### **4. Gestion de Configuration**
164
+ ```bash
165
+ npx push-guardian config [clé] [valeur]
166
+ ```
167
+ Gère la configuration de push-guardian.
168
+
169
+ Options :
170
+
171
+ * `--list` : Affiche toute la configuration actuelle
172
+ * `[clé] [valeur]` : Modifie une valeur spécifique
173
+
174
+ Exemples :
175
+ ```bash
176
+ npx push-guardian config --list
177
+ npx push-guardian config validate.directories '["src/", "lib/"]'
178
+ ```
179
+
180
+ ## **Configuration**
181
+ ### **Fichier de Configuration Principal**
182
+ push-guardian utilise un fichier `push-guardian.config.json` Ă  la racine de votre projet :
183
+ ```json
184
+ {
185
+ "validate": {
186
+ "directories": ["./"],
187
+ "onMissing": "ignore",
188
+ "activateCQT": true
189
+ },
190
+ "hooks": {
191
+ "commit-msg": {
192
+ "type": ["ADD", "UPDATE", "DELETE", "FIX", "MERGE", "CHORE"],
193
+ "constraints": {
194
+ "maxLength": 80,
195
+ "mustStartWith": "[",
196
+ "mustEndWith": "]"
197
+ }
198
+ },
199
+ "post-checkout": {
200
+ "type": ["main", "develop", "feat", "fix", "chore"],
201
+ "constraints": {
202
+ "noUppercase": true,
203
+ "noSpecialChars": true
204
+ }
205
+ },
206
+ "pre-push": {}
207
+ }
208
+ }
209
+ ```
210
+ ## **Sections de Configuration**
211
+ ## **🔍 Validation (validate)**
212
+ * `directories` : Tableau des répertoires à analyser
213
+ * `onMissing` : Comportement si répertoire manquant (ignore ou error)
214
+ * `activateCQT` : Active/désactive les outils de qualité de code
215
+
216
+ ## đź”— Hooks Git (`hooks`)
217
+ ### **Commit Message (`commit-msg`)**
218
+
219
+ * `type` : Types de commits autorisés
220
+ * `constraints` : Contraintes supplémentaires
221
+
222
+ ### **Post Checkout (`post-checkout`)**
223
+ * `type` : Types de branches autorisés
224
+ * `constraints` : Contraintes sur les noms de branches
225
+ ### **Pre Push (`pre-push`)**
226
+ * Validation automatique du code avant push
227
+ ## **Contraintes Disponibles**
228
+
229
+ Voici les contraintes prédéfinies que vous pouvez utiliser dans la configuration des hooks :
230
+
231
+ | Contrainte | Description | Exemple |
232
+ |------------------|--------------------------|----------------------------------|
233
+ | maxLength | Longueur maximale | `"maxLength": 80` |
234
+ | minLength | Longueur minimale | `"minLength": 10` |
235
+ | mustStartWith | Doit commencer par | `"mustStartWith": "["` |
236
+ | mustEndWith | Doit terminer par | `"mustEndWith": "]"` |
237
+ | autoStartWith | Mis automatiquement si manquant | `"autoStartWith": "["` |
238
+ | noUppercase | Pas de majuscules | `"noUppercase": true` |
239
+ | noDigits | Pas de chiffres | `"noDigits": true` |
240
+ | noSpecialChars | Pas de caractères spéciaux | `"noSpecialChars": true` |
241
+ | disallowedWords | Mots interdits | `"disallowedWords": ["test", "tmp"]` |
242
+ | mustMatchPattern| Doit matcher un regex | `"mustMatchPattern": "^\\[.*\\]:"` |
243
+
244
+ ## **Architecture**
245
+ ### **Structure des Fichiers**
246
+ ```text
247
+ push-guardian/
248
+ ├── src/
249
+ │ ├── cli/ # Interface en ligne de commande
250
+ │ │ ├── command/ # Commandes principales
251
+ │ │ │ ├── [config.js](http://_vscodecontentref_/0) # Gestion configuration
252
+ │ │ │ ├── [install.js](http://_vscodecontentref_/1) # Installation système
253
+ │ │ │ ├── [mirror.js](http://_vscodecontentref_/2) # Commande de mirroring
254
+ │ │ │ └── [validate.js](http://_vscodecontentref_/3) # Validation manuelle
255
+ │ │ ├── [index.js](http://_vscodecontentref_/4) # Point d'entrée CLI
256
+ │ │ └── install/ # Sous-commandes installation
257
+ │ │ ├── [codeQualityTools.js](http://_vscodecontentref_/5) # Installation outils qualité
258
+ │ │ ├── [hooks.js](http://_vscodecontentref_/6) # Installation hooks Git
259
+ │ │ └── [mirroring.js](http://_vscodecontentref_/7) # Installation mirroring
260
+ │ │
261
+ │ ├── core/ # Cœur métier de l'application
262
+ │ │ ├── codeQualityTools/ # Gestion outils qualité code
263
+ │ │ │ ├── [configAnalyzer.js](http://_vscodecontentref_/8) # Analyse configurations existantes
264
+ │ │ │ ├── [configGenerator.js](http://_vscodecontentref_/9) # Génération configurations
265
+ │ │ │ ├── [configManager.js](http://_vscodecontentref_/10) # Gestion configurations CQT
266
+ │ │ │ ├── [fileDetector.js](http://_vscodecontentref_/11) # Détection types de fichiers
267
+ │ │ │ ├── [languageTools.js](http://_vscodecontentref_/12) # Outils par langage
268
+ │ │ │ └── [toolInstaller.js](http://_vscodecontentref_/13) # Installation outils
269
+ │ │ │
270
+ │ │ ├── [configManager.js](http://_vscodecontentref_/14) # Gestion configuration globale
271
+ │ │ ├── [errorCMD.js](http://_vscodecontentref_/15) # Gestion centralisée des erreurs
272
+ │ │ ├── interactiveMenu/ # Système de menus interactifs
273
+ │ │ │ └── [interactiveMenu.js](http://_vscodecontentref_/16) # Menu de sélection
274
+ │ │ ├── mirroring/ # Système de mirroring
275
+ │ │ │ ├── [branchSynchronizer.js](http://_vscodecontentref_/17) # Synchronisation des branches
276
+ │ │ │ ├── [repoManager.js](http://_vscodecontentref_/18) # Gestion des dépôts
277
+ │ │ │ └── [syncManager.js](http://_vscodecontentref_/19) # Gestionnaire de synchronisation
278
+ │ │ └── [validator.js](http://_vscodecontentref_/20) # Moteur de validation principal
279
+ │ │
280
+ │ ├── hooks/ # Gestion des hooks Git
281
+ │ │ └── constrains/ # Système de contraintes
282
+ │ │ ├── [constrains.js](http://_vscodecontentref_/21) # Définition des contraintes
283
+ │ │ └── [constraintEngine.js](http://_vscodecontentref_/22) # Moteur d'exécution contraintes
284
+ │ │
285
+ │ └── utils/ # Utilitaires partagés
286
+ │ ├── [chalk-wrapper.js](http://_vscodecontentref_/23) # Wrapper pour Chalk
287
+ │ └── [exec-wrapper.js](http://_vscodecontentref_/24) # Wrapper pour exécution commandes
288
+ └── tests/ # Tests automatisés
289
+ └── unit/
290
+ ```
291
+ ## **Flux de Validation**
292
+ 1. **Détection** : Scan du projet pour identifier les langages utilisés
293
+ 2. **Configuration** : Génération automatique des fichiers de config ESLint
294
+ 3. **Installation** : Setup des hooks Git et dépendances npm
295
+ 4. **Validation** : Exécution des vérifications selon les hooks déclenchés
296
+ 5. **Rapport** : Affichage clair des erreurs et suggestions
297
+
298
+ ## **🔧 Développement**
299
+ ### **Ajouter une Nouvelle Contrainte**
300
+ 1. **Dans** `votre_fichier.js` :
301
+ ```js
302
+ const { constraintEngine } = require('./constraintEngine');
303
+
304
+ constraintEngine.addConstraint(
305
+ 'maNouvelleContrainte',
306
+ (value, param) => {
307
+ // Logique de validation
308
+ return value.includes(param);
309
+ },
310
+ (param) => `Le message doit contenir "${param}"`
311
+ );
312
+ ```
313
+ 2. **Utilisation dans la config (en cours de développement) :**
314
+ ```json
315
+ {
316
+ "constraints": {
317
+ "maNouvelleContrainte": "valeur-requise"
318
+ }
319
+ }
320
+ ```
321
+ ## **Ajouter un Support de Langage**
322
+ 1. **Dans** `codeQualityTools.js` :
323
+ ```js
324
+ const LANGUAGE_TOOLS = {
325
+ 'Nouveau Langage': {
326
+ packages: ['package-eslint', 'autre-package'],
327
+ setup: setupNouveauLangage
328
+ }
329
+ };
330
+ ```
331
+ 2. **Implémenter la fonction setup :**
332
+ ```js
333
+ async function setupNouveauLangage() {
334
+ // Configuration spécifique au langage
335
+ }
336
+ ```
337
+ ## **Dépannage**
338
+ ## **Problèmes Courants**
339
+ ### **❌ "Hook existe déjà"**
340
+ ```bash
341
+ npx push-guardian install --force
342
+ ```
343
+ ### **❌ "Répertoire .git/hooks non trouvé"**
344
+ Assurez-vous d'être dans un dépôt Git initialisé :
345
+ ```bash
346
+ git init
347
+ ```
348
+ ### **❌ "Erreurs ESLint"**
349
+ Vérifiez la configuration dans `eslint.config.js` et ajustez selon votre projet.
350
+
351
+ ### **❌ "Permissions denied sur les hooks"**
352
+ ```bash
353
+ chmod +x .git/hooks/*
354
+ ```
355
+ ## **Logs de Débogage**
356
+ Activez le mode verbeux :
357
+ ```bash
358
+ npx push-guardian validate --verbose
359
+ ```
360
+ ## **Réinitialisation**
361
+ Pour tout réinitialiser :
362
+ ```bash
363
+ rm -f push-guardian.config.json
364
+ rm -f eslint.config.js
365
+ rm -f .git/hooks/pre-push .git/hooks/commit-msg .git/hooks/post-checkout
366
+ ```
367
+ ## **Contribution**
368
+ Les contributions sont bienvenues ! Voici comment contribuer :
369
+ 1. **Fork** le repository
370
+ 2. **Créez** une branche : git checkout -b feature/ma-fonctionnalite
371
+ 3. **Commitez** vos changements : git commit -am 'Ajout ma fonctionnalité'
372
+ 4. **Push** : git push origin feature/ma-fonctionnalite
373
+ 5. **Ouvrez** une Pull Request
374
+
375
+ ## **Standards de Code**
376
+ * Suivez le style de code existant
377
+ * Ajoutez des tests pour les nouvelles fonctionnalités
378
+ * Mettez Ă  jour la documentation
379
+
380
+ ## **Licence**
381
+ Ce projet est sous licence ISC.
382
+
383
+ # **Auteurs**
384
+
385
+ ![AUTHORS](https://img.shields.io/badge/AUTHORS:-gray?style=for-the-badge)
386
+ ![https://github.com/lagie-marin](https://img.shields.io/badge/Marin%20Lagie-yellow?style=for-the-badge&logo=undertale&logoColor=E71D29)
package/TECHNO.md ADDED
@@ -0,0 +1,139 @@
1
+ # **🛠️ JUSTIFICATION DES CHOIX TECHNOLOGIQUES push-guardian**
2
+ ## **🎯 POURQUOI CES TECHNOLOGIES ?**
3
+
4
+ ## **1. 🟢 NODE.JS & JavaScript**
5
+
6
+ ### **âś… Justification :**
7
+
8
+ - **Écosystème riche** : Plus grand écosystème de packages (npm)
9
+ - **Cross-platform** : Fonctionne sur Windows, macOS, Linux sans modification
10
+ - **Communauté active** : Support et maintenance à long terme
11
+ - **Performance** : Asynchrone natif pour les opérations I/O
12
+ - **Facile à déployer** : Un seul binaire pour tous les environnements
13
+
14
+ **📊 Alternative considérée** : Python ❌
15
+ - Moins bon pour les outils CLI complexes
16
+ - Gestion des dépendances moins mature que npm
17
+
18
+ ## **2. 🔵 COMMANDER.JS CLI Framework**
19
+ ###
20
+ - **âś… Justification :**
21
+ - **Standard industriel** : Utilisé par Vue CLI, React Native, etc.
22
+ - **Expérience développeur** : Auto-génération d'aide, validation des options
23
+ - **Extensible** : Système de plugins et hooks
24
+ - **Documentation excellente** : Communauté active et nombreux exemples
25
+
26
+
27
+ **📊 Alternatives considérées** :
28
+
29
+ - yargs ❌ Plus complexe pour nos besoins
30
+ - oclif ❌ Trop lourd pour un projet de cette taille
31
+
32
+ ## **3. 🎨 CHALK (Stylisation Terminal)**
33
+ ### **âś… Justification :**
34
+ - **Feedback visuel clair** : Couleurs pour différencier succès/erreurs/infos
35
+ - **Expérience utilisateur** : Meilleure lisibilité des résultats
36
+ - **Léger** : Aucun impact sur les performances
37
+ - **Cross-terminal** : Compatible avec tous les terminaux modernes
38
+
39
+ **📊 Alternative considérée** : colors ❌
40
+ - Moins maintenu, API moins cohérente
41
+
42
+ ## **4. ⚡ EXECA (Execution de Commandes)**
43
+ ### **âś… Justification :**
44
+ - **Interface Promise-native** : Async/await naturel
45
+ - **Cross-platform** : Gère les différences Windows/Uni
46
+ - **Sécurisé** : Échappement automatique des arguments
47
+ - **Rich features** : Timeouts, stdio management, cancellation
48
+
49
+ **📊 Alternative considérée** : child_process natif ❌
50
+ - API verbeuse et error-prone
51
+ - Gestion manuelle de tous les edge cases
52
+
53
+ ## **5. 🪝 HOOKS GIT NATIFS (vs Husky)**
54
+ ### **âś… Justification :**
55
+ - **Plus léger** : Aucune dépendance supplémentaire
56
+ - **Plus transparent** : Utilise le système standard Git
57
+ - **Plus portable** : Fonctionne avec toutes versions de Git
58
+ - **Plus simple** : Moins de configuration, plus fiable
59
+
60
+ **📊 Alternative considérée** : Husky ❌
61
+ - Dépendance supplémentaire
62
+ - Configuration plus complexe
63
+ - Historique de breaking changes
64
+
65
+ ## **6. 📋 ESLINT (Qualité de Code)**
66
+ ### **âś… Justification :**
67
+ - **Standard industriel** : Outil le plus utilisé pour JavaScript/TypeScript
68
+ - **Extensible** : Plugins pour tous les langages (JSON, MD, YAML, HTML)
69
+ - **Configurable** : Règles personnalisables par projet
70
+ - **Écosystème riche** : Intégrations avec tous les éditeurs
71
+
72
+ **📊 Alternative considérée** : JSHint ❌
73
+ - Moins maintenu, moins de fonctionnalités
74
+
75
+ ## **7. 🎯 PRETTIER (Formatage de Code)**
76
+
77
+ - **Style imposé par défaut** : Moins de débats sur le style dans l'équipe
78
+ - **Zero-config** : Fonctionne immédiatement
79
+ - **Multi-langage** : JS, TS, JSON, CSS, MD, YAML, etc.
80
+ - **Intégration parfaite** avec ESLint
81
+
82
+ **📊 Alternative considérée** : StandardJS ❌
83
+ - Trop restrictif, moins flexible
84
+
85
+ ## **8. đź§Ş JEST (Testing)**
86
+ ### **âś… Justification :**
87
+ - **Tout-en-un** : Runner, assertions, mocking, coverage
88
+ - **Performance** : Parallelisation intelligente
89
+ - **Developer experience** : Messages d'erreur clairs, watch mode
90
+ - **Écosystème** : Plugins pour tous les besoins
91
+
92
+ **📊 Alternative considérée** : Mocha + Chai ❌
93
+ - Configuration plus complexe
94
+ - Nécessite plusieurs packages
95
+
96
+ # **🎯 ARCHITECTURE GLOBALE : POURQUOI CE CHOIX ?**
97
+
98
+ ## **MODULARITÉ**
99
+ ```text
100
+ src/
101
+ ├── cli/ # Interface utilisateur
102
+ ├── core/ # Logique métier
103
+ ├── hooks/ # Intégrations Git
104
+ └── utils/ # Utilities partagées
105
+ ```
106
+ ## **âś… Avantages** :
107
+ - **Maintenance** : Équipes peuvent travailler sur différents modules
108
+ - **Testabilité** : Modules testables indépendamment
109
+ - **Évolution** : Possible de remplacer un module sans affecter les autres
110
+ - **Compréhension** : Structure claire pour les nouveaux développeurs
111
+
112
+ ## **🔄 COMPATIBILITÉ & MIGRATION**
113
+ ### **SUPPORT MULTI-VERSIONS**
114
+ ```json
115
+ {
116
+ "engines": {
117
+ "node": ">=16.0.0",
118
+ "npm": ">=8.0.0"
119
+ }
120
+ }
121
+ ```
122
+ âś… Choix raisonnable :
123
+ - **Node 16+** : Support LTS jusqu'en 2025
124
+ - **ESM + CJS** : Compatibilité avec les deux systèmes
125
+ - **Git 2.13+** : Version stable largement déployée
126
+
127
+ ## **🚀 CONCLUSION STRATÉGIQUE**
128
+ ### **POURQUOI CETTE STACK ?**
129
+
130
+ | Besoin | Technologie | Résultat |
131
+ |------------------|----------------------|---------------------------------|
132
+ | CLI robuste | Commander.js | Expérience développeur fluide |
133
+ | Qualité code | ESLint + Prettier | Standards cohérents |
134
+ | Execution cmd | Execa | Cross-platform fiable |
135
+ | Feedback visuel | Chalk | Lisibilité immédiate |
136
+ | Tests | Jest | Couverture complète |
137
+ | Intégration | Hooks Git natifs | Simplicité et fiabilité |
138
+
139
+ Une stack moderne, maintenable, et professionnelle qui résout les vrais problèmes des développeurs sans introduire de complexité inutile.
@@ -0,0 +1 @@
1
+ module.exports = { presets: [['@babel/preset-env', { targets: { node: 'current' } }]] };