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
@@ -0,0 +1,119 @@
1
+ # **Documentation Développeur push-guardian**
2
+
3
+ push-guardian est un outil CLI basé sur Node.js pour la validation automatisée de la qualité du code et la gestion des hooks Git. Ce document explique son architecture, ses composants et comment l'étendre.
4
+
5
+ ## **Vue d'ensemble de l'architecture**
6
+
7
+ push-guardian suit une architecture modulaire avec une séparation claire des préoccupations :
8
+
9
+ - **Couche CLI** : Analyse des commandes et interaction utilisateur
10
+ - **Couche Core** : Logique métier et moteurs de validation
11
+ - **Couche Hooks** : Intégration Git et validation des contraintes
12
+ - **Couche Utils** : Utilitaires partagés
13
+
14
+ ## **Composants principaux**
15
+
16
+ Point d'entrée CLI
17
+ Le point d'entrée principal est index.js, qui utilise Commander.js pour définir les commandes. Les commandes sont chargées dynamiquement depuis command.
18
+
19
+ Structure d'exemple de commande :
20
+
21
+ ```js
22
+ module.exports = {
23
+ name: 'example',
24
+ description: 'Commande exemple',
25
+ options: [{ flags: '-v, --verbose', description: 'Sortie verbeuse' }],
26
+ action: async (options) => {
27
+ // Logique de commande
28
+ }
29
+ };
30
+ ```
31
+
32
+ Gestion de la configuration
33
+ La configuration est gérée par configManager.js, qui charge/sauvegarde `push-guardian.config.json.`
34
+
35
+ Fonctions clés :
36
+
37
+ - **loadConfig()** : Charge la configuration avec des valeurs par défaut
38
+ - **saveConfig(config)** : Sauvegarde la configuration mise à jour
39
+
40
+ Moteur de validation
41
+ La logique de validation principale est dans validator.js, qui orchestre les exécutions ESLint et les validations de hooks.
42
+
43
+ Moteur de contraintes
44
+ Les contraintes sont gérées par constraintEngine.js, un système flexible pour valider les messages et les branches.
45
+
46
+ Pour ajouter une nouvelle contrainte :
47
+
48
+ ```js
49
+ this.constraints.set('newConstraint', (value, param) => {
50
+ // Logique de validation
51
+ return value.length > param;
52
+ });
53
+ this.errorMessages.newConstraint = (param) => `Le message doit être plus long que ${param} caractères`;
54
+ ```
55
+ Intégration des hooks Git
56
+ Les hooks sont définis dans constrains.js, supportant les hooks commit-msg, post-checkout et pre-push.
57
+
58
+ Flux de validation des hooks :
59
+
60
+ 1. Charger la config pour le hook
61
+ 2. Appliquer les contraintes via constraintEngine.validate()
62
+ 3. Quitter avec une erreur si la validation échoue
63
+
64
+ Pour ajouter un nouveau langage :
65
+
66
+ ```js
67
+ const LANGUAGE_TOOLS = {
68
+ 'Nouveau Langage': {
69
+ packages: ['eslint-plugin-newlang'],
70
+ setup: setupNewLanguage
71
+ }
72
+ };
73
+ ```
74
+
75
+ Utilitaires
76
+ Utilitaires partagés incluent :
77
+
78
+ - **exec-wrapper.js** : Wrapper d'exécution de commandes asynchrones
79
+ - **chalk-wrapper.js** : Sortie colorisée avec fallback
80
+
81
+ ## **Tests**
82
+ Les tests sont dans unit utilisant Jest. Lancez avec `npm test`.
83
+
84
+ Exemple de test pour le moteur de contraintes :
85
+
86
+ ```js
87
+ describe('Moteur de Contraintes', () => {
88
+ test('valide correctement', () => {
89
+ // Logique de test
90
+ });
91
+ });
92
+ ```
93
+ ## **Étendre push-guardian**
94
+
95
+ Ajouter une nouvelle commande
96
+
97
+ 1. Créer un nouveau fichier dans command
98
+ 2. Exporter l'objet commande comme montré ci-dessus
99
+ 3. Il sera automatiquement chargé par index.js
100
+
101
+ Ajouter un nouveau type de hook
102
+
103
+ 1. Mettre à jour constrains.js pour gérer le nouveau hook
104
+ 2. Ajouter le support de configuration dans configManager.js
105
+
106
+ Contraintes personnalisées
107
+ Utilisez constraintEngine.addConstraint() pour enregistrer de nouveaux validateurs.
108
+
109
+ ## **Gestion des erreurs**
110
+ Les erreurs sont centralisées dans errorCMD.js, qui formate et quitte avec les traces de pile.
111
+
112
+ ## **Workflow de développement**
113
+
114
+ 1. Installer les dépendances : npm install
115
+ 2. Lancer les tests : npm test
116
+ 3. Lier pour le développement : npm link
117
+ 4. Construire/vérifier : Utiliser ESLint via npx push-guardian validate
118
+
119
+ Pour plus de détails, voir le `README.md` principal et `TECHNO.md`.
@@ -0,0 +1,41 @@
1
+ services:
2
+ push-guardian:
3
+ build:
4
+ context: .
5
+ dockerfile: Dockerfile
6
+ container_name: push-guardian
7
+ user: "${UID:-1000}:${GID:-1000}"
8
+ volumes:
9
+ # Monter le projet à valider
10
+ - ./:/workspace
11
+ # Monter la config git
12
+ - ~/.gitconfig:/home/push-guardian/.gitconfig:ro
13
+ working_dir: /workspace
14
+ environment:
15
+ - NODE_ENV=production
16
+ - TOKEN=${TOKEN:-}
17
+ - GITLAB_TOKEN=${GITLAB_TOKEN:-}
18
+ - AZURE_DEVOPS_URL=${AZURE_DEVOPS_URL:-}
19
+ - AZURE_DEVOPS_TOKEN=${AZURE_DEVOPS_TOKEN:-}
20
+ command: validate
21
+
22
+ # Service pour tests
23
+ test:
24
+ build:
25
+ context: .
26
+ dockerfile: Dockerfile.dev
27
+ volumes:
28
+ - ./:/app
29
+ - /app/node_modules
30
+ command: npm test
31
+
32
+ # Service pour couverture
33
+ coverage:
34
+ build:
35
+ context: .
36
+ dockerfile: Dockerfile.dev
37
+ volumes:
38
+ - ./:/app
39
+ - /app/node_modules
40
+ - ./coverage:/app/coverage
41
+ command: npm run test:coverage
@@ -0,0 +1,223 @@
1
+ # Système de Plugins push-guardian v2
2
+
3
+ Le système de plugins push-guardian v2 permet d'étendre les fonctionnalités via des commandes personnalisées.
4
+
5
+ ## Caractéristiques
6
+
7
+ - **Commandes uniquement** : Les plugins enregistrent des commandes CLI (pas de hooks Git)
8
+ - **Gestion locale** : Plugins créés et gérés localement dans le dossier `plugins/`
9
+ - **Enable/Disable** : Activation/désactivation sans suppression
10
+
11
+ ## Utilisation
12
+
13
+ ### Lister les plugins installés
14
+
15
+ ```bash
16
+ push-guardian plugin list
17
+ ```
18
+
19
+ ### Activer/Désactiver un plugin
20
+
21
+ ```bash
22
+ push-guardian plugin enable <nom-du-plugin>
23
+ push-guardian plugin disable <nom-du-plugin>
24
+ ```
25
+
26
+ ### Lister les commandes disponibles
27
+
28
+ ```bash
29
+ push-guardian plugin commands
30
+ ```
31
+
32
+ ### Exécuter une commande de plugin
33
+
34
+ ```bash
35
+ push-guardian plugin run <nom-du-plugin> <commande> [args...]
36
+ ```
37
+
38
+ Exemple avec le plugin d'exemple :
39
+ ```bash
40
+ push-guardian plugin run example-plugin hello
41
+ push-guardian plugin run example-plugin greet "John"
42
+ push-guardian plugin run example-plugin info
43
+ ```
44
+
45
+ ## Créer un plugin
46
+
47
+ ### Structure du plugin
48
+
49
+ ```
50
+ mon-plugin/
51
+ ├── plugin.json
52
+ └── index.js
53
+ ```
54
+
55
+ ### plugin.json
56
+
57
+ ```json
58
+ {
59
+ "name": "mon-plugin",
60
+ "version": "1.0.0",
61
+ "description": "Description de mon plugin",
62
+ "author": "Votre Nom",
63
+ "main": "index.js",
64
+ "commands": ["ma-commande", "autre-commande"]
65
+ }
66
+ ```
67
+
68
+ ### index.js
69
+
70
+ ```javascript
71
+ const BasePlugin = require('../../src/core/plugins/basePlugin');
72
+ const { getChalk } = require('../../src/utils/chalk-wrapper');
73
+ const chalk = getChalk();
74
+
75
+ class MonPlugin extends BasePlugin {
76
+ constructor(manifest) {
77
+ super(manifest);
78
+ this.setupCommands();
79
+ }
80
+
81
+ setupCommands() {
82
+ this.registerCommand('ma-commande', async (args, options) => {
83
+ console.log(chalk.green('Ma commande s\'exécute!'));
84
+ return 'Résultat de la commande';
85
+ }, {
86
+ description: 'Description de ma commande',
87
+ args: []
88
+ });
89
+
90
+ this.registerCommand('autre-commande', async (args, options) => {
91
+ const param = args[0];
92
+ console.log(chalk.cyan(`Paramètre reçu: ${param}`));
93
+ return `Traité: ${param}`;
94
+ }, {
95
+ description: 'Commande avec un argument',
96
+ args: ['parametre']
97
+ });
98
+ }
99
+ }
100
+
101
+ module.exports = MonPlugin;
102
+ ```
103
+
104
+ ## Configuration locale
105
+
106
+ Le fichier `.push-guardian-plugins.json` stocke la configuration locale :
107
+
108
+ ```json
109
+ {
110
+ "plugins": {
111
+ "example-plugin": {
112
+ "path": "plugins/example-plugin",
113
+ "version": "1.0.0",
114
+ "enabled": true,
115
+ "installedAt": "2024-01-15T10:30:00.000Z"
116
+ }
117
+ }
118
+ }
119
+ ```
120
+
121
+ ## Architecture
122
+
123
+ ```
124
+ push-guardian
125
+
126
+ ├── src/core/
127
+ │ └── plugins/
128
+ │ ├── basePlugin.js # Classe de base
129
+ │ ├── pluginRegistry.js # Registre local
130
+ │ └── pluginManager.js # Gestionnaire d'exécution
131
+
132
+ ├── src/cli/command/
133
+ │ └── plugin.js # Commande CLI
134
+
135
+ └── plugins/ # Plugins créés localement
136
+ └── example-plugin/
137
+ ├── plugin.json
138
+ └── index.js
139
+ ```
140
+
141
+ ## Notes importantes
142
+
143
+ - Les plugins sont des **extensions de commandes** uniquement
144
+ - Ils **ne s'exécutent pas automatiquement** lors des hooks Git
145
+ - Utilisez `push-guardian plugin run <plugin> <commande>` pour les exécuter
146
+ - La désactivation d'un plugin empêche l'exécution de ses commandes
147
+ - Le manifest (`plugin.json`) est obligatoire et doit contenir : name, version, description, author, main
148
+ - Les plugins sont créés localement dans le dossier `plugins/` à la racine du projet
149
+
150
+ ### BasePlugin
151
+
152
+ Classe de base que tous les plugins doivent étendre.
153
+
154
+ **Constructeur**
155
+ - `constructor(manifest)` : Reçoit le manifest (plugin.json)
156
+
157
+ **Méthodes**
158
+ - `registerCommand(name, handler, options)` : Enregistre une commande
159
+ - `name` : Nom de la commande
160
+ - `handler` : Fonction async (args, options) => résultat
161
+ - `options.description` : Description de la commande
162
+ - `options.args` : Tableau des noms d'arguments
163
+
164
+ - `executeCommand(commandName, args, options)` : Exécute une commande
165
+ - `getManifest()` : Retourne le manifest du plugin
166
+ - `cleanup()` : Nettoie les ressources (appelé à la désinstallation)
167
+
168
+ **Propriétés**
169
+ - `name` : Nom du plugin
170
+ - `version` : Version du plugin
171
+ - `description` : Description du plugin
172
+ - `author` : Auteur du plugin
173
+ - `enabled` : État du plugin (actif/inactif)
174
+ - `commands` : Map des commandes enregistrées
175
+
176
+ ## Configuration locale
177
+
178
+ Le fichier `.push-guardian-plugins.json` stocke la configuration locale :
179
+
180
+ ```json
181
+ {
182
+ "plugins": {
183
+ "example-plugin": {
184
+ "path": "example-plugin",
185
+ "version": "1.0.0",
186
+ "enabled": true,
187
+ "installedAt": "2024-01-15T10:30:00.000Z"
188
+ }
189
+ }
190
+ }
191
+ ```
192
+
193
+ ## Architecture
194
+
195
+ ```
196
+ push-guardian
197
+
198
+ ├── src/core/
199
+ │ ├── api/
200
+ │ │ └── pluginApiClient.js # Client API pour le dépôt
201
+ │ └── plugins/
202
+ │ ├── basePlugin.js # Classe de base
203
+ │ ├── pluginRegistry.js # Registre local
204
+ │ ├── pluginManager.js # Gestionnaire d'exécution
205
+ │ ├── pluginInstaller.js # Installation/désinstallation
206
+ │ └── pluginPublisher.js # Publication
207
+
208
+ ├── src/cli/command/
209
+ │ └── plugin.js # Commande CLI
210
+
211
+ └── plugins/ # Plugins installés
212
+ └── example-plugin/
213
+ ├── plugin.json
214
+ └── index.js
215
+ ```
216
+
217
+ ## Notes importantes
218
+
219
+ - Les plugins sont des **extensions de commandes** uniquement
220
+ - Ils **ne s'exécutent pas automatiquement** lors des hooks Git
221
+ - Utilisez `push-guardian plugin run <plugin> <commande>` pour les exécuter
222
+ - La désactivation d'un plugin empêche l'exécution de ses commandes
223
+ - Le manifest (`plugin.json`) est obligatoire et doit contenir : name, version, description, author, main
@@ -0,0 +1,298 @@
1
+ # Architecture push-guardian
2
+
3
+ ## Vue d'ensemble
4
+
5
+ push-guardian est un outil de validation de code et de gestion de workflow Git structuré en modules indépendants.
6
+
7
+ ## Structure du projet
8
+
9
+ ```
10
+ push-guardian/
11
+ ├── src/
12
+ │ ├── cli/ # Interface en ligne de commande
13
+ │ │ ├── index.js # Point d'entrée CLI
14
+ │ │ ├── command/ # Commandes CLI
15
+ │ │ └── install/ # Scripts d'installation
16
+ │ ├── core/ # Logique métier
17
+ │ │ ├── cache/ # Système de cache
18
+ │ │ ├── codeQualityTools/ # Outils de qualité de code
19
+ │ │ ├── interactiveMenu/ # Menus interactifs
20
+ │ │ ├── mirroring/ # Système de mirroring
21
+ │ │ ├── performance/ # Analyse de performance
22
+ │ │ ├── plugins/ # Système de plugins
23
+ │ │ └── reviewApps/ # Review apps pour PR
24
+ │ ├── hooks/ # Hooks Git
25
+ │ └── utils/ # Utilitaires
26
+ ├── tests/ # Tests unitaires
27
+ └── docs/ # Documentation
28
+
29
+ ```
30
+
31
+ ## Modules principaux
32
+
33
+ ### 1. CLI (Command Line Interface)
34
+
35
+ Le module CLI fournit l'interface utilisateur en ligne de commande.
36
+
37
+ **Fichiers clés:**
38
+ - `src/cli/index.js` - Point d'entrée principal
39
+ - `src/cli/command/*.js` - Commandes disponibles
40
+
41
+ **Commandes disponibles:**
42
+ - `config` - Gestion de la configuration
43
+ - `install` - Installation des modules
44
+ - `mirror` - Gestion du mirroring
45
+ - `security` - Analyse de sécurité
46
+ - `validate` - Validation du code
47
+ - `plugin` - Gestion des plugins
48
+ - `performance` - Analyse de performance
49
+
50
+ ### 2. Code Quality Tools
51
+
52
+ Module de gestion de la qualité du code (ESLint, Prettier, etc.).
53
+
54
+ **Composants:**
55
+ - `configAnalyzer.js` - Analyse des configurations existantes
56
+ - `configGenerator.js` - Génération de configurations
57
+ - `configManager.js` - Gestion globale des configs
58
+ - `fileDetector.js` - Détection de fichiers
59
+ - `languageTools.js` - Outils par langage
60
+ - `toolInstaller.js` - Installation d'outils
61
+
62
+ ### 3. Mirroring
63
+
64
+ Système de synchronisation multi-plateformes (GitHub, GitLab, BitBucket, Azure).
65
+
66
+ **Composants:**
67
+ - `branchSynchronizer.js` - Synchronisation de branches
68
+ - `generate.js` - Génération de workflows
69
+ - `repoManager.js` - Gestion des dépôts
70
+ - `syncManager.js` - Orchestration de la synchro
71
+
72
+ ### 4. Plugins
73
+
74
+ Architecture modulaire permettant l'extension des fonctionnalités.
75
+
76
+ **Composants:**
77
+ - `basePlugin.js` - Classe de base pour plugins
78
+ - `pluginRegistry.js` - Registre central
79
+ - `pluginManager.js` - Gestionnaire de plugins
80
+
81
+ **Hooks disponibles:**
82
+ - `pre-validate` - Avant validation
83
+ - `post-validate` - Après validation
84
+ - `pre-commit` - Avant commit
85
+ - `post-commit` - Après commit
86
+
87
+ ### 5. Performance
88
+
89
+ Système d'analyse et de collecte de métriques de performance.
90
+
91
+ **Composants:**
92
+ - `metricsCollector.js` - Collecte de métriques
93
+ - `performanceAnalyzer.js` - Analyse et rapports
94
+ - `performanceReporter.js` - Génération de rapports
95
+
96
+ ### 6. Cache
97
+
98
+ Système de cache multiniveau (mémoire + disque).
99
+
100
+ **Composants:**
101
+ - `cacheManager.js` - Gestionnaire principal
102
+ - `cacheStrategy.js` - Stratégies (LRU, TTL)
103
+
104
+ **Stratégies:**
105
+ - LRU (Least Recently Used) - Cache en mémoire
106
+ - TTL (Time To Live) - Cache avec expiration
107
+
108
+ ### 7. Review Apps
109
+
110
+ Système de déploiement temporaire pour les Pull Requests.
111
+
112
+ **Composants:**
113
+ - `reviewAppManager.js` - Gestion des déploiements
114
+ - `prIntegration.js` - Intégration GitHub/GitLab
115
+
116
+ **Providers supportés:**
117
+ - Local
118
+ - Docker
119
+ - Vercel
120
+ - Netlify
121
+
122
+ ## Flux de données
123
+
124
+ ### Validation de code
125
+
126
+ ```
127
+ Commit Git
128
+
129
+ Hook pre-commit
130
+
131
+ Validation push-guardian
132
+
133
+ ├─ Cache check
134
+ ├─ Plugin hooks (pre-validate)
135
+ ├─ ESLint/Prettier
136
+ ├─ Tests
137
+ ├─ Contraintes
138
+ └─ Plugin hooks (post-validate)
139
+
140
+ Métriques de performance
141
+
142
+ Résultat (success/failure)
143
+ ```
144
+
145
+ ### Mirroring
146
+
147
+ ```
148
+ Push sur GitHub
149
+
150
+ GitHub Action (workflow)
151
+
152
+ SyncManager
153
+
154
+ ├─ BranchSynchronizer
155
+ ├─ RepoManager
156
+ └─ API calls (GitLab, etc.)
157
+
158
+ Synchronisation complète
159
+ ```
160
+
161
+ ### Review Apps
162
+
163
+ ```
164
+ Pull Request créée
165
+
166
+ PR Integration détecte la PR
167
+
168
+ ReviewAppManager
169
+
170
+ ├─ Création du déploiement
171
+ ├─ Build de l'app
172
+ ├─ Déploiement (Vercel/Netlify/Docker)
173
+ └─ Commentaire sur PR avec URL
174
+
175
+ Review App accessible
176
+ ```
177
+
178
+ ## Configuration
179
+
180
+ ### Fichier principal: `push-guardian.config.json`
181
+
182
+ ```json
183
+ {
184
+ "codeQualityTools": {
185
+ "enabled": true,
186
+ "tools": ["JavaScript (ESLint)", "TypeScript (TypeScript ESLint)"]
187
+ },
188
+ "mirroring": {
189
+ "enabled": true,
190
+ "platforms": {
191
+ "github": { "enabled": true },
192
+ "gitlab": { "enabled": true }
193
+ }
194
+ },
195
+ "plugins": {
196
+ "enabled": true,
197
+ "paths": ["./plugins"]
198
+ },
199
+ "cache": {
200
+ "enabled": true,
201
+ "strategy": "LRU",
202
+ "maxSize": 200
203
+ },
204
+ "performance": {
205
+ "enabled": true,
206
+ "collectMetrics": true
207
+ }
208
+ }
209
+ ```
210
+
211
+ ## Variables d'environnement
212
+
213
+ ```bash
214
+ # Tokens
215
+ GITHUB_TOKEN=xxx
216
+ GITLAB_TOKEN=xxx
217
+ BITBUCKET_TOKEN=xxx
218
+
219
+ # Mirroring
220
+ push-guardian_MIRROR_SOURCE_PLATFORM=github
221
+ push-guardian_MIRROR_TARGET_PLATFORM=gitlab
222
+
223
+ # Review Apps
224
+ VERCEL_TOKEN=xxx
225
+ NETLIFY_AUTH_TOKEN=xxx
226
+
227
+ # Performance
228
+ push-guardian_ENABLE_METRICS=true
229
+ ```
230
+
231
+ ## Extensibilité
232
+
233
+ ### Créer un plugin
234
+
235
+ ```javascript
236
+ const BasePlugin = require('./src/core/plugins/basePlugin');
237
+
238
+ class MyPlugin extends BasePlugin {
239
+ constructor() {
240
+ super('my-plugin', '1.0.0');
241
+ }
242
+
243
+ async initialize() {
244
+ this.registerHook('pre-validate', async (data) => {
245
+ console.log('Pre-validation personnalisée');
246
+ return data;
247
+ });
248
+ }
249
+ }
250
+
251
+ module.exports = MyPlugin;
252
+ ```
253
+
254
+ ### Enregistrer le plugin
255
+
256
+ ```bash
257
+ npx push-guardian plugin --load ./plugins
258
+ ```
259
+
260
+ ## Tests
261
+
262
+ ```bash
263
+ # Tous les tests
264
+ npm test
265
+
266
+ # Tests avec couverture
267
+ npm test -- --coverage
268
+
269
+ # Tests d'un module spécifique
270
+ npm test -- tests/unit/configAnalyzer.test.js
271
+ ```
272
+
273
+ ## Performance
274
+
275
+ Le système de performance collecte automatiquement:
276
+ - Durée des validations
277
+ - Durée des hooks
278
+ - Durée du linting
279
+ - Taux de succès
280
+
281
+ Analyse:
282
+ ```bash
283
+ npx push-guardian performance --analyze
284
+ ```
285
+
286
+ ## Sécurité
287
+
288
+ - Tokens stockés dans `.env` (non versionné)
289
+ - Validation des entrées utilisateur
290
+ - Sandboxing des plugins
291
+ - Permissions limitées pour les hooks
292
+
293
+ ## Limites connues
294
+
295
+ - Cache disque limité à 1 Go par défaut
296
+ - Review Apps limitées à 10 déploiements simultanés
297
+ - Plugins ne peuvent pas modifier le core
298
+ - Métriques conservées 30 jours maximum