From 7182d7af32bbbcf07f23f909a9fbec1923ae4995 Mon Sep 17 00:00:00 2001 From: Pierre Marx Date: Tue, 21 Oct 2025 15:08:17 -0400 Subject: [PATCH] =?UTF-8?q?docs:=20R=C3=A9organisation=20compl=C3=A8te=20d?= =?UTF-8?q?e=20dev.md=20pour=20meilleure=20lisibilit=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Ajout d'une table des matières avec liens d'ancrage - Résumé rapide des 8 phases en début de document - Organisation claire par phases numérotées (1 à 8) - Section 'Référence des commandes' regroupant : - Commandes npm - Commandes Git - Commandes tea (Gitea CLI) - Conventions de commits - Semantic Versioning - Amélioration de la mise en forme et de la hiérarchie - Suppression des redondances - Date de dernière mise à jour ajoutée --- .claude/commands/dev.md | 347 +++++++++++++++++++++++++++++----------- 1 file changed, 255 insertions(+), 92 deletions(-) diff --git a/.claude/commands/dev.md b/.claude/commands/dev.md index 7c47296..7ce7b88 100644 --- a/.claude/commands/dev.md +++ b/.claude/commands/dev.md @@ -1,6 +1,64 @@ -# Workflow complet de développement (de A à Z) +# Workflow de développement SimpleConnect -Suivre **systématiquement** ce workflow pour chaque nouvelle fonctionnalité ou correction de bug : +Guide complet de A à Z pour le développement et la publication de nouvelles versions. + +--- + +## 📑 Table des matières + +1. [Résumé rapide](#résumé-rapide) +2. [Phase 1 : Développement itératif](#phase-1--développement-itératif) +3. [Phase 2 : Préparation de la release](#phase-2--préparation-de-la-release) +4. [Phase 3 : Fusion dans main](#phase-3--fusion-dans-main) +5. [Phase 4 : Build des exécutables](#phase-4--build-des-exécutables) +6. [Phase 5 : Documentation](#phase-5--documentation) +7. [Phase 6 : Publication sur Gitea](#phase-6--publication-sur-gitea) +8. [Phase 7 : Déploiement](#phase-7--déploiement-optionnel) +9. [Phase 8 : Nettoyage](#phase-8--nettoyage-des-branches) +10. [Référence des commandes](#référence-des-commandes) + +--- + +## Résumé rapide + +``` +Phase 1 : Développement + 1. Créer branche feature + 2. Développer → Tester → Committer (répéter) + +Phase 2 : Release + 3. Mettre à jour changelog + 4. Bumper version package.json + 5. Commit de release + +Phase 3 : Fusion + 6. Merger dans main (--no-ff) + 7. Push vers origin + +Phase 4 : Build + 8. Build exécutables (macOS, Linux, Windows) + 9. Organiser dans dist/vX.X.X/ + +Phase 5 : Documentation + 10. Créer notes de release + 11. Commit + push docs + +Phase 6 : Publication + 12. Créer tag Git + 13. Push tag vers Gitea + 14. Créer release avec tea + 15. Vérifier assets + +Phase 7 : Déploiement (optionnel) + 16. Déployer sur serveur + +Phase 8 : Nettoyage + 17. Supprimer branches locales mergées + 18. Supprimer branches distantes mergées + 19. Prune références locales +``` + +--- ## Phase 1 : Développement itératif @@ -8,7 +66,7 @@ Suivre **systématiquement** ce workflow pour chaque nouvelle fonctionnalité ou **Une fonctionnalité = plusieurs petits commits atomiques** -Éviter de faire un gros commit avec toute la fonctionnalité. Préférer découper en petites étapes testables : +Découper le travail en petites étapes testables plutôt qu'un gros commit : ``` Exemple : Ajouter un bouton "Pause" avec confirmation @@ -24,18 +82,17 @@ git commit -m "feat: Ajouter bouton Pause avec modal et gestion IPBX" 5. docs: Documenter la fonctionnalité de pause ``` -### 1. Créer une branche feature +### Étape 1 : Créer une branche feature ```bash git checkout -b feature/nom-de-la-fonctionnalite ``` -### 2. Cycle itératif (répéter jusqu'à complétion de la fonctionnalité) +### Étape 2 : Cycle itératif -**Pour chaque petite modification :** +Répéter jusqu'à complétion de la fonctionnalité : #### a) Développer une petite partie - - Faire UNE modification logique à la fois - Ne pas chercher à tout finir d'un coup - Rester concentré sur une seule tâche @@ -52,18 +109,16 @@ npm run dev # Test en mode développement - Tester les cas limites - S'assurer qu'aucune régression n'a été introduite -#### c) Committer (commit atomique) +#### c) Committer Seulement après avoir testé avec succès : -- Préfixes : `feat:`, `fix:`, `refactor:`, `docs:`, `style:`, `test:`, `chore:` -- Un commit = une modification logique -- Messages clairs et descriptifs - ```bash git commit -m "feat: Ajouter le bouton Pause dans le header" ``` +**Préfixes de commit** : `feat:`, `fix:`, `refactor:`, `docs:`, `style:`, `test:`, `chore:` + **Pourquoi tester avant de committer ?** - Historique Git propre (chaque commit = code fonctionnel) - Rollback facile vers un état stable @@ -71,13 +126,11 @@ git commit -m "feat: Ajouter le bouton Pause dans le header" #### d) Continuer -Retour à l'étape **a)** pour la prochaine petite modification, jusqu'à ce que la fonctionnalité soit complète. +Retour à l'étape **a)** jusqu'à ce que la fonctionnalité soit complète. -### 3. Fonctionnalité terminée → Passer à la Phase 2 (Release) +### Exception : WIP commits -Une fois tous les commits de la fonctionnalité effectués, passer à la préparation de la release ci-dessous. - -**Exception - WIP commits** (travail en cours à sauvegarder) : +Pour sauvegarder un travail en cours : ```bash git commit -m "wip: Travail en cours sur la fonctionnalité X" @@ -89,21 +142,43 @@ git commit --amend -m "feat: Ajouter la fonctionnalité X" ## Phase 2 : Préparation de la release -### 4. Mettre à jour le changelog (`docs/changelog.md`) +### Étape 3 : Mettre à jour le changelog -- Obtenir la date : `date +%Y-%m-%d` -- Format : `## [X.X.X] - AAAA-MM-JJ` -- Catégories : **Ajouté**, **Modifié**, **Corrigé**, **Supprimé**, **Technique**, **Documentation** -- Ajouter en haut du fichier (au-dessus de la version précédente) +Fichier : `docs/changelog.md` -### 5. Bumper la version (`package.json`) +```bash +# Obtenir la date +date +%Y-%m-%d +``` +**Format** : +```markdown +## [X.X.X] - AAAA-MM-JJ + +### Ajouté +- Fonctionnalité 1 + +### Modifié +- Changement 1 + +### Corrigé +- Bug 1 +``` + +Catégories : **Ajouté**, **Modifié**, **Corrigé**, **Supprimé**, **Technique**, **Documentation** + +### Étape 4 : Bumper la version + +Fichier : `package.json` + +**Semantic Versioning** : - **PATCH** (x.x.+1) : Corrections, petits ajustements - **MINOR** (x.+1.0) : Nouvelles fonctionnalités compatibles - **MAJOR** (+1.0.0) : Changements majeurs incompatibles -- Modifier le champ `"version": "X.X.X"` -### 6. Commit de release +Modifier le champ `"version": "X.X.X"` + +### Étape 5 : Commit de release ```bash git add docs/changelog.md package.json @@ -115,22 +190,22 @@ git commit -m "release: Version X.X.X - Titre court - Bump version X.X.X" ``` -**Important** : Ne jamais mentionner Claude, Anthropic ou des adresses emails relatives à ces entités +**Important** : Ne jamais mentionner Claude, Anthropic ou des adresses emails relatives à ces entités. --- ## Phase 3 : Fusion dans main -### 7. Basculer sur main et fusionner +### Étape 6 : Merger dans main ```bash git checkout main git merge feature/nom-de-la-fonctionnalite --no-ff ``` -- `--no-ff` : Force un merge commit (historique propre et tracé) +**Option `--no-ff`** : Force un merge commit pour un historique propre et tracé -### 8. Push vers origin +### Étape 7 : Push vers origin ```bash git push origin main @@ -140,7 +215,7 @@ git push origin main ## Phase 4 : Build des exécutables -### 9. Build pour les plateformes nécessaires +### Étape 8 : Build pour les plateformes ```bash # macOS (si développement sur Mac) @@ -153,7 +228,7 @@ npm run build:linux-x64 npm run build:win ``` -### 10. Organiser les builds dans `dist/vX.X.X/` +### Étape 9 : Organiser les builds ```bash # Créer le dossier de version @@ -172,20 +247,22 @@ ls -lh dist/vX.X.X/ --- -## Phase 5 : Documentation finale +## Phase 5 : Documentation -### 11. Créer les notes de release (`releases/vX.X.X.md`) +### Étape 10 : Créer les notes de release -- Structure markdown avec sections : - - Titre et date - - Résumé des changements - - Nouveautés principales - - Corrections - - Fichiers disponibles - - Compatibilité - - Guide d'utilisation (si nécessaire) +Fichier : `releases/vX.X.X.md` -### 12. Commit et push de la documentation +**Structure markdown** : +- Titre et date +- Résumé des changements +- Nouveautés principales +- Corrections +- Fichiers disponibles +- Compatibilité +- Guide d'utilisation (si nécessaire) + +### Étape 11 : Commit et push de la documentation ```bash git add releases/vX.X.X.md @@ -197,7 +274,7 @@ git push origin main ## Phase 6 : Publication sur Gitea -### 13. Créer le tag Git +### Étape 12 : Créer le tag Git ```bash # Trouver le commit de release @@ -212,21 +289,21 @@ Description des principales fonctionnalités - Correction 1" ``` -### 14. Push du tag vers Gitea +### Étape 13 : Push du tag ```bash git push origin vX.X.X ``` -### 15. Créer la release sur Gitea avec l'outil `tea` +### Étape 14 : Créer la release avec `tea` -**Prérequis** : S'assurer que `tea` est configuré avec le login `simpleconnect` +**Prérequis** : `tea` configuré avec le login `simpleconnect` ```bash -# Vérifier la configuration tea +# Vérifier la configuration tea login list -# Créer la release avec tous les fichiers binaires +# Créer la release avec tous les fichiers tea release create \ --login simpleconnect \ --repo pierre/SimpleConnect-client-electron \ @@ -238,18 +315,18 @@ tea release create \ --asset dist/vX.X.X/SimpleConnect-X.X.X-arm64-mac.zip ``` -**Notes importantes** : -- L'option `--note-file` utilise le fichier markdown des notes de release -- On peut spécifier plusieurs `--asset` pour uploader tous les binaires en une fois -- Le code source (TAR.GZ et ZIP) est ajouté automatiquement par Gitea +**Notes** : +- `--note-file` utilise le fichier markdown des notes +- Multiple `--asset` pour uploader tous les binaires +- Code source (TAR.GZ et ZIP) ajouté automatiquement par Gitea -### 16. Vérifier la release sur Gitea +### Étape 15 : Vérifier la release ```bash # Lister toutes les releases tea release list --login simpleconnect --repo pierre/SimpleConnect-client-electron -# Vérifier les assets d'une release spécifique +# Vérifier les assets d'une release tea release assets --login simpleconnect --repo pierre/SimpleConnect-client-electron vX.X.X ``` @@ -259,10 +336,9 @@ tea release assets --login simpleconnect --repo pierre/SimpleConnect-client-elec - ✅ SimpleConnect-X.X.X-arm64-mac.zip (macOS) - ✅ Code source (TAR.GZ et ZIP automatiques) -### 17. Ajouter des assets manquants (si nécessaire) - -Si des fichiers ont été oubliés ou doivent être ajoutés après coup : +### Corrections éventuelles +**Ajouter des assets manquants** : ```bash tea release assets create \ --login simpleconnect \ @@ -271,8 +347,7 @@ tea release assets create \ dist/vX.X.X/fichier-supplementaire.ext ``` -### 18. Supprimer des assets en doublon (si nécessaire) - +**Supprimer des doublons** : ```bash tea release assets delete \ --login simpleconnect \ @@ -284,9 +359,9 @@ tea release assets delete \ --- -## Phase 7 : Déploiement sur serveur (optionnel) +## Phase 7 : Déploiement (optionnel) -### 19. Déployer sur le serveur de production +### Étape 16 : Déployer sur le serveur ```bash scp dist/vX.X.X/SimpleConnect-X.X.X.AppImage user@server:/path/to/app/ @@ -294,43 +369,103 @@ scp dist/vX.X.X/SimpleConnect-X.X.X.AppImage user@server:/path/to/app/ --- -## Résumé du workflow complet +## Phase 8 : Nettoyage des branches +Une fois la release publiée et déployée, nettoyer les branches mergées. + +### Étape 17 : Supprimer les branches locales + +```bash +# Vérifier les branches mergées +git branch --merged main + +# Supprimer automatiquement toutes les branches mergées +git branch --merged main | grep -v "^\*" | grep -v "main" | xargs -n 1 git branch -d + +# Ou manuellement +git branch -d feature/nom-de-la-fonctionnalite + +# Forcer si la branche a un remote (option -D) +git branch -D feature/nom-de-la-fonctionnalite ``` -1. git checkout -b feature/XXX -2. BOUCLE (jusqu'à fonctionnalité complète) : - a) Développer une petite partie - b) Tester (npm run dev) - c) Committer (git commit -m "...") - d) Continuer -3. Mettre à jour changelog -4. Bumper version package.json -5. Commit de release -6. Merger dans main (--no-ff) -7. Push -8. Build des exécutables -9. Organiser dist/vX.X.X/ -10. Notes de release -11. Commit + push docs -12. Créer tag Git -13. Push tag vers Gitea -14. Créer release sur Gitea avec tea -15. Vérifier assets sur Gitea -16. Déployer sur serveur (optionnel) + +**Pourquoi `-D` peut être nécessaire ?** +- Git refuse `-d` si la branche a encore un remote associé +- Même mergée dans main, Git veut s'assurer qu'elle est mergée dans origin/branche +- `-D` est sûr si on a vérifié le merge dans main + +### Étape 18 : Supprimer les branches distantes + +```bash +# Supprimer une ou plusieurs branches +git push origin --delete feature/nom-1 feature/nom-2 feature/nom-3 + +# Vérifier la suppression +git branch -a ``` +### Étape 19 : Nettoyer les références locales + +```bash +# Supprimer les références aux branches distantes supprimées +git remote prune origin + +# Ou avec fetch +git fetch --prune +``` + +**Résultat attendu** : Seules les branches `main` et celles en cours de travail restent. + --- -## Commandes `tea` utiles +## Référence des commandes + +### Commandes npm -### Gestion des logins ```bash -tea login list # Lister les logins configurés -tea login add # Ajouter un nouveau login -tea login default # Définir un login par défaut +npm start # Lance l'application en production +npm run dev # Mode développement avec DevTools +npm run build # Build pour toutes les plateformes +npm run build:win # Build Windows +npm run build:mac # Build macOS +npm run build:linux # Build Linux +npm run build:linux-x64 # Build Linux x64 +npm run build:linux-arm64 # Build Linux ARM64 ``` -### Gestion des releases +### Commandes Git + +```bash +# Branches +git checkout -b feature/XXX # Créer une branche +git branch --merged main # Lister branches mergées +git branch -d feature/XXX # Supprimer branche locale +git branch -D feature/XXX # Forcer suppression +git push origin --delete XXX # Supprimer branche distante + +# Tags +git tag -a vX.X.X -m "..." # Créer tag annoté +git push origin vX.X.X # Push tag +git tag -l # Lister tags + +# Merge +git merge feature/XXX --no-ff # Merge avec commit + +# Nettoyage +git remote prune origin # Nettoyer références +git fetch --prune # Fetch + nettoyage +``` + +### Commandes `tea` (Gitea CLI) + +#### Logins +```bash +tea login list # Lister logins configurés +tea login add # Ajouter un login +tea login default # Définir login par défaut +``` + +#### Releases ```bash tea release list --login simpleconnect --repo pierre/SimpleConnect-client-electron tea release create --help @@ -338,16 +473,44 @@ tea release edit vX.X.X --title "Nouveau titre" tea release delete vX.X.X --confirm ``` -### Gestion des assets +#### Assets ```bash tea release assets list vX.X.X tea release assets create vX.X.X fichier.ext tea release assets delete vX.X.X fichier.ext --confirm ``` -### Options globales +#### Options globales ```bash ---login simpleconnect # Utiliser le login 'simpleconnect' +--login simpleconnect # Utiliser le login 'simpleconnect' --repo pierre/SimpleConnect-client-electron # Spécifier le repository ---output json # Format de sortie (simple, table, json, yaml) +--output json # Format de sortie (json, yaml, table) ``` + +### Conventions de commits + +```bash +feat: # Nouvelle fonctionnalité +fix: # Correction de bug +refactor: # Refactoring +docs: # Documentation +style: # Formatage, style +test: # Tests +chore: # Maintenance, tâches diverses +release: # Commit de release +wip: # Work in progress (temporaire) +``` + +### Semantic Versioning + +``` +MAJOR.MINOR.PATCH + +MAJOR (X.0.0) # Changements incompatibles +MINOR (x.X.0) # Nouvelles fonctionnalités compatibles +PATCH (x.x.X) # Corrections de bugs +``` + +--- + +**Dernière mise à jour** : 2025-10-21