Mise à jour automatique de Dotclear 2.0 et de ses plugins, à partir du SVN (update)
Je mets très souvent mon blog à jour à partir de la dernière version SVN de Dotclear 2.0.
Jusqu'à présent, je faisais un svn co sur ma machine locale, puis je virais les répertoires inutiles (rm -rf `find ./ -name .svn`) et enfin j'envoyais le tout sur mon ftp.
On obtient alors une version de Dotclear à jour et sans fichiers .svn. Le revers de la médaille étant le temps passé à faire la manip'. Je me suis donc fais un petit script pour automatiser tout ça :
- Mise à jours des sources de Dotclear à partir du SVN.
- Mise à jour et téléchargement de nouveaux plugins à partir du SVN de Dotclear.
- Mise à jour de la base de données (visite de la page d'admin).
- Vidage le cache.
Comme je suis un Geek très flémard et qui n'a peur de rien : j'ai mis le tout en tâche cron.
#!/bin/bash
###############################################################################
#
# dc-svn-co :
# Mise à jour d'une installation Dotclear 2.0 à partir des sources du SVN.
#
# Dépendances requises :
# - subversion
# - curl
#
# Attention : L'utilisation de ce script permet de mettre à jour votre instance
# de Dotclear à partir d'une version dite instable !
# Utiliser à vos risques et périls !
#
# Licence Dotclear : http://www.dotclear.net/license.html
#
# by Guillaume Kulakowski a.k.a LLaumgui <guillaume at llaumgui dot com>
# Version 2.0
#
###############################################################################
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not,
# - write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
# - See http://www.gnu.org/licenses/gpl.html
###############################################################################
######################################
# Variables :
# Chemin vers l'installation de Dotclear :
DC_CORE_PATH="/home/www.xxx.com/www"
# Chemin vers les plugins de Dotclear :
DC_PLUGIN_PATH="$DC_CORE_PATH/plugins"
# Chemin vers le cache :
DC_CACHE_PATH="$DC_CORE_PATH/cache"
# Liste des plugins à récupérer à partir du svn :
DC_PLUGIN_LIST="antiflood commentsWikibar dayMode emailNotification gallery related sitemaps spamplemousse2"
# Chemin vers votre administration (pour la requête de mise à jour) :
DC_URL="http://www.xxx.com/admin/"
SVN_DC_URL="https://svn.dotclear.net/2.0/trunk"
SVN_DC_PLUGIN_URL="https://svn.dotclear.net/2.0/plugins"
######################################
# # # # # #
# # # /!\ On touche plus /!\ # # #
# # # # # #
######################################
###
# Mise à jour à partir du SVN :
function svnCo() {
cd "$1"
svn co "$2" ./
}
###
# Mise à jour de la liste des plugins à partir du svn :
function svnPlugin () {
for plugin in $DC_PLUGIN_LIST; do
echo -e "\n\n############### $plugin ###############"
# Création du répertoire pour les nouveaux plugins :
if [ ! -d $DC_PLUGIN_PATH/$plugin ]; then
echo "Le répertoire $plugin n'existe pas !"
echo "Création du répertoire $plugin."
mkdir "$DC_PLUGIN_PATH/$plugin"
fi;
svnCo "$DC_PLUGIN_PATH/$plugin" "$SVN_DC_PLUGIN_URL/$plugin"
done;
}
###
# Mise à jour de la base par appel de l'url de l'admin :
function updateDB() {
curl $DC_URL
}
###
# On vide le cache
function cleanCache() {
rm -rf "$DC_CACHE_PATH/cbfeed"
rm -rf "$DC_CACHE_PATH/cbtpl"
}
echo "################################################################################"
echo "# #"
echo "# Mise à jour de Dotclear à partir des sources SVN #"
echo "# #"
echo "################################################################################"
svnCo "$DC_CORE_PATH" "$SVN_DC_URL"
echo -e "\n\n\n\n\n\n################################################################################"
echo "# #"
echo "# Mise à jour de la liste des plugins #"
echo "# #"
echo "################################################################################"
svnPlugin
echo -e "\n\n\n\n\n\n################################################################################"
echo "# #"
echo "# Opérations de mise à jours #"
echo "# #"
echo "################################################################################"
echo ""
echo -e "\n### Mise à jour de la base de données ###"
updateDB
echo -e "\n\n### Vidage du cache ###"
cleanCache
Je mets à disposition mon script (sous licence GPL) tout en précisant que son utilisation réfléchie ne pose pas de problème (pas plus qu'un checkout) mais qu'une mise à jour automatisée au moment où la révision Subversion plante (ça peut arriver), fait buger le site jusqu'à la mise à jour suivante...
Mise à jour : Métro-sexualisation du code pour un rapport par mail (crontab) plus lisible.





Commentaires
par ToF
Je comprends toujours rien à ce que tu dis ^^
par nfriedli
Et pourquoi pas un svn export plutôt qu'un rm + find ? Il ne faut jamais oublier de lire le man
par mika
bonjour.
en premier je trouve votre blog super interessent, meme si je ne comprend pas grand chose
j'ai un dotclear, mais je suis chez 1&1. pouvez vous me dire si on peut transformet votre script en php pour l'appeler avec http://www.webcron.org/
merci d'avance
par LLaumgui
Non, en général pas de php-cli ça va avec pas de commande shell comme svn
par Sacha
Astuce qui tue : make dist