vendeesign

wp-pack

"Packaging WordPress automatique. Activer quand : (1) Claude termine une modification ou un ajout de code (PHP, CSS, JS, HTML) dans un projet WordPress détecté à la racine (plugin avec 'Plugin Name:' ou thème avec 'Theme Name:' dans le header) — que ce soit via une commande codebloom OU une demande directe de l'utilisateur sans commande ; (2) l'utilisateur demande de packager, zipper, ou préparer pour distribution. Flow autonome : détecter → bumper version → zipper → vérifier. Ne pas activer si aucun fichier PHP/CSS/JS/HTML n'a été modifié ou ajouté dans la session, ni pour des projets non-WordPress."

vendeesign 3 1 Updated 2mo ago
GitHub

Install

npx skillscat add vendeesign/codebloom/wp-pack

Install via the SkillsCat registry.

SKILL.md

WP Pack — Packaging WordPress

Ce skill s'active :

  • Automatiquement quand Claude termine une modification de code (fichiers PHP, CSS, JS, HTML, templates) et qu'un projet WordPress est détecté — avec ou sans commande codebloom
  • Sur demande quand l'utilisateur demande de packager, zipper ou préparer pour distribution

Le zip est TOUJOURS généré automatiquement après une modification ou un ajout de code. Ne JAMAIS demander "Tu veux le zip ?" — le faire directement.

Étape 1 — Détection auto : Plugin ou Thème

1a. Type et fichier principal

Type Détection
Plugin Fichier PHP contenant Plugin Name: dans le header
Thème style.css contenant Theme Name: dans le header

Chercher d'abord à la racine. Si rien trouvé → chercher dans les sous-dossiers directs (1 niveau).

1b. Slug (CRITIQUE)

Le slug détermine le nom du dossier racine dans le zip. Un mauvais slug = deux plugins sur le site WordPress.

Déterminer le slug dans cet ordre de priorité :

  1. Text Domain: dans le header du fichier principal (source la plus fiable)
  2. Nom du fichier PHP principal sans extension (ex: adn-tag.phpadn-tag)
  3. Dernier recours : nom du dossier contenant le fichier principal

RÈGLE ABSOLUE : le slug dans le zip doit être identique à celui déjà installé sur le site WordPress. Ne JAMAIS inventer, transformer ou dériver un slug autrement (pas de conversion .-, pas de slugification du nom du plugin, etc.).

RÈGLE STRUCTURE : le dossier racine dans le zip doit toujours être {slug}/. Ne JAMAIS changer la structure interne du zip (pas de dossier racine renommé, pas de fichiers déplacés, pas de réorganisation). Un changement de structure = double plugin dans WordPress à l'activation.

1c. Structure

Structure Détection Dossier source
Racine Le fichier principal est à la racine du projet . (racine)
Sous-dossier Le fichier principal est dans un sous-dossier Le sous-dossier

Afficher avant de continuer :

Type : Plugin / Thème
Slug : {slug}
Source : {chemin du dossier source}

Étape 2 — Bump de version

Lire la version actuelle

Chercher la version dans le fichier principal détecté à l'étape 1.

Déterminer l'incrément

Source Bump Exemple
/feature, /todo ideas minor (0.X.0) 1.2.31.3.0
/fix, /quick, /clean, /todo go patch (0.0.X) 1.2.31.2.4
Demande directe de l'utilisateur demander patch / minor / major / custom
Breaking change explicite major (X.0.0) 1.2.32.0.0

Règles semver :

  • major (X.0.0) : remet minor et patch à 0
  • minor (0.X.0) : remet patch à 0
  • patch (0.0.X) : incrémente seulement

Quand le bump est auto-déterminé : afficher la version choisie et enchaîner directement.

Fichiers à mettre à jour

Mettre à jour seulement les fichiers qui existent :

Type Fichiers Champ
Plugin PHP principal Version: dans le header
Plugin readme.txt Stable tag:
Plugin PHP principal ou includes define('..._VERSION', '...') ou const VERSION = '...'
Thème style.css Version: dans le header
Thème functions.php define('..._VERSION', '...') ou const VERSION = '...'
Thème readme.txt (si existe) Stable tag:

Étape 3 — Supprimer les anciens zips

  • Supprimer {slug}.zip dans le dossier courant et le dossier parent (s'il existe)
  • Supprimer aussi les anciens zips versionnés ({slug}-*.zip)
  • Si aucun ancien zip → passer directement à l'étape 4

Étape 4 — Créer le zip

Utiliser le script wp-pack.js du plugin. Ne JAMAIS écrire de commande zip/PowerShell inline, et ne JAMAIS créer de script temporaire (build-zip.sh, package.ps1, etc.).

Commande

node "${CLAUDE_PLUGIN_ROOT}/hooks/wp-pack.js" --source "{chemin_dossier_source}" --slug "{slug}" --output "{chemin_output}/{slug}.zip"

Arguments :

  • --source : chemin absolu du dossier contenant le code plugin/thème (racine ou sous-dossier)
  • --slug : le slug détecté à l'étape 1b (détermine le nom du dossier racine dans le zip)
  • --output : chemin absolu du zip de sortie

Emplacement du zip :

  • Structure racine → le zip va dans le dossier source : {source}/{slug}.zip
  • Structure sous-dossier → le zip va dans le dossier parent (racine projet) : {parent}/{slug}.zip

Le script gère automatiquement :

  • Windows : PowerShell Compress-Archive via fichier .ps1 temporaire (pas de problème d'échappement)
  • macOS/Linux : commande zip
  • Renommage du dossier : si le dossier source a un nom différent du slug, le zip contient quand même {slug}/ comme racine
  • Exclusions : .git, node_modules, *.md, .claude/, plans/, *.zip, etc. (liste complète dans le script)
  • readme.txt est toujours inclus (ce n'est pas un .md)

Étape 5 — Vérification

Contenu du zip

Lister le contenu résumé et vérifier :

  • Présence du fichier principal (PHP header ou style.css)
  • Absence de fichiers dev (.git/, node_modules/, .env)
  • Dossier racine dans le zip = slug

Résumé

Type     : Plugin / Thème
Slug     : {slug}
Version  : {version} (depuis {ancienne-version})
Zip      : {slug}.zip ({taille})
Fichiers : {nombre} fichiers

Cas particuliers

vendor/ (Composer)

  • Si composer.json existe avec une section autoloadvendor/ est inclus automatiquement
  • Si vendor/ n'existe pas mais composer.json a un autoload → signaler : "vendor/ manquant — lancer composer install --no-dev"

Build step détecté

  • Si package.json contient des scripts build, compile, ou dist → signaler : "Build step détecté — vérifier que les assets sont à jour"

Traductions (languages/)

  • Toujours inclues si le dossier existe

Pas de readme.txt

  • Ne pas en créer
  • Signaler uniquement si plugin destiné à WordPress.org

Comportement

  • TOUJOURS zipper après une modification ou un ajout de code dans un projet WordPress — ne JAMAIS demander "Tu veux le zip ?", le faire directement
  • Utiliser wp-pack.js — ne JAMAIS écrire de commandes zip/PowerShell inline, ne JAMAIS créer de scripts (build-zip.sh, package.ps1, etc.)
  • Auto-bumper la version selon la commande source (minor pour feature, patch pour fix/quick/clean)
  • Re-zip sans bump quand appelé depuis /push — sauter l'étape 2, exécuter 3→5
  • Enchaîner sans interruption : suppression → zip → vérification
  • Signaler les anomalies (vendor manquant, build step, taille > 10 MB) sans bloquer
  • Ne pas modifier la structure du projet
  • Ne pas créer de readme.txt, LICENSE, ou autres fichiers manquants