@atlashub/smartstack-cli 1.9.0 → 1.10.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/package.json +1 -1
- package/templates/commands/gitflow/1-init.md +166 -3
- package/templates/commands/gitflow/10-start.md +158 -14
- 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:
|
|
@@ -148,22 +148,132 @@ AskUserQuestion({
|
|
|
148
148
|
|
|
149
149
|
### Si FEATURE selectionne:
|
|
150
150
|
|
|
151
|
+
**Lire la configuration de langue:**
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
# ═══════════════════════════════════════════════════════════════
|
|
155
|
+
# CONFIGURATION DE LANGUE
|
|
156
|
+
# ═══════════════════════════════════════════════════════════════
|
|
157
|
+
CONFIG_FILE=".claude/gitflow/config.json"
|
|
158
|
+
LANG_CODE="en"
|
|
159
|
+
if [ -f "$CONFIG_FILE" ]; then
|
|
160
|
+
LANG_CODE=$(grep -oP '"code":\s*"\K[^"]+' "$CONFIG_FILE" 2>/dev/null | head -1)
|
|
161
|
+
LANG_CODE=${LANG_CODE:-en}
|
|
162
|
+
fi
|
|
163
|
+
echo "Langue configuree: $LANG_CODE"
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**Demander la description selon la langue configuree:**
|
|
167
|
+
|
|
168
|
+
> **NOTE:** Le prefix `feature/` reste TOUJOURS en anglais.
|
|
169
|
+
> Seule la partie descriptive (apres `feature/`) utilise la langue configuree.
|
|
170
|
+
|
|
151
171
|
```javascript
|
|
172
|
+
// Lire la config de langue
|
|
173
|
+
const langConfig = readConfig()?.language || { code: "en" }
|
|
174
|
+
const isEnglish = langConfig.code === "en"
|
|
175
|
+
|
|
176
|
+
// Suggestions de verbes d'action selon la langue
|
|
177
|
+
// Le prefix de branche "feature/" ne change PAS
|
|
178
|
+
const featureOptions = isEnglish ? [
|
|
179
|
+
{ label: "add-", description: "Add a new feature → feature/add-..." },
|
|
180
|
+
{ label: "update-", description: "Update existing → feature/update-..." },
|
|
181
|
+
{ label: "fix-", description: "Fix a bug → feature/fix-..." },
|
|
182
|
+
{ label: "refactor-", description: "Refactor code → feature/refactor-..." },
|
|
183
|
+
{ label: "improve-", description: "Improve perf/UX → feature/improve-..." }
|
|
184
|
+
] : [
|
|
185
|
+
{ label: "ajouter-", description: "Nouvelle fonctionnalite → feature/ajouter-..." },
|
|
186
|
+
{ label: "modifier-", description: "Modifier existant → feature/modifier-..." },
|
|
187
|
+
{ label: "corriger-", description: "Corriger un bug → feature/corriger-..." },
|
|
188
|
+
{ label: "refactorer-", description: "Refactorer du code → feature/refactorer-..." },
|
|
189
|
+
{ label: "ameliorer-", description: "Ameliorer perf/UX → feature/ameliorer-..." }
|
|
190
|
+
]
|
|
191
|
+
|
|
152
192
|
AskUserQuestion({
|
|
153
193
|
questions: [{
|
|
154
|
-
question:
|
|
194
|
+
question: isEnglish
|
|
195
|
+
? "Describe the feature (branch will be feature/your-description)"
|
|
196
|
+
: "Decrivez la feature (branche sera feature/votre-description)",
|
|
155
197
|
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
|
-
],
|
|
198
|
+
options: featureOptions,
|
|
161
199
|
multiSelect: false
|
|
162
200
|
}]
|
|
163
201
|
})
|
|
164
|
-
//
|
|
202
|
+
// L'utilisateur complete via "Other" pour le nom complet
|
|
165
203
|
```
|
|
166
204
|
|
|
205
|
+
**Normaliser le nom saisi:**
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
# ═══════════════════════════════════════════════════════════════
|
|
209
|
+
# FONCTION DE NORMALISATION DES NOMS DE BRANCHES
|
|
210
|
+
# ═══════════════════════════════════════════════════════════════
|
|
211
|
+
normalize_branch_name() {
|
|
212
|
+
local input="$1"
|
|
213
|
+
local max_length="${2:-50}"
|
|
214
|
+
|
|
215
|
+
# 1. Convertir en minuscules
|
|
216
|
+
local result=$(echo "$input" | tr '[:upper:]' '[:lower:]')
|
|
217
|
+
|
|
218
|
+
# 2. Supprimer les accents (francais et autres)
|
|
219
|
+
result=$(echo "$result" | sed 'y/àâäéèêëïîôùûüçœæÀÂÄÉÈÊËÏÎÔÙÛÜÇŒÆ/aaaeeeeiioouucoaAAaEeeeIIOOuucoa/')
|
|
220
|
+
|
|
221
|
+
# 3. Remplacer espaces, underscores, apostrophes par des tirets
|
|
222
|
+
result=$(echo "$result" | sed "s/[ _']/-/g")
|
|
223
|
+
|
|
224
|
+
# 4. Supprimer les caracteres non autorises
|
|
225
|
+
result=$(echo "$result" | sed 's/[^a-z0-9-]//g')
|
|
226
|
+
|
|
227
|
+
# 5. Supprimer les tirets multiples
|
|
228
|
+
result=$(echo "$result" | sed 's/--*/-/g')
|
|
229
|
+
|
|
230
|
+
# 6. Supprimer les tirets en debut/fin
|
|
231
|
+
result=$(echo "$result" | sed 's/^-//;s/-$//')
|
|
232
|
+
|
|
233
|
+
# 7. Tronquer a la longueur max
|
|
234
|
+
result=$(echo "$result" | cut -c1-$max_length)
|
|
235
|
+
|
|
236
|
+
# 8. Supprimer le tiret final apres troncature
|
|
237
|
+
result=$(echo "$result" | sed 's/-$//')
|
|
238
|
+
|
|
239
|
+
echo "$result"
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
# Normaliser le nom fourni par l'utilisateur
|
|
243
|
+
RAW_NAME="$USER_INPUT"
|
|
244
|
+
FEATURE_NAME=$(normalize_branch_name "$RAW_NAME" 50)
|
|
245
|
+
|
|
246
|
+
# Afficher si normalisation appliquee
|
|
247
|
+
if [ "$RAW_NAME" != "$FEATURE_NAME" ]; then
|
|
248
|
+
echo ""
|
|
249
|
+
echo "┌──────────────────────────────────────────────────────────────────────────────┐"
|
|
250
|
+
echo "│ ℹ️ NOM NORMALISE │"
|
|
251
|
+
echo "├──────────────────────────────────────────────────────────────────────────────┤"
|
|
252
|
+
echo "│ Saisi: $RAW_NAME"
|
|
253
|
+
echo "│ Normalise: $FEATURE_NAME"
|
|
254
|
+
echo "├──────────────────────────────────────────────────────────────────────────────┤"
|
|
255
|
+
echo "│ Raisons possibles: │"
|
|
256
|
+
echo "│ - Accents supprimes (e→e, a→a) │"
|
|
257
|
+
echo "│ - Espaces remplaces par tirets │"
|
|
258
|
+
echo "│ - Caracteres speciaux supprimes │"
|
|
259
|
+
echo "│ - Majuscules converties en minuscules │"
|
|
260
|
+
echo "└──────────────────────────────────────────────────────────────────────────────┘"
|
|
261
|
+
fi
|
|
262
|
+
|
|
263
|
+
BRANCH_NAME="feature/$FEATURE_NAME"
|
|
264
|
+
echo "Branche: $BRANCH_NAME"
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
**Exemples de normalisation:**
|
|
268
|
+
|
|
269
|
+
| Entree utilisateur | Resultat normalise |
|
|
270
|
+
|--------------------|-------------------|
|
|
271
|
+
| "Ajouter l'authentification" | `ajouter-lauthentification` |
|
|
272
|
+
| "Add User Auth !!" | `add-user-auth` |
|
|
273
|
+
| "Améliorer_Performance_API" | `ameliorer-performance-api` |
|
|
274
|
+
| "fix: Bug dans le login" | `fix-bug-dans-le-login` |
|
|
275
|
+
| "FEATURE majuscules" | `feature-majuscules` |
|
|
276
|
+
|
|
167
277
|
### Si RELEASE selectionne:
|
|
168
278
|
|
|
169
279
|
**Etape A: Verifier l'etat de main**
|
|
@@ -240,20 +350,54 @@ AskUserQuestion({
|
|
|
240
350
|
**⚠️ NOTE VERSIONING:** La version sera automatiquement incrementee (PATCH) lors du `/gitflow:11-finish`.
|
|
241
351
|
Exemple: `1.7.1` → `1.7.2`. Pas besoin de faire `npm version patch` manuellement.
|
|
242
352
|
|
|
353
|
+
**Demander la description selon la langue configuree:**
|
|
354
|
+
|
|
355
|
+
> **NOTE:** Le prefix `hotfix/` reste TOUJOURS en anglais.
|
|
356
|
+
> Seule la partie descriptive utilise la langue configuree.
|
|
357
|
+
|
|
243
358
|
```javascript
|
|
359
|
+
// Lire la config de langue
|
|
360
|
+
const langConfig = readConfig()?.language || { code: "en" }
|
|
361
|
+
const isEnglish = langConfig.code === "en"
|
|
362
|
+
|
|
363
|
+
// Suggestions selon la langue (prefix hotfix/ ne change pas)
|
|
364
|
+
const hotfixOptions = isEnglish ? [
|
|
365
|
+
{ label: "fix-", description: "Bug fix → hotfix/fix-..." },
|
|
366
|
+
{ label: "security-", description: "Security fix → hotfix/security-..." },
|
|
367
|
+
{ label: "revert-", description: "Revert a change → hotfix/revert-..." },
|
|
368
|
+
{ label: "patch-", description: "Quick patch → hotfix/patch-..." }
|
|
369
|
+
] : [
|
|
370
|
+
{ label: "corriger-", description: "Correction bug → hotfix/corriger-..." },
|
|
371
|
+
{ label: "securite-", description: "Correction securite → hotfix/securite-..." },
|
|
372
|
+
{ label: "annuler-", description: "Annuler changement → hotfix/annuler-..." },
|
|
373
|
+
{ label: "patch-", description: "Correctif rapide → hotfix/patch-..." }
|
|
374
|
+
]
|
|
375
|
+
|
|
244
376
|
AskUserQuestion({
|
|
245
377
|
questions: [{
|
|
246
|
-
question:
|
|
378
|
+
question: isEnglish
|
|
379
|
+
? "Describe the hotfix (branch will be hotfix/your-description)"
|
|
380
|
+
: "Decrivez le hotfix (branche sera hotfix/votre-description)",
|
|
247
381
|
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
|
-
],
|
|
382
|
+
options: hotfixOptions,
|
|
253
383
|
multiSelect: false
|
|
254
384
|
}]
|
|
255
385
|
})
|
|
256
|
-
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
**Normaliser le nom (meme fonction que feature):**
|
|
389
|
+
|
|
390
|
+
```bash
|
|
391
|
+
# Utiliser la meme fonction normalize_branch_name definie plus haut
|
|
392
|
+
RAW_NAME="$USER_INPUT"
|
|
393
|
+
HOTFIX_NAME=$(normalize_branch_name "$RAW_NAME" 50)
|
|
394
|
+
|
|
395
|
+
if [ "$RAW_NAME" != "$HOTFIX_NAME" ]; then
|
|
396
|
+
echo "Nom normalise: '$RAW_NAME' → '$HOTFIX_NAME'"
|
|
397
|
+
fi
|
|
398
|
+
|
|
399
|
+
BRANCH_NAME="hotfix/$HOTFIX_NAME"
|
|
400
|
+
echo "Branche: $BRANCH_NAME"
|
|
257
401
|
```
|
|
258
402
|
|
|
259
403
|
---
|
|
@@ -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 ' ')
|