~bohwaz/blog/

Avec de vrais morceaux de 2.0 !

Getter : La mise à jour et l'installation simplifiée

Le plus chiant dans le développement d'un soft c'est les releases. Se taper tout le packaging c'est super relou quand même. Voilà pas encore la solution miracle mais ce qui me semble le plus proche de la solution ou on a rien à faire en tant que développeur. J'ai nommé la class Getter.

Imaginez, pour sortir une nouvelle version, vous n'avez qu'à modifier un fichier XML et faire un commit SVN et c'est tout. Voilà c'est Getter.

J'explique un peu le concept :

  • La class va chercher un fichier XML en ligne
  • Elle extrait le numéro de la version courante et la compare à la version que vous lui avez passée
  • Elle peut vous montrer les mises à jour qui vont êtres effectuées de manière incrémentale avec changelog, fichiers modifiés etc.
  • Elle peut faire la mise à jour de manière incrémentale par étape ou version par version
  • Une mise à jour peut supprimer des répertoires/fichiers de manière récursive, créer de nouveaux répertoires et importer des fichiers depuis votre site en http ou ftp

Voilà on peut faire un peu ce qu'on veut avec ça. Y'a même une fonction permettant de faire une installation initiale du logiciel. Et comme le fichier XML décrivant les mises à jour est très simple, il est facile de le mettre à jour lui-même ou même de faire un hook svn qui va le mettre à jour avec les commits.

Le code de la class est ici : http://svn.kd2.org/svn/misc/libs/getter/class.getter.php (attention c'est encore une version beta)

Et y'a un exemple et quelques trucs utiles ici http://svn.kd2.org/svn/misc/libs/getter/

Dans la suite de l'article la doc du fichier XML.

Exemple de fichier XML pour Getter

<getter>
   <currentVersion>0.2</currentVersion>
   <baseUrl>http://misc.svn/libs/svn-getter/test/</baseUrl>

   <install>
       <file action="mkdir">datas</file>
       <file action="get" source="helloworld.txt">scripts/helloworld.php</file>
       <file action="mkdir">scripts</file>
       <file action="get" source="index.txt">index.php</file>
   </install>

   <release>
       <version>0.2</version>
       <changelog>
           Hello world becomes hello you !
       </changelog>
       <file action="remove">scripts</file>
       <file action="get" source="index2.txt">index.php</file>
   </release>
</getter>

<currentVersion>

Dernière version disponible. La class ne récupère pas pour des raisons de performance l'intégralité des release pour déterminer la plus récente il faut donc noter ici la version la plus récente. Note : les versions doivent être un float ou un integer, enfin tout ce que PHP peut comparer avec le signe > (supérieur à). Ca peut donc être par exemple un numéro classique comme 0.5.7 ou 20070205.1 etc.

<baseUrl>

Indique le chemin http de base où Getter ira chercher les fichiers à télécharger.

<install>

Indique les fichiers à récupérer/créer pour une première installation (facultatif).

<file action="ACTION"[ source="SOURCE"]>DESTINATION</file>

Indique une action à effectuer. ACTION peut être mkdir (crée un répertoire), get (récupère un fichier et le copie localement) ou remove (non disponible dans <install>). SOURCE doit être indiquée pour l'action get. DESTINATION représente la destination relative dans l'installation locale. SOURCE peut être n'importe quel nom tant qu'il existe sur le site distant (genre ici on prends des .txt pour créer des .php).

<release>

Indique une release, vous avez besoin d'un bloc release par version.

<version>

Indique le numéro de version de la release.

<changelog>

Indique le changelog de la release. Peut être vide, mais pas absent.

Comment utiliser Getter ?

$getter = new Getter('http://site.tld/app/updates.xml', './');
if (!$getter->isUpdateNeeded('0.1.0')) die('Pas besoin update');
$getter->updateFromVersion('0.1.0');

Voilà c'est aussi simple.

Écrire un commentaire
(facultatif)
(facultatif)
(obligatoire)
     _                 _           
  __| | ___ _ __ _ __ (_) ___ _ __ 
 / _` |/ _ \ '__| '_ \| |/ _ \ '__|
| (_| |  __/ |  | | | | |  __/ |   
 \__,_|\___|_|  |_| |_|_|\___|_|   
                                   
(obligatoire)

Les adresses internet seront converties automatiquement.
Tags autorisés : <blockquote> <cite> <pre> <code> <var> <strong> <em> <del> <ins> <kbd> <samp> <abbr>