alexis-j
10/4/2012 - 8:32 PM

Php_SF2_Build-For-Jenkins

Php_SF2_Build-For-Jenkins

<?xml version="1.0" encoding="UTF-8"?>
<project name="NosBelIdees" basedir="." default="build:main">
  
    <!-- ****************** -->
    <!-- Project properties -->
    <!-- ****************** -->

    <property name="dir.app" value="${project.basedir}/app" />
    <property name="dir.src" value="${project.basedir}/src" />
    <property name="dir.bin" value="${project.basedir}/bin" />
    <property name="dir.build" value="${project.basedir}/build" />
    <property name="dir.docs" value="${dir.build}/docs" />
    <property name="dir.browser" value="${dir.build}/browser" />
    <property name="dir.reports" value="${dir.build}/logs" />
    <property name="dir.reports.pdepend" value="${dir.reports}/pdepend" />
    <property name="dir.reports.coverage" value="${dir.reports}/coverage" />
    <property name="dir.symfony.config" value="${project.basedir}/../sfConfigs" />

    <!-- Filesets -->
    <fileset id="sourcecode" dir="${dir.src}">
        <include name="**/*.php" />
    </fileset>

    <!-- *********** -->
    <!-- Main Target -->
    <!-- *********** -->

    <target name="build:main"
          depends="build:clean, build:prepare, build:vendors, build:test, build:check, build:phpdoc, build:browser"
          description="Run all test and build everything" />

    <!-- ******************* -->
    <!-- First level targets -->
    <!-- ******************* -->

    <!-- Project build clean -->
    <target name="build:clean" description="Clean up build directories.">
        <echo msg="Cleaning build directories ..." />
        <delete dir="${dir.build}" verbose="true" />
        <delete file="${project.basedir}/composer.phar"/>
        <delete file="${dir.app}/config/parameters.yml"/>
    </target>

    <!-- Project build prepare -->
    <target name="build:prepare" description="Create build directories.">
        <echo msg="Creating build directories ..." />
        <mkdir dir="${dir.build}" />
        <mkdir dir="${dir.docs}" />
        <mkdir dir="${dir.browser}" />
        <mkdir dir="${dir.reports}" />
        <mkdir dir="${dir.reports.coverage}" />
        <mkdir dir="${dir.reports.pdepend}" />
        <copy file="${dir.symfony.config}/${phing.project.name}" tofile="app/config/parameters.yml" overwrite="true"/>
    </target>

    <!-- Dependency Management -->
    <target name="build:vendors"
          depends="composer:get, composer:update" 
          description="Dependency Management" />

    <!-- Test target -->
    <target name="build:test"
          depends="test:unit"
          description="Executes all tests.." />

    <!-- Check target -->
    <target name="build:check"
          depends="check:cs, check:cpd, check:depend, check:md"
          description="Analyzes app code." />

    <!-- PHP Code Browser -->
    <target name="build:browser" description="Generating code browser..."> 
        <exec command="phpcb
            --log ${dir.reports} 
            --source ${project.basedir}/src 
            --output ${dir.browser}" />
    </target>

    <!-- PHP Documentor -->
    <target name="build:phpdoc" description="Generate API documentation."> 
        <echo msg="Generating API documentation with PHPDoc..." />
        <exec command="phpdoc -d ${dir.src} -t ${dir.docs} --template responsive --title ${phing.project.name}" />
    </target>


    <!-- ******************** -->
    <!-- Second level targets -->
    <!-- ******************** -->

    <!-- Get Composer -->
    <target name="composer:get" description="Get composer">
        <echo msg="Get composer.phar ..." />
        <exec executable="wget">
          <arg value="-nc" />
          <arg value="http://getcomposer.org/composer.phar" />
        </exec>
    </target>

    <!-- Install vendors -->
    <target name="composer:install" description="Installing vendors with composer">
      <echo msg="Installing vendors with composer ..." />
      <exec executable="php">
          <arg value="composer.phar" />
          <arg value="install" />
        </exec>
    </target>

    <!-- Update vendors -->
    <target name="composer:update" description="Installing vendors with composer">
      <echo msg="Updating vendors with composer ..." />
      <exec executable="php">
          <arg value="composer.phar" />
          <arg value="update" />
        </exec>
    </target>

    <!-- Php code sniffer -->
    <target name="check:cs" description="Checks coding standard.">
        <echo msg="Checking coding standard ..." />
        <phpcodesniffer standard="PSR2"
                        showSniffs="false"
                        showWarnings="true">
            <fileset refid="sourcecode" />
            <formatter type="checkstyle" outfile="${dir.reports}/checkstyle.xml" />
        </phpcodesniffer>
    </target>

    <!-- copy/paste detector -->
    <target name="check:cpd" description="Checks similar code blocks.">
        <echo msg="Checking similar code blocks ..." />
        <phpcpd minTokens="5"
                minLines="5">
            <fileset refid="sourcecode" />
            <formatter type="pmd" outfile="${dir.reports}/pmd-cpd.xml" />
        </phpcpd>
    </target>

    <!-- PhpDepend -->
    <target name="check:depend" description="Analyse du couplage et des dépendances du code.">
        <echo msg="Analyse du couplage et des dépendances du code ..." />
        <phpdepend>
            <fileset refid="sourcecode" />
            <logger type="jdepend-xml" outfile="${dir.reports.pdepend}/jdepend.xml" />
            <logger type="jdepend-chart" outfile="${dir.reports.pdepend}/dependencies.svg" />
            <logger type="overview-pyramid" outfile="${dir.reports.pdepend}/overview-pyramid.svg" />
        </phpdepend>
    </target>

    <!-- PHP Mess Detector -->
    <target name="check:md" description="Analyse du code mort.">
        <echo msg="Analyse du code mort ..." />
        <phpmd rulesets="codesize,unusedcode,naming,design">
            <fileset refid="sourcecode" />
            <formatter type="xml" outfile="${dir.reports}/pmd.xml" />
        </phpmd>
    </target>

    <!-- Unit tests -->
    <target name="test:unit" 
        depends="build:vendors"
        description="Executes unit tests.">
        <echo msg="Running unit tests ..." />
        <exec command="phpunit --log-junit ${dir.reports}/phpunit.xml --coverage-clover ${dir.reports.coverage}/clover.xml --coverage-html ${dir.reports.coverage}/ -c ${dir.app}"/>
    </target>

</project>