20/01/2010

Phing 2.4 : quoi de neuf ?

Author: Romain Dehaudt, Head of Revenue & Operations

Phing est un projet Open Source PHP très inspiré de Apache Ant.

Le principe de fonctionnement est assez simple. Un fichier XML décrit une série d’actions et une ligne de commande permet de déclencher ces actions. Vous pouvez faire n’importe quoi avec. Je l’utilise beaucoup en remplacement des scripts Shell.

La nouvelle version Phing (2.4.0) est sortie le 17 janvier derniers elle recèle pas mal de nouvelle fonctionnalité.

Au niveau des « Core task » une seule balise fait son apparition. Il s’agit de « ImportTask ».
Cela importe d’un autre fichier  de build dans le fichier courant. En fait cela revient à faire un copier-coller dans le fichier importé.>

<import file=“path/to/build.xml”/>

Au niveau des « Optional Tasks » de nombreuses fonctionnalités ont été rajoutées.

ExportPropertiesTask

Exporte toutes les propriétés définies dans un fichier.

<exportproperties targetfile=“output.props” />

FileHashTask

Calcule soit le MD5 soit le SHA1 ou la valeur d’un fichier et le stocke comme une chaîne hexadécimale dans une propriété. C’est très pratique pour faire une empreinte de fichier.

<filehash file=“${builddir}/${tarball}.tar.${compression}” />

FileSizeTask

Stocke la taille d’un fichier spécifié dans une propriété. La taille du fichier est retournée en octets.

<filesize file=“${builddir}/${tarball}.tar.${compression}” />
<php expression=“floor(${filesize}/1024)” returnProperty=“ksize” />
<echo msg=“Filesize is: ${ksize} kB”/>

JsMinTask

Cette tache appel JSMin pour minifier les fichiers JavaScript. JSMin est livré avec Phing et n’a pas besoin d’être installé séparément.

<jsMin targetDir=“docroot/script/minified” failOnError=“false”>
<fileset dir=“docroot/script”>
<include name=“**/*.js”/>
</fileset>
</jsMin>

PharPackageTask

Cette tâche permet de créer des packages Phar. L’extension Phar est intégrée dans PHP 5.3.

<pharpackage
destfile=“./build/package.phar”
basedir=“./”>
<fileset dir=“./classes”>
<include name=“**/**” />
</fileset>
</pharpackage>

PhkPackageTask

Cette tâche permet de créer des packages PHK.

<phkpackage
phkcreatorpath=“/path/to/PHK_Creator.phk”
inputdirectory=“src”
outputfile=“build/sample-project.phk”
compress=“gzip”
strip=“true”
name=“Sample Project”
webrunscript=“index.php”>
<webaccess>
<path>/</path>
</webaccess>
</phkpackage>

PhpCpdTask

Cette tâche s’exécute phpCpd, un detecteur de Copier / Coller Detector (CPD) pour PHP.
Phpcpd est développé par Sebastian Bergmann qui est entre autre de développeur de PHPUnit.

<phpcpd haltonerror=“false”>
<fileset dir=“${builddir}” id=“filestocpd”>
<include name=“apps/**/*.php” />
</fileset>
<formatter type=“pmd” outfile=“reports/pmd-cpd.xml”/>
</phpcpd>

SvnCommitTask

Une fonctionnalité qui manquait cruellement, pouvoir faire des commits directement depuis une task.

<svncommit
workingcopy=“/home/joe/dev/project”
message=“Updated documentation, fixed typos” />

VersionTask

Permet de gérer la version de l’application avec 3 chiffres. Major.Minor.Bugfix (e.g. 1.3.2)

<version releasetype=“Major” file=“version.txt” property=“version.number”/>

XmlPropertyTask

Permet de charger des propriétés depuis un fichier XML.

<xmlproperty file=“somefile.xml”/>

A première vue Phing 2.4 offre des petits plus bien agréables  qui facilitent encore un peu plus la création de scripts. Il rajoute aussi des outils à sa collection (Jsmin, phpcpd,…).
Vivement la 2.5 avec encore plus de choses.

gallery image