Automatise les mises à jour de version des plugins avec détection automatique du type de version
Mettre à jour automatiquement la version d'un ou plusieurs plugins avec détection automatique du type de version.
RÈGLE CRITIQUE : Chaque étape DOIT être trackée via TaskCreate/TaskUpdate.
in_progress au débutcompleted UNIQUEMENT quand l'étape est 100% terminéeINTERDICTION de marquer une tâche completed sans avoir :
🔒 AVANT DE MARQUER COMPLETED de l'étapeSi une sous-étape semble "non applicable" : tu DOIS quand même lire le fichier cible pour le vérifier. Ne JAMAIS supposer qu'une étape est inapplicable sans preuve.
OBLIGATOIRE : Utilise TaskCreate pour créer ces 6 tâches dans cet ordre exact :
TaskCreate #1: "Détecter les plugins modifiés"
- activeForm: "Detecting modified plugins"
- description: "git diff pour identifier plugins avec modifications"
TaskCreate #2: "Sélectionner les plugins à bumper"
- activeForm: "Selecting plugins to bump"
- description: "AskUserQuestion pour sélection utilisateur"
TaskCreate #3: "Mettre à jour fichiers du plugin"
- activeForm: "Updating plugin files"
- description: "plugin.json + CHANGELOG.md + README.md du plugin"
TaskCreate #4: "Mettre à jour fichiers du marketplace"
- activeForm: "Updating marketplace files"
- description: "README.md global + CHANGELOG.md global + marketplace.json + PR template"
TaskCreate #5: "Mettre à jour dépendances et documentation"
- activeForm: "Updating dependencies and docs"
- description: "DEPENDENCIES.json + rebuild VitePress (npm run build)"
TaskCreate #6: "Vérifier et afficher résumé"
- activeForm: "Verifying final result"
- description: "Lister tous les fichiers modifiés + prochaine étape"
Après création : Affiche TaskList pour confirmer que les 6 tâches existent.
TaskUpdate : Tâche #1 → in_progress
Exécute en parallèle :
git diff --name-only HEAD
git diff --staged --name-only
Traitement :
.claude/, fichiers à la racineTaskUpdate : Tâche #1 → completed
TaskUpdate : Tâche #2 → in_progress
Utilise AskUserQuestion :
{
"questions": [{
"question": "Quels plugins veux-tu bumper ?",
"header": "Plugins",
"multiSelect": true,
"options": [
{"label": "Tous les plugins modifiés (N plugins) (Recommended)", "description": "Bumper automatiquement tous"},
{"label": "{plugin} (N fichiers)", "description": "Version actuelle : X.Y.Z"}
]
}]
}
Vérification dépréciation : Pour chaque plugin sélectionné, lis {plugin}/.claude-plugin/plugin.json et vérifie si "deprecated": true est présent. Si oui, afficher un avertissement :
⚠️ {plugin} est déprécié (remplacé par : {replaced_by}). Continuer quand même ? (bump patch uniquement recommandé)
TaskUpdate : Tâche #2 → completed
TaskUpdate : Tâche #3 → in_progress
Pour CHAQUE plugin sélectionné, dans cet ordre :
git diff --staged --name-only --diff-filter=A | grep "^{plugin}/"
Règles :
agents/*.md) → MINORskills/*/) → MINORLis {plugin}/.claude-plugin/plugin.json et calcule :
1.2.3 → 1.2.41.2.3 → 1.3.0git diff {plugin}/
git diff --staged {plugin}/
Catégorise en : Added, Changed, Fixed, Removed
"version": "NOUVELLE_VERSION"
Ajoute en haut (après le titre) :
## [NOUVELLE_VERSION] - YYYY-MM-DD
### Added
- ...
### Changed
- ...
OBLIGATOIRE si MINOR : Lis {plugin}/README.md avec Read et mets à jour :
tree)Si le README ne contient pas de section pertinente, en ajouter une.
🔒 AVANT DE MARQUER COMPLETED - Vérifie ces points :
{plugin}/.claude-plugin/plugin.json → version mise à jour (Read pour vérifier){plugin}/CHANGELOG.md → nouvelle entrée en haut du fichier (Read pour vérifier){plugin}/README.md → nouvelles commandes/agents/structure documentés (Read pour vérifier)TaskUpdate : Tâche #3 → completed
TaskUpdate : Tâche #4 → in_progress
OBLIGATOIRE : Lis README.md avec Read. Trouve le tableau des plugins et mets à jour la ligne du plugin :
| 📝 **{Plugin}** | NOUVELLE_VERSION | Description mise à jour | [README](...) |
OBLIGATOIRE : Lis CHANGELOG.md avec Read. Vérifie si section du jour existe :
## [YYYY.MM.DD] - YYYY-MM-DD
Si non, crée-la après ## [Unreleased].
Ajoute :
### Plugins Updated
- **{plugin} vNOUVELLE_VERSION** - Résumé des changements
- Détail changement 1
- Détail changement 2
- Dépôt : [{plugin}/CHANGELOG.md]({plugin}/CHANGELOG.md)
OBLIGATOIRE : Lis .claude-plugin/marketplace.json avec Read. Si le plugin n'existe pas :
{
"name": "{plugin}",
"source": "./{plugin}",
"description": "..."
}
Si le plugin existe déjà, vérifier que sa description est à jour.
Vérifie la cohérence :
.env.claude (si applicable)Condition : Vérifie si les fichiers modifiés du plugin contiennent des références à .env.claude :
git diff {plugin}/ | grep -i "env\.claude\|MAIN_BRANCH\|WORKTREE_DIR\|REPO\|PROJECT"
Si des variables .env.claude sont ajoutées ou modifiées dans les skills :
docs/guide/env-claude.md avec ReadSi aucune référence .env.claude détectée : passer cette sous-étape.
Condition : Exécuter si {plugin}/.claude-plugin/plugin.json contient "deprecated": true.
5.6.1 Sidebar (docs/.vitepress/config.ts) :
Lis le fichier. La sidebar est définie dans la constante pluginsSidebar en haut du fichier. Trouve l'item correspondant au plugin (cherche link: '/plugins/{plugin}' dans la constante). Ajoute le champ badge si absent :
{ text: '{Plugin}', link: '/plugins/{plugin}', badge: { text: 'Déprécié', type: 'danger' } }
5.6.2 Page doc (docs/plugins/{plugin}.md) :
⚠️ Ne pas modifier manuellement ce fichier. Il est généré automatiquement par scripts/generate-docs.ts lors du rebuild VitePress (étape 6.2). Le badge <Badge type="danger" text="Déprécié" /> et le callout :::warning sont ajoutés automatiquement si deprecated: true est présent dans plugin.json.
Si aucun deprecated: true détecté : passer cette sous-étape.
Met à jour .github/PULL_REQUEST_TEMPLATE/default.md avec la liste des plugins :
plugin.json :find . -name "plugin.json" -path "*/.claude-plugin/*" | sed 's|^\./||' | sed 's|/.claude-plugin/plugin.json||' | grep -v "^templates/" | sort
## Plugin(s) concerné(s)
<!-- Coche les plugins impactés -->
- [ ] {plugin1}
- [ ] {plugin2}
...
## Plugin(s) concerné(s) et ## Checklist)🔒 AVANT DE MARQUER COMPLETED - Vérifie ces points :
README.md global → ligne du plugin mise à jour avec nouvelle version (Read pour vérifier)CHANGELOG.md global → entrée du jour avec résumé du plugin (Read pour vérifier).claude-plugin/marketplace.json → plugin présent avec description à jour (Read pour vérifier)docs/guide/env-claude.md → variables .env.claude à jour si applicable (Read pour vérifier)deprecated: true → docs/.vitepress/config.ts badge ajouté + docs/plugins/{plugin}.md callout ajouté (Read pour vérifier).github/PULL_REQUEST_TEMPLATE/default.md → liste plugins synchronisée (Read pour vérifier)TaskUpdate : Tâche #4 → completed
TaskUpdate : Tâche #5 → in_progress
Si {plugin}/DEPENDENCIES.json n'existe pas, scanner et créer :
{
"version": "1.0",
"critical": {},
"optional": {},
"packages": {"npm": {}}
}
OBLIGATOIRE - TOUJOURS EXÉCUTER, SANS EXCEPTION :
cd docs && npm run build
Vérifie que la commande s'exécute sans erreur. Si erreur, corriger avant de continuer.
git status --short docs/
Les fichiers docs/plugins/{plugin}.md et docs/commands/index.md doivent être modifiés.
Si nouveaux agents ajoutés, docs/agents/index.md doit aussi être modifié.
Si nouveaux hooks ajoutés, docs/hooks/index.md doit aussi être modifié.
🔒 AVANT DE MARQUER COMPLETED - Vérifie ces points :
{plugin}/DEPENDENCIES.json → existe (Read pour vérifier)cd docs && npm run build → exécuté avec succès (0 erreurs)git status --short docs/ → au moins docs/plugins/{plugin}.md et docs/commands/index.md modifiésdocs/agents/index.md aussi modifiédocs/hooks/index.md aussi modifiéTaskUpdate : Tâche #5 → completed
TaskUpdate : Tâche #6 → in_progress
Affiche le résumé complet :
✅ Plugin {plugin} : v{OLD} → v{NEW} ({TYPE})
Type : {PATCH|MINOR}
Raison : {description}
Fichiers modifiés :
✓ {plugin}/.claude-plugin/plugin.json
✓ {plugin}/CHANGELOG.md
✓ {plugin}/README.md (si applicable)
✓ README.md
✓ CHANGELOG.md
✓ .claude-plugin/marketplace.json (si nouveau)
✓ .github/PULL_REQUEST_TEMPLATE/default.md
✓ docs/plugins/{plugin}.md
✓ docs/commands/index.md
✓ docs/agents/index.md (si nouveaux agents)
✓ docs/hooks/index.md (si nouveaux hooks)
Prochaine étape : /git:commit
TaskUpdate : Tâche #6 → completed
OBLIGATOIRE : Avant de terminer, vérifie chaque fichier individuellement avec git diff --name-only et confirme que TOUS ces fichiers apparaissent dans la liste des modifiés :
{plugin}/.claude-plugin/plugin.json → version incrémentée{plugin}/CHANGELOG.md → nouvelle entrée datée du jour{plugin}/README.md → à jour si MINOR (nouveaux skills/agents documentés)README.md → tableau des plugins avec nouvelle versionCHANGELOG.md → entrée du jour avec résumé plugin.claude-plugin/marketplace.json → description à jour (si nouveau plugin)docs/guide/env-claude.md → variables .env.claude à jour (si nouvelles variables détectées).github/PULL_REQUEST_TEMPLATE/default.md → liste plugins synchroniséedocs/plugins/{plugin}.md → régénéré via VitePress (badge + callout dépréciation auto si deprecated: true)docs/commands/index.md → régénéré via VitePressdocs/agents/index.md → régénéré si nouveaux agentsdocs/hooks/index.md → régénéré si nouveaux hooksSi un fichier manque dans git diff --name-only, STOP : tu as oublié une étape.
{plugin}/.claude-plugin/plugin.json{plugin}/CHANGELOG.md{plugin}/README.mdREADME.mdCHANGELOG.md.claude-plugin/marketplace.json{plugin}/DEPENDENCIES.jsondocs/plugins/{plugin}.mddocs/commands/index.mddocs/guide/env-claude.md.github/PULL_REQUEST_TEMPLATE/default.md