Finalement, vu ma feignasse attitude, j’ai opté pour un unique utilitaire situé dans dotclear/build-tools/
, ce qui me simplifie largement la vie.
Le code d’icelui est celui-ci :
#!/bin/sh
# Usage: build-module.sh [theme]
# The local directory of module must be a git repo and version will be extracted from its tags
# The module installable archive will be created inside the current directory (module root)
#
# Examples:
# (Assuming that the current path is the dotclear local repo root)
#
# Plugin module, inside plugins folder:
# $ cd plugins/my-plugin
# $ ../build-tools/build-module.sh
#
# Theme module, inside themes folder:
# $ cd themes/my-theme
# $ ../build-tools/build-module.sh theme
# Module type
MOD_TYPE="plugin"
# Default module version
DEF_VERSION="0.1"
# Path for JS minifier (1st argument is the js file to minify)
DIRECTORY=$(dirname "$0")
MIN_JS="$DIRECTORY/min-js.php"
# Check optionnal 1st parameter (module type)
if [ "$1" = "theme" ]; then
MOD_TYPE="theme"
fi
# Find module name
MOD_NAME=$(basename "$PWD")
[ -z "$MOD_NAME" ] && { echo "Unable to find module name!" ; exit 1; }
# Copy all files to tmp dir
if [ -d "$MOD_NAME" ]; then
rm -rf ./"$MOD_NAME"
fi
mkdir ./"$MOD_NAME"
rsync --exclude="$MOD_NAME" --exclude="mkdocs" --exclude="build.sh" --exclude=".git*" --exclude=".DS_Store" --exclude="*.zip" --exclude="*.map" --exclude="*.rb" --exclude="sass" --exclude="scss" --exclude=".sass*" --exclude="scripts" -a . ./"$MOD_NAME"
# Pack Javascript files
if [ -f "$MIN_JS" ]; then
find ./"$MOD_NAME" -name '*.js' -exec "$MIN_JS" \{\} \;
fi
# Find last version (if any)
CUR_VERSION=$(git tag -l | sort -r -V | grep -E "[0-9]" | head -n 1)
if [ -z "$CUR_VERSION" ]; then
CUR_VERSION=$DEF_VERSION
fi
# Make installable archive
if [ -f $MOD_TYPE-"$MOD_NAME"-$CUR_VERSION.zip ]; then
rm $MOD_TYPE-"$MOD_NAME"-$CUR_VERSION.zip
fi
zip -q -r $MOD_TYPE-"$MOD_NAME"-$CUR_VERSION.zip ./"$MOD_NAME"/
# Cleanup
rm -rf ./"$MOD_NAME"
# Final output
echo "$MOD_TYPE-$MOD_NAME-$CUR_VERSION.zip ready!"
La question qui se pose maintenant est la suivante : dois-je l’inclure dans le dépôt officiel de Dotclear ou c’est trop spécifique ?
Sachant que ça implique que le module à partir duquel on lance la fabrication de l’archive doit être un dépôt Git local (histoire de retrouver sa version).
Pour construire une archive d’un plugin, il faut se positionner à la racine du plugin en question et lancer la commande dc2/build-tools/build-module.sh, l’archive sera créée dans le dossier du plugin.
Pour un thème, la commande est identique à la différence qu’il faut rajouter theme : dc2/build-tools/build-module.sh theme.
Dit autrement : « Vous en auriez l’usage ? »
1 De Nicolas -
Pour l’emplacement du script je le mettrais sur le dépôt de dotclear. Dans un répertoire tools que tu n’ajoutes pas dans l’archive distribuée. Tu peux y stocker d’autres outils utiles : récupération des chaînes non traduites, …
2 De Franck -
Justement, le répertoire build-tools n’est pas distribué.
3 De Da Scritch -
Avoir des commandes shell m’intéressera toujours, notamment pour avoir un backup régulier des bases et des répertoires publics
Créer des thèmes ou des addons, je le fait régulièrement. Donc, oui.
4 De Franck -
J’ai commité ça hier sur nos dépôts, y compris Github et Bitbucket (qui ne sera bientôt plus officiel d’ailleurs).