Toujours en train de faire un peu le ménage du côté de mes dépôts, j’ai commencé ce matin à faire un script de build pour mes plugins et thèmes.
Ça ressemble à ça :
#!/bin/sh
# ---- should be modified if necessary ----
# Module type
MOD_TYPE="plugin"
# Default module version
DEF_VERSION="0.1"
# Path for JS minifier (1st argument is the js file to minify)
MIN_JS="../../git-dc/build-tools/min-js.php"
# ---- nothing to modify below ----
# 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 [ -z "$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!"
Quelques trucs à modifier en début, entre autre le type de module, plugin ou theme, et éventuellement le chemin d’accès au « minifier » de javascript, rien de plus, le reste est a priori générique et produit une archive zip installable dans le même répertoire, en considérant que c’est git qui est utilisé pour gérer le dépôt local.
Mon hésitation est la suivante :
- Dois-je dupliquer ce script dans chacun de mes répertoires de plugin et de thème, c’est à dire pas loin de 80, ce qui compliquerait la maintenance mais rendrait la fabrication d’une archive indépendante (ou quasi sachant qu’on peut tout à fait zapper la minification) ?
- Ou bien est-il plus intéressant de modifier ce script légèrement et de le mettre dans le répertoire build-tools de Dotclear, ce qui impliquerait d’avoir une version de développement de Dotclear (récupérée à partir d’un dépôt) mais qui simplifierait grandement la maintenance du script de fabrication ?
1 De Nicolas -
Je n’ai pas autant de dépôt que toi mais mon processus de fabrication est générique et je peux presque me contenter de le déplacer d’un dépôt à l’autre.
Par exemple pour le plugin eventHandler
En revanche, si tu n’utilises pas d’outils trop spécifiques, tu dois pouvoir faire fabriquer l’archive par github.
2 De Franck -
Intéressant ton make Nicolas, et je comprends que tu gères ça dépôt par dépôt, soit ma 1re solution.
3 De Franck -
Par contre je n’ai vu nulle part sur Github des outils de build ! C’est où ?
4 De Biou -
Il y a les github actions, mais je n’ai pas encore essayé:
https://github.com/features/actions
Sinon github peut aussi simplement appeler une url “webhook” quand un push est fait.
5 De Franck -
Ah oui, c’est en beta pour l’instant, je vais regarder…
Côté webhook, il faut un truc qui puisse être appelé en face et j’ai la flemme :-)
6 De Franck -
Tiens, autre question : est-ce que je reste avec un script bash ou est-ce qu’il vaut mieux basculer sur un MakeFile ?
7 De Nicolas -
Pour le choix de l’outil (Makefile, script bash,…) je dirais que ça dépend avec lequel tu te sens le plus à l’aise.
Il y a quelques subtilités pénibles à appréhender pour les Makefiles mais une fois passée cette étape tu bénéficies de la puissance du truc : ne pas refabriquer quelque chose si rien n’a changé. Par exemple si la tâche de minification est longue, elle n’est déclenchée que si un fichier js ou css (ou autre) est plus récent que le fichier généré. Un exemple pour la fabrication de mes fichiers js et css :
https://github.com/nikrou/phyxo/blo…
8 De Franck -
Ok Nicolas
Cela dit, dans mon cas, je ne fais pas de build tous les jours, c’est plutôt quelques uns par an, et encore, donc je ne suis pas tributaire d’une « longueur » de traitement.