@atlashub/smartstack-cli 1.9.0 → 1.10.1
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/dist/index.js +8 -4
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/commands/gitflow/1-init.md +166 -3
- package/templates/commands/gitflow/10-start.md +172 -16
- package/templates/commands/gitflow/11-finish.md +34 -1
- package/templates/commands/gitflow/3-commit.md +470 -5
- package/templates/commands/gitflow/7-pull-request.md +269 -20
- package/templates/commands/gitflow/9-merge.md +36 -0
- package/templates/commands/gitflow/rescue.md +867 -0
package/package.json
CHANGED
|
@@ -264,12 +264,65 @@ az devops project show --project "$AZ_PROJECT" > /dev/null 2>&1 || {
|
|
|
264
264
|
|
|
265
265
|
---
|
|
266
266
|
|
|
267
|
+
### ÉTAPE 7.6 : Configuration de la langue
|
|
268
|
+
|
|
269
|
+
> **IMPORTANT:** La langue choisie s'applique UNIQUEMENT au contenu descriptif :
|
|
270
|
+
> - Description des features/hotfixes (partie apres `feature/` ou `hotfix/`)
|
|
271
|
+
> - Messages de commit (partie apres le prefix `feat:`, `fix:`, etc.)
|
|
272
|
+
> - Description dans les titres de PR
|
|
273
|
+
>
|
|
274
|
+
> **NON AFFECTE par la langue (toujours en anglais):**
|
|
275
|
+
> - Prefixes de branches: `feature/`, `release/`, `hotfix/`
|
|
276
|
+
> - Prefixes de commits: `feat:`, `fix:`, `chore:`, etc.
|
|
277
|
+
> - Structure GitFlow
|
|
278
|
+
|
|
279
|
+
```javascript
|
|
280
|
+
AskUserQuestion({
|
|
281
|
+
questions: [{
|
|
282
|
+
question: "Quelle langue utiliser pour les descriptions ?",
|
|
283
|
+
header: "Langue",
|
|
284
|
+
options: [
|
|
285
|
+
{ label: "English (Recommended)", description: "Feature descriptions, commit messages in English" },
|
|
286
|
+
{ label: "Francais", description: "Descriptions en francais (prefixes restent en anglais)" }
|
|
287
|
+
],
|
|
288
|
+
multiSelect: false
|
|
289
|
+
}]
|
|
290
|
+
})
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**Exemple selon la langue:**
|
|
294
|
+
|
|
295
|
+
| Element | English | Francais |
|
|
296
|
+
|---------|---------|----------|
|
|
297
|
+
| Branche | `feature/add-user-auth` | `feature/ajouter-auth-utilisateur` |
|
|
298
|
+
| Commit | `feat: add user authentication` | `feat: ajouter authentification utilisateur` |
|
|
299
|
+
| PR Title | `feat: Add User Authentication` | `feat: Ajouter Authentification Utilisateur` |
|
|
300
|
+
| Prefixes | `feature/`, `feat:` (inchange) | `feature/`, `feat:` (inchange) |
|
|
301
|
+
|
|
302
|
+
**Stocker le resultat dans la config:**
|
|
303
|
+
- `language.code`: "en" ou "fr"
|
|
304
|
+
- `language.descriptions`: dictionnaire des verbes d'action traduits (pour suggestions)
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
267
308
|
### ÉTAPE 8 : Configuration
|
|
268
309
|
|
|
269
310
|
```json
|
|
270
311
|
{
|
|
271
|
-
"version": "1.
|
|
312
|
+
"version": "1.5.0",
|
|
272
313
|
"initMode": "clone",
|
|
314
|
+
"language": {
|
|
315
|
+
"code": "en",
|
|
316
|
+
"descriptions": {
|
|
317
|
+
"add": "add",
|
|
318
|
+
"update": "update",
|
|
319
|
+
"fix": "fix",
|
|
320
|
+
"refactor": "refactor",
|
|
321
|
+
"remove": "remove",
|
|
322
|
+
"improve": "improve",
|
|
323
|
+
"implement": "implement"
|
|
324
|
+
}
|
|
325
|
+
},
|
|
273
326
|
"repository": {
|
|
274
327
|
"name": "{repo_name}",
|
|
275
328
|
"remoteUrl": "{REPO_URL}",
|
|
@@ -867,11 +920,31 @@ parent/
|
|
|
867
920
|
|
|
868
921
|
### Config.json structure
|
|
869
922
|
|
|
870
|
-
#### Organized Mode (v1.
|
|
923
|
+
#### Organized Mode (v1.5)
|
|
871
924
|
```json
|
|
872
925
|
{
|
|
873
|
-
"version": "1.
|
|
926
|
+
"version": "1.5.0",
|
|
874
927
|
"initMode": "organized",
|
|
928
|
+
"language": {
|
|
929
|
+
"code": "en",
|
|
930
|
+
"descriptions": {
|
|
931
|
+
"add": "add",
|
|
932
|
+
"update": "update",
|
|
933
|
+
"fix": "fix",
|
|
934
|
+
"refactor": "refactor",
|
|
935
|
+
"remove": "remove",
|
|
936
|
+
"improve": "improve",
|
|
937
|
+
"implement": "implement"
|
|
938
|
+
}
|
|
939
|
+
},
|
|
940
|
+
"naming": {
|
|
941
|
+
"normalize": true,
|
|
942
|
+
"maxLength": 50,
|
|
943
|
+
"separator": "-",
|
|
944
|
+
"lowercase": true,
|
|
945
|
+
"removeAccents": true,
|
|
946
|
+
"allowedChars": "a-z0-9-"
|
|
947
|
+
},
|
|
875
948
|
"repository": { "name": "", "defaultBranch": "main", "remoteUrl": "" },
|
|
876
949
|
"versioning": { "strategy": "semver", "current": "0.1.0", "source": "auto", "sourceFile": "", "tagPrefix": "v", "autoIncrement": { "feature": "minor", "hotfix": "patch", "release": "manual" } },
|
|
877
950
|
"git": { "branches": { "main": "main", "develop": "develop", "feature": "feature/", "release": "release/", "hotfix": "hotfix/" }, "mergeStrategy": "--no-ff", "protectedBranches": ["main", "develop"] },
|
|
@@ -921,6 +994,96 @@ parent/
|
|
|
921
994
|
}
|
|
922
995
|
```
|
|
923
996
|
|
|
997
|
+
### Language & Naming Configuration (NEW in v1.5)
|
|
998
|
+
|
|
999
|
+
La section `language` definit la langue pour le **contenu descriptif uniquement**.
|
|
1000
|
+
|
|
1001
|
+
> **IMPORTANT - Ce qui ne change PAS selon la langue:**
|
|
1002
|
+
> - Prefixes de branches: `feature/`, `release/`, `hotfix/` (toujours en anglais)
|
|
1003
|
+
> - Prefixes de commits: `feat:`, `fix:`, `chore:`, `docs:`, etc. (Conventional Commits)
|
|
1004
|
+
> - Structure GitFlow (worktrees, config, etc.)
|
|
1005
|
+
|
|
1006
|
+
| Parametre | Description | Defaut |
|
|
1007
|
+
|-----------|-------------|--------|
|
|
1008
|
+
| `code` | Code langue (en, fr) | `en` |
|
|
1009
|
+
| `descriptions` | Verbes d'action pour suggestions | voir ci-dessous |
|
|
1010
|
+
|
|
1011
|
+
**Verbes d'action suggeres par langue:**
|
|
1012
|
+
|
|
1013
|
+
| Action | English | Francais |
|
|
1014
|
+
|--------|---------|----------|
|
|
1015
|
+
| Ajouter | `add` | `ajouter` |
|
|
1016
|
+
| Modifier | `update` | `modifier` |
|
|
1017
|
+
| Corriger | `fix` | `corriger` |
|
|
1018
|
+
| Refactorer | `refactor` | `refactorer` |
|
|
1019
|
+
| Supprimer | `remove` | `supprimer` |
|
|
1020
|
+
| Ameliorer | `improve` | `ameliorer` |
|
|
1021
|
+
| Implementer | `implement` | `implementer` |
|
|
1022
|
+
|
|
1023
|
+
**Exemples concrets:**
|
|
1024
|
+
|
|
1025
|
+
| Element | English (code: "en") | Francais (code: "fr") |
|
|
1026
|
+
|---------|---------------------|----------------------|
|
|
1027
|
+
| Branche feature | `feature/add-user-auth` | `feature/ajouter-auth-utilisateur` |
|
|
1028
|
+
| Branche hotfix | `hotfix/fix-login-bug` | `hotfix/corriger-bug-login` |
|
|
1029
|
+
| Commit | `feat: add user authentication` | `feat: ajouter authentification` |
|
|
1030
|
+
| Titre PR | `feat: Add User Auth` | `feat: Ajouter Auth Utilisateur` |
|
|
1031
|
+
|
|
1032
|
+
> Note: Le prefix `feature/` et `feat:` restent TOUJOURS en anglais.
|
|
1033
|
+
|
|
1034
|
+
La section `naming` configure la normalisation automatique des noms.
|
|
1035
|
+
|
|
1036
|
+
| Parametre | Description | Defaut |
|
|
1037
|
+
|-----------|-------------|--------|
|
|
1038
|
+
| `normalize` | Activer la normalisation automatique | `true` |
|
|
1039
|
+
| `maxLength` | Longueur max des noms de branches | `50` |
|
|
1040
|
+
| `separator` | Separateur entre les mots | `-` |
|
|
1041
|
+
| `lowercase` | Forcer en minuscules | `true` |
|
|
1042
|
+
| `removeAccents` | Supprimer les accents | `true` |
|
|
1043
|
+
| `allowedChars` | Caracteres autorises (regex) | `a-z0-9-` |
|
|
1044
|
+
|
|
1045
|
+
**Fonction de normalisation (utilisee partout):**
|
|
1046
|
+
|
|
1047
|
+
```bash
|
|
1048
|
+
normalize_name() {
|
|
1049
|
+
local input="$1"
|
|
1050
|
+
local max_length="${2:-50}"
|
|
1051
|
+
|
|
1052
|
+
# 1. Convertir en minuscules
|
|
1053
|
+
local result=$(echo "$input" | tr '[:upper:]' '[:lower:]')
|
|
1054
|
+
|
|
1055
|
+
# 2. Supprimer les accents
|
|
1056
|
+
result=$(echo "$result" | sed 'y/àâäéèêëïîôùûüç/aaaeeeeiioouuc/')
|
|
1057
|
+
|
|
1058
|
+
# 3. Remplacer les espaces et underscores par des tirets
|
|
1059
|
+
result=$(echo "$result" | sed 's/[ _]/-/g')
|
|
1060
|
+
|
|
1061
|
+
# 4. Supprimer les caracteres speciaux (garder uniquement a-z, 0-9, -)
|
|
1062
|
+
result=$(echo "$result" | sed 's/[^a-z0-9-]//g')
|
|
1063
|
+
|
|
1064
|
+
# 5. Supprimer les tirets multiples
|
|
1065
|
+
result=$(echo "$result" | sed 's/--*/-/g')
|
|
1066
|
+
|
|
1067
|
+
# 6. Supprimer les tirets en debut/fin
|
|
1068
|
+
result=$(echo "$result" | sed 's/^-//;s/-$//')
|
|
1069
|
+
|
|
1070
|
+
# 7. Tronquer a la longueur max
|
|
1071
|
+
result=$(echo "$result" | cut -c1-$max_length)
|
|
1072
|
+
|
|
1073
|
+
# 8. Supprimer le tiret final apres troncature
|
|
1074
|
+
result=$(echo "$result" | sed 's/-$//')
|
|
1075
|
+
|
|
1076
|
+
echo "$result"
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
# Exemples:
|
|
1080
|
+
# "Ajouter l'authentification utilisateur" → "ajouter-lauthentification-utilisateur"
|
|
1081
|
+
# "Fix: Bug dans le login !!" → "fix-bug-dans-le-login"
|
|
1082
|
+
# "Ajout_Feature_Test" → "ajout-feature-test"
|
|
1083
|
+
```
|
|
1084
|
+
|
|
1085
|
+
---
|
|
1086
|
+
|
|
924
1087
|
### Azure DevOps Configuration (NEW in v1.4)
|
|
925
1088
|
|
|
926
1089
|
La section `azureDevOps` configure l'integration avec Azure DevOps CLI pour les PR, work items et boards:
|
|
@@ -12,6 +12,14 @@ Tu es expert GitFlow. Cree une branche dans un **worktree separe** (par defaut).
|
|
|
12
12
|
|
|
13
13
|
**Argument:** `$ARGUMENTS` = `{type} {name} [--no-worktree]`
|
|
14
14
|
|
|
15
|
+
**FLUX D'EXECUTION:**
|
|
16
|
+
```
|
|
17
|
+
AVEC arguments: ETAPE 1 → ETAPE 5 → ETAPE 6 → ETAPE 7 → ETAPE 8
|
|
18
|
+
SANS arguments: ETAPE 1 → ETAPE 2 → ETAPE 3 → ETAPE 4 → ETAPE 5 → ETAPE 6 → ETAPE 7 → ETAPE 8
|
|
19
|
+
↑
|
|
20
|
+
TOUJOURS OBLIGATOIRE
|
|
21
|
+
```
|
|
22
|
+
|
|
15
23
|
---
|
|
16
24
|
|
|
17
25
|
## ETAPE 1: Analyser le contexte
|
|
@@ -77,14 +85,16 @@ EF CORE (si projet .NET)
|
|
|
77
85
|
|
|
78
86
|
## ETAPE 3: Questions dynamiques selon contexte
|
|
79
87
|
|
|
80
|
-
### Si `$ARGUMENTS` fourni → Parser et
|
|
88
|
+
### Si `$ARGUMENTS` fourni → Parser et aller aux verifications
|
|
81
89
|
|
|
82
90
|
```
|
|
83
91
|
$ARGUMENTS = "feature add-user-auth"
|
|
84
92
|
→ TYPE = "feature", NAME = "add-user-auth"
|
|
85
|
-
→ Sauter les questions,
|
|
93
|
+
→ Sauter les questions (ETAPES 3-4), aller directement a ETAPE 5 (verifications)
|
|
86
94
|
```
|
|
87
95
|
|
|
96
|
+
**IMPORTANT:** Meme avec des arguments, tu DOIS executer l'ETAPE 5 (verifications) avant de creer la branche.
|
|
97
|
+
|
|
88
98
|
### Si PAS d'arguments → Questionnaire dynamique
|
|
89
99
|
|
|
90
100
|
**Construire les options selon le contexte:**
|
|
@@ -148,22 +158,132 @@ AskUserQuestion({
|
|
|
148
158
|
|
|
149
159
|
### Si FEATURE selectionne:
|
|
150
160
|
|
|
161
|
+
**Lire la configuration de langue:**
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
# ═══════════════════════════════════════════════════════════════
|
|
165
|
+
# CONFIGURATION DE LANGUE
|
|
166
|
+
# ═══════════════════════════════════════════════════════════════
|
|
167
|
+
CONFIG_FILE=".claude/gitflow/config.json"
|
|
168
|
+
LANG_CODE="en"
|
|
169
|
+
if [ -f "$CONFIG_FILE" ]; then
|
|
170
|
+
LANG_CODE=$(grep -oP '"code":\s*"\K[^"]+' "$CONFIG_FILE" 2>/dev/null | head -1)
|
|
171
|
+
LANG_CODE=${LANG_CODE:-en}
|
|
172
|
+
fi
|
|
173
|
+
echo "Langue configuree: $LANG_CODE"
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**Demander la description selon la langue configuree:**
|
|
177
|
+
|
|
178
|
+
> **NOTE:** Le prefix `feature/` reste TOUJOURS en anglais.
|
|
179
|
+
> Seule la partie descriptive (apres `feature/`) utilise la langue configuree.
|
|
180
|
+
|
|
151
181
|
```javascript
|
|
182
|
+
// Lire la config de langue
|
|
183
|
+
const langConfig = readConfig()?.language || { code: "en" }
|
|
184
|
+
const isEnglish = langConfig.code === "en"
|
|
185
|
+
|
|
186
|
+
// Suggestions de verbes d'action selon la langue
|
|
187
|
+
// Le prefix de branche "feature/" ne change PAS
|
|
188
|
+
const featureOptions = isEnglish ? [
|
|
189
|
+
{ label: "add-", description: "Add a new feature → feature/add-..." },
|
|
190
|
+
{ label: "update-", description: "Update existing → feature/update-..." },
|
|
191
|
+
{ label: "fix-", description: "Fix a bug → feature/fix-..." },
|
|
192
|
+
{ label: "refactor-", description: "Refactor code → feature/refactor-..." },
|
|
193
|
+
{ label: "improve-", description: "Improve perf/UX → feature/improve-..." }
|
|
194
|
+
] : [
|
|
195
|
+
{ label: "ajouter-", description: "Nouvelle fonctionnalite → feature/ajouter-..." },
|
|
196
|
+
{ label: "modifier-", description: "Modifier existant → feature/modifier-..." },
|
|
197
|
+
{ label: "corriger-", description: "Corriger un bug → feature/corriger-..." },
|
|
198
|
+
{ label: "refactorer-", description: "Refactorer du code → feature/refactorer-..." },
|
|
199
|
+
{ label: "ameliorer-", description: "Ameliorer perf/UX → feature/ameliorer-..." }
|
|
200
|
+
]
|
|
201
|
+
|
|
152
202
|
AskUserQuestion({
|
|
153
203
|
questions: [{
|
|
154
|
-
question:
|
|
204
|
+
question: isEnglish
|
|
205
|
+
? "Describe the feature (branch will be feature/your-description)"
|
|
206
|
+
: "Decrivez la feature (branche sera feature/votre-description)",
|
|
155
207
|
header: "Feature",
|
|
156
|
-
options:
|
|
157
|
-
{ label: "add-", description: "Ajouter une nouvelle fonctionnalite" },
|
|
158
|
-
{ label: "update-", description: "Ameliorer une fonctionnalite existante" },
|
|
159
|
-
{ label: "refactor-", description: "Refactoring de code" }
|
|
160
|
-
],
|
|
208
|
+
options: featureOptions,
|
|
161
209
|
multiSelect: false
|
|
162
210
|
}]
|
|
163
211
|
})
|
|
164
|
-
//
|
|
212
|
+
// L'utilisateur complete via "Other" pour le nom complet
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**Normaliser le nom saisi:**
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
# ═══════════════════════════════════════════════════════════════
|
|
219
|
+
# FONCTION DE NORMALISATION DES NOMS DE BRANCHES
|
|
220
|
+
# ═══════════════════════════════════════════════════════════════
|
|
221
|
+
normalize_branch_name() {
|
|
222
|
+
local input="$1"
|
|
223
|
+
local max_length="${2:-50}"
|
|
224
|
+
|
|
225
|
+
# 1. Convertir en minuscules
|
|
226
|
+
local result=$(echo "$input" | tr '[:upper:]' '[:lower:]')
|
|
227
|
+
|
|
228
|
+
# 2. Supprimer les accents (francais et autres)
|
|
229
|
+
result=$(echo "$result" | sed 'y/àâäéèêëïîôùûüçœæÀÂÄÉÈÊËÏÎÔÙÛÜÇŒÆ/aaaeeeeiioouucoaAAaEeeeIIOOuucoa/')
|
|
230
|
+
|
|
231
|
+
# 3. Remplacer espaces, underscores, apostrophes par des tirets
|
|
232
|
+
result=$(echo "$result" | sed "s/[ _']/-/g")
|
|
233
|
+
|
|
234
|
+
# 4. Supprimer les caracteres non autorises
|
|
235
|
+
result=$(echo "$result" | sed 's/[^a-z0-9-]//g')
|
|
236
|
+
|
|
237
|
+
# 5. Supprimer les tirets multiples
|
|
238
|
+
result=$(echo "$result" | sed 's/--*/-/g')
|
|
239
|
+
|
|
240
|
+
# 6. Supprimer les tirets en debut/fin
|
|
241
|
+
result=$(echo "$result" | sed 's/^-//;s/-$//')
|
|
242
|
+
|
|
243
|
+
# 7. Tronquer a la longueur max
|
|
244
|
+
result=$(echo "$result" | cut -c1-$max_length)
|
|
245
|
+
|
|
246
|
+
# 8. Supprimer le tiret final apres troncature
|
|
247
|
+
result=$(echo "$result" | sed 's/-$//')
|
|
248
|
+
|
|
249
|
+
echo "$result"
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
# Normaliser le nom fourni par l'utilisateur
|
|
253
|
+
RAW_NAME="$USER_INPUT"
|
|
254
|
+
FEATURE_NAME=$(normalize_branch_name "$RAW_NAME" 50)
|
|
255
|
+
|
|
256
|
+
# Afficher si normalisation appliquee
|
|
257
|
+
if [ "$RAW_NAME" != "$FEATURE_NAME" ]; then
|
|
258
|
+
echo ""
|
|
259
|
+
echo "┌──────────────────────────────────────────────────────────────────────────────┐"
|
|
260
|
+
echo "│ ℹ️ NOM NORMALISE │"
|
|
261
|
+
echo "├──────────────────────────────────────────────────────────────────────────────┤"
|
|
262
|
+
echo "│ Saisi: $RAW_NAME"
|
|
263
|
+
echo "│ Normalise: $FEATURE_NAME"
|
|
264
|
+
echo "├──────────────────────────────────────────────────────────────────────────────┤"
|
|
265
|
+
echo "│ Raisons possibles: │"
|
|
266
|
+
echo "│ - Accents supprimes (e→e, a→a) │"
|
|
267
|
+
echo "│ - Espaces remplaces par tirets │"
|
|
268
|
+
echo "│ - Caracteres speciaux supprimes │"
|
|
269
|
+
echo "│ - Majuscules converties en minuscules │"
|
|
270
|
+
echo "└──────────────────────────────────────────────────────────────────────────────┘"
|
|
271
|
+
fi
|
|
272
|
+
|
|
273
|
+
BRANCH_NAME="feature/$FEATURE_NAME"
|
|
274
|
+
echo "Branche: $BRANCH_NAME"
|
|
165
275
|
```
|
|
166
276
|
|
|
277
|
+
**Exemples de normalisation:**
|
|
278
|
+
|
|
279
|
+
| Entree utilisateur | Resultat normalise |
|
|
280
|
+
|--------------------|-------------------|
|
|
281
|
+
| "Ajouter l'authentification" | `ajouter-lauthentification` |
|
|
282
|
+
| "Add User Auth !!" | `add-user-auth` |
|
|
283
|
+
| "Améliorer_Performance_API" | `ameliorer-performance-api` |
|
|
284
|
+
| "fix: Bug dans le login" | `fix-bug-dans-le-login` |
|
|
285
|
+
| "FEATURE majuscules" | `feature-majuscules` |
|
|
286
|
+
|
|
167
287
|
### Si RELEASE selectionne:
|
|
168
288
|
|
|
169
289
|
**Etape A: Verifier l'etat de main**
|
|
@@ -240,26 +360,62 @@ AskUserQuestion({
|
|
|
240
360
|
**⚠️ NOTE VERSIONING:** La version sera automatiquement incrementee (PATCH) lors du `/gitflow:11-finish`.
|
|
241
361
|
Exemple: `1.7.1` → `1.7.2`. Pas besoin de faire `npm version patch` manuellement.
|
|
242
362
|
|
|
363
|
+
**Demander la description selon la langue configuree:**
|
|
364
|
+
|
|
365
|
+
> **NOTE:** Le prefix `hotfix/` reste TOUJOURS en anglais.
|
|
366
|
+
> Seule la partie descriptive utilise la langue configuree.
|
|
367
|
+
|
|
243
368
|
```javascript
|
|
369
|
+
// Lire la config de langue
|
|
370
|
+
const langConfig = readConfig()?.language || { code: "en" }
|
|
371
|
+
const isEnglish = langConfig.code === "en"
|
|
372
|
+
|
|
373
|
+
// Suggestions selon la langue (prefix hotfix/ ne change pas)
|
|
374
|
+
const hotfixOptions = isEnglish ? [
|
|
375
|
+
{ label: "fix-", description: "Bug fix → hotfix/fix-..." },
|
|
376
|
+
{ label: "security-", description: "Security fix → hotfix/security-..." },
|
|
377
|
+
{ label: "revert-", description: "Revert a change → hotfix/revert-..." },
|
|
378
|
+
{ label: "patch-", description: "Quick patch → hotfix/patch-..." }
|
|
379
|
+
] : [
|
|
380
|
+
{ label: "corriger-", description: "Correction bug → hotfix/corriger-..." },
|
|
381
|
+
{ label: "securite-", description: "Correction securite → hotfix/securite-..." },
|
|
382
|
+
{ label: "annuler-", description: "Annuler changement → hotfix/annuler-..." },
|
|
383
|
+
{ label: "patch-", description: "Correctif rapide → hotfix/patch-..." }
|
|
384
|
+
]
|
|
385
|
+
|
|
244
386
|
AskUserQuestion({
|
|
245
387
|
questions: [{
|
|
246
|
-
question:
|
|
388
|
+
question: isEnglish
|
|
389
|
+
? "Describe the hotfix (branch will be hotfix/your-description)"
|
|
390
|
+
: "Decrivez le hotfix (branche sera hotfix/votre-description)",
|
|
247
391
|
header: "Hotfix",
|
|
248
|
-
options:
|
|
249
|
-
{ label: "fix-", description: "Correction de bug" },
|
|
250
|
-
{ label: "security-", description: "Correction de securite" },
|
|
251
|
-
{ label: "revert-", description: "Annuler un changement" }
|
|
252
|
-
],
|
|
392
|
+
options: hotfixOptions,
|
|
253
393
|
multiSelect: false
|
|
254
394
|
}]
|
|
255
395
|
})
|
|
256
|
-
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
**Normaliser le nom (meme fonction que feature):**
|
|
399
|
+
|
|
400
|
+
```bash
|
|
401
|
+
# Utiliser la meme fonction normalize_branch_name definie plus haut
|
|
402
|
+
RAW_NAME="$USER_INPUT"
|
|
403
|
+
HOTFIX_NAME=$(normalize_branch_name "$RAW_NAME" 50)
|
|
404
|
+
|
|
405
|
+
if [ "$RAW_NAME" != "$HOTFIX_NAME" ]; then
|
|
406
|
+
echo "Nom normalise: '$RAW_NAME' → '$HOTFIX_NAME'"
|
|
407
|
+
fi
|
|
408
|
+
|
|
409
|
+
BRANCH_NAME="hotfix/$HOTFIX_NAME"
|
|
410
|
+
echo "Branche: $BRANCH_NAME"
|
|
257
411
|
```
|
|
258
412
|
|
|
259
413
|
---
|
|
260
414
|
|
|
261
415
|
## ETAPE 5: Verifications pre-creation
|
|
262
416
|
|
|
417
|
+
> **OBLIGATOIRE:** Cette etape doit TOUJOURS etre executee, meme quand des arguments sont fournis via `$ARGUMENTS`. Ne JAMAIS sauter cette etape.
|
|
418
|
+
|
|
263
419
|
| Check | Commande | Action si echec |
|
|
264
420
|
|-------|----------|-----------------|
|
|
265
421
|
| Working tree clean | `git status --porcelain` | Proposer stash ou commit |
|
|
@@ -22,6 +22,39 @@ Tu es expert GitFlow. Finalise une branche apres merge de la PR.
|
|
|
22
22
|
|
|
23
23
|
---
|
|
24
24
|
|
|
25
|
+
## ETAPE 0: SYNCHRONISATION AVEC REMOTE
|
|
26
|
+
|
|
27
|
+
> **CRITIQUE:** Toujours synchroniser avec le remote avant toute opération de finish.
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
echo "Synchronisation avec remote..."
|
|
31
|
+
git fetch --all --quiet
|
|
32
|
+
|
|
33
|
+
# Vérifier l'état de synchronisation des branches principales
|
|
34
|
+
echo ""
|
|
35
|
+
echo "État des branches principales:"
|
|
36
|
+
|
|
37
|
+
# Vérifier develop
|
|
38
|
+
DEVELOP_BEHIND=$(git rev-list --count develop..origin/develop 2>/dev/null || echo "?")
|
|
39
|
+
DEVELOP_AHEAD=$(git rev-list --count origin/develop..develop 2>/dev/null || echo "?")
|
|
40
|
+
echo " develop: AHEAD=$DEVELOP_AHEAD, BEHIND=$DEVELOP_BEHIND"
|
|
41
|
+
|
|
42
|
+
# Vérifier main
|
|
43
|
+
MAIN_BEHIND=$(git rev-list --count main..origin/main 2>/dev/null || echo "?")
|
|
44
|
+
MAIN_AHEAD=$(git rev-list --count origin/main..main 2>/dev/null || echo "?")
|
|
45
|
+
echo " main: AHEAD=$MAIN_AHEAD, BEHIND=$MAIN_BEHIND"
|
|
46
|
+
|
|
47
|
+
# Avertissement si branches principales non synchronisées
|
|
48
|
+
if [ "$DEVELOP_BEHIND" != "0" ] && [ "$DEVELOP_BEHIND" != "?" ]; then
|
|
49
|
+
echo "⚠️ develop est en retard de $DEVELOP_BEHIND commit(s) - sera mis à jour automatiquement"
|
|
50
|
+
fi
|
|
51
|
+
if [ "$MAIN_BEHIND" != "0" ] && [ "$MAIN_BEHIND" != "?" ]; then
|
|
52
|
+
echo "⚠️ main est en retard de $MAIN_BEHIND commit(s) - sera mis à jour automatiquement"
|
|
53
|
+
fi
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
25
58
|
## ETAPE 1: SCAN PROACTIF (si pas d'argument)
|
|
26
59
|
|
|
27
60
|
> **COMPORTEMENT PROACTIF:** Si aucun argument fourni, scanner TOUTES les branches pour proposer celles qui sont pretes a finaliser.
|
|
@@ -29,7 +62,7 @@ Tu es expert GitFlow. Finalise une branche apres merge de la PR.
|
|
|
29
62
|
### 1.1 Scanner toutes les branches GitFlow
|
|
30
63
|
|
|
31
64
|
```bash
|
|
32
|
-
git fetch
|
|
65
|
+
# Note: git fetch déjà effectué dans ETAPE 0
|
|
33
66
|
|
|
34
67
|
# Lister toutes les branches feature/release/hotfix
|
|
35
68
|
FEATURES=$(git branch -r | grep 'origin/feature/' | sed 's|origin/||' | tr -d ' ')
|