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.
- package/.dockerignore +15 -0
- package/.pushguardian-plugins.json +10 -0
- package/Dockerfile +41 -0
- package/Dockerfile.dev +20 -0
- package/README.md +386 -0
- package/TECHNO.md +139 -0
- package/babel.config.js +1 -0
- package/developper_utils.md +119 -0
- package/docker-compose.yml +41 -0
- package/docs/PLUGINS.md +223 -0
- package/docs/technical/architecture.md +298 -0
- package/docs/technical/performance-guide.md +390 -0
- package/docs/technical/plugin-persistence.md +169 -0
- package/docs/technical/plugins-guide.md +409 -0
- package/jest.config.js +22 -0
- package/package.json +53 -0
- package/plugins/example-plugin/index.js +55 -0
- package/plugins/example-plugin/plugin.json +8 -0
- package/scripts/coverage-report.js +75 -0
- package/src/cli/command/config.js +33 -0
- package/src/cli/command/install.js +137 -0
- package/src/cli/command/mirror.js +90 -0
- package/src/cli/command/performance.js +160 -0
- package/src/cli/command/plugin.js +171 -0
- package/src/cli/command/security.js +152 -0
- package/src/cli/command/shell.js +238 -0
- package/src/cli/command/validate.js +54 -0
- package/src/cli/index.js +23 -0
- package/src/cli/install/codeQualityTools.js +156 -0
- package/src/cli/install/hooks.js +89 -0
- package/src/cli/install/mirroring.js +299 -0
- package/src/core/codeQualityTools/configAnalyzer.js +216 -0
- package/src/core/codeQualityTools/configGenerator.js +381 -0
- package/src/core/codeQualityTools/configManager.js +65 -0
- package/src/core/codeQualityTools/fileDetector.js +62 -0
- package/src/core/codeQualityTools/languageTools.js +104 -0
- package/src/core/codeQualityTools/toolInstaller.js +53 -0
- package/src/core/configManager.js +43 -0
- package/src/core/errorCMD.js +9 -0
- package/src/core/interactiveMenu/interactiveMenu.js +73 -0
- package/src/core/mirroring/branchSynchronizer.js +59 -0
- package/src/core/mirroring/generate.js +114 -0
- package/src/core/mirroring/repoManager.js +112 -0
- package/src/core/mirroring/syncManager.js +176 -0
- package/src/core/module/env-loader.js +109 -0
- package/src/core/performance/metricsCollector.js +217 -0
- package/src/core/performance/performanceAnalyzer.js +182 -0
- package/src/core/plugins/basePlugin.js +89 -0
- package/src/core/plugins/pluginManager.js +123 -0
- package/src/core/plugins/pluginRegistry.js +215 -0
- package/src/core/validator.js +53 -0
- package/src/hooks/constrains/constrains.js +174 -0
- package/src/hooks/constrains/constraintEngine.js +140 -0
- package/src/utils/chalk-wrapper.js +26 -0
- package/src/utils/exec-wrapper.js +6 -0
- package/tests/fixtures/mock-eslint-config-array.js +8 -0
- package/tests/fixtures/mock-eslint-config-single.js +6 -0
- package/tests/fixtures/mockLoadedPlugin.js +11 -0
- package/tests/setup.js +28 -0
- package/tests/unit/basePlugin.test.js +355 -0
- package/tests/unit/branchSynchronizer.test.js +308 -0
- package/tests/unit/cli-commands.test.js +144 -0
- package/tests/unit/codeQualityConfigManager.test.js +233 -0
- package/tests/unit/codeQualityTools.test.js +36 -0
- package/tests/unit/command-install.test.js +247 -0
- package/tests/unit/command-mirror.test.js +179 -0
- package/tests/unit/command-performance.test.js +169 -0
- package/tests/unit/command-plugin.test.js +288 -0
- package/tests/unit/command-security.test.js +277 -0
- package/tests/unit/command-shell.test.js +325 -0
- package/tests/unit/configAnalyzer.test.js +593 -0
- package/tests/unit/configGenerator.test.js +808 -0
- package/tests/unit/configManager.test.js +195 -0
- package/tests/unit/constrains.test.js +463 -0
- package/tests/unit/constraint.test.js +554 -0
- package/tests/unit/env-loader.test.js +279 -0
- package/tests/unit/fileDetector.test.js +171 -0
- package/tests/unit/install-codeQualityTools.test.js +343 -0
- package/tests/unit/install-hooks.test.js +280 -0
- package/tests/unit/install-mirroring.test.js +731 -0
- package/tests/unit/install-modules.test.js +81 -0
- package/tests/unit/interactiveMenu.test.js +426 -0
- package/tests/unit/languageTools.test.js +244 -0
- package/tests/unit/metricsCollector.test.js +354 -0
- package/tests/unit/mirroring-generate.test.js +96 -0
- package/tests/unit/modules-exist.test.js +96 -0
- package/tests/unit/performanceAnalyzer.test.js +473 -0
- package/tests/unit/pluginManager.test.js +427 -0
- package/tests/unit/pluginRegistry.test.js +592 -0
- package/tests/unit/repoManager.test.js +469 -0
- package/tests/unit/reviewAppManager.test.js +5 -0
- package/tests/unit/security-command.test.js +43 -0
- package/tests/unit/syncManager.test.js +494 -0
- package/tests/unit/toolInstaller.test.js +240 -0
- package/tests/unit/utils.test.js +144 -0
- package/tests/unit/validator.test.js +215 -0
package/.dockerignore
ADDED
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
|
+

|
|
386
|
+

|
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.
|
package/babel.config.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = { presets: [['@babel/preset-env', { targets: { node: 'current' } }]] };
|