build.xml 9.75 KB
<?xml version="1.0" encoding="UTF-8"?>
<project name="MVC_Behat_PHPUnit_Mockery" default="build">
    <!-- By default, we assume all tools to be on the $PATH -->
    <!--<property name="toolsdir" value=""/>-->

    <!-- Uncomment the following when the tools are in ${basedir}/vendor/bin -->
    <!-- <property name="toolsdir" value="${basedir}/vendor/bin/"/> -->
    <property name="toolsdir" value="${basedir}/bin/"/>

    <target name="build"
            depends="prepare,installcomposer,vendors,check-behatexec,lint,phploc-ci,pdepend,phpmd-ci,phpcs-ci,phpcpd-ci,phpunit,behat,stopphpserver,phpcompatinfo,phpdox"
            description=""/>

    <target name="build-parallel"
            depends="prepare,lint,tools-parallel,phpunit,phpdox"
            description=""/>

    <target name="tools-parallel" description="Run tools in parallel">
        <parallel threadCount="2">
            <sequential>
                <antcall target="pdepend"/>
                <antcall target="phpmd-ci"/>
            </sequential>
            <antcall target="phpcpd-ci"/>
            <antcall target="phpcs-ci"/>
            <antcall target="phploc-ci"/>
        </parallel>
    </target>

    <target name="clean"
            unless="clean.done"
            description="Cleanup build artifacts">
        <delete dir="${basedir}/build/api"/>
        <delete dir="${basedir}/build/coverage"/>
        <delete dir="${basedir}/build/logs"/>
        <delete dir="${basedir}/build/pdepend"/>
        <delete dir="${basedir}/build/phpdox"/>
        <delete file="${basedir}/bin/composer"/>
        <delete file="${basedir}/data/test.db"/>
        <property name="clean.done" value="true"/>
    </target>

    <target name="prepare"
            unless="prepare.done"
            depends="clean"
            description="Prepare for build">
        <mkdir dir="${basedir}/build/api"/>
        <mkdir dir="${basedir}/build/coverage"/>
        <mkdir dir="${basedir}/build/logs"/>
        <mkdir dir="${basedir}/build/pdepend"/>
        <mkdir dir="${basedir}/build/phpdox"/>
        <exec executable="php" failonerror="true">
            <arg value="${basedir}/src/scripts/build_test_db.php"/>
        </exec>
        <mkdir dir="${basedir}/bin/"/>
        <property name="prepare.done" value="true"/>
    </target>

    <target name="installcomposer" depends="clean">
        <exec executable="/bin/bash" failonerror="true">
            <arg value="-c" />
            <arg value="curl -s https://getcomposer.org/installer | php -- --install-dir=bin --filename=composer" />
        </exec>
    </target>

    <target name="vendors" depends="clean,installcomposer" description="Add Dev Vendors">
        <exec executable="php" failonerror="true">
            <arg value='${basedir}/bin/composer' />
            <arg value='update' />
            <arg value='--dev' />
            <arg value='--prefer-dist' />
        </exec>
    </target>

    <target name="check-behatexec" depends="vendors">
        <available file="${basedir}/bin/behat" property="behatexec.present"/>
    </target>

    <target name="addbehatlink" depends="check-behatexec" if="!behatexec.present">
        <exec executable="/bin/bash" failonerror="true">
            <arg value="-c"/>
            <arg value="ln -s ${basedir}/vendor/behat/behat/bin/behat ${basedir}/bin/behat"/>
        </exec>
        <echo message="Made a symlink to behat in ${basedir}/bin/"/>
    </target>

    <target name="lint" description="Perform syntax check of sourcecode files">
        <apply executable="php" failonerror="true">
            <arg value="-l" />

            <fileset dir="${basedir}/src">
                <include name="**/*.php" />
                <modified />
            </fileset>

            <fileset dir="${basedir}/tests">
                <include name="**/*.php" />
                <modified />
            </fileset>
        </apply>
    </target>

    <target name="phploc"
            description="Measure project size using PHPLOC and print human readable output. Intended for usage on the command line.">
        <exec executable="${toolsdir}phploc">
            <arg value="--count-tests" />
            <arg path="${basedir}/src" />
            <arg path="${basedir}/tests" />
        </exec>
    </target>

    <target name="phploc-ci"
            depends="prepare"
            description="Measure project size using PHPLOC and log result in CSV and XML format. Intended for usage within a continuous integration environment.">
        <exec executable="${toolsdir}phploc">
            <arg value="--count-tests" />
            <arg value="--log-csv" />
            <arg path="${basedir}/build/logs/phploc.csv" />
            <arg value="--log-xml" />
            <arg path="${basedir}/build/logs/phploc.xml" />
            <arg path="${basedir}/src" />
            <arg path="${basedir}/tests" />
        </exec>
    </target>

    <target name="pdepend"
            depends="prepare"
            description="Calculate software metrics using PHP_Depend and log result in XML format. Intended for usage within a continuous integration environment.">
        <exec executable="${toolsdir}pdepend">
            <arg value="--jdepend-xml=${basedir}/build/logs/jdepend.xml" />
            <arg value="--jdepend-chart=${basedir}/build/pdepend/dependencies.svg" />
            <arg value="--overview-pyramid=${basedir}/build/pdepend/overview-pyramid.svg" />
            <arg path="${basedir}/src" />
        </exec>
    </target>

    <target name="phpmd"
            description="Perform project mess detection using PHPMD and print human readable output. Intended for usage on the command line before committing.">
        <exec executable="${toolsdir}phpmd">
            <arg path="${basedir}/src" />
            <arg value="text" />
            <arg path="${basedir}/build/phpmd.xml" />
        </exec>
    </target>

    <target name="phpmd-ci"
            depends="prepare"
            description="Perform project mess detection using PHPMD and log result in XML format. Intended for usage within a continuous integration environment.">
        <exec executable="${toolsdir}phpmd">
            <arg path="${basedir}/src" />
            <arg value="xml" />
            <arg path="${basedir}/build/phpmd.xml" />
            <arg value="--reportfile" />
            <arg path="${basedir}/build/logs/pmd.xml" />
        </exec>
    </target>

    <target name="phpcs"
            description="Find coding standard violations using PHP_CodeSniffer and print human readable output. Intended for usage on the command line before committing.">
        <exec executable="${toolsdir}phpcs">
            <arg value="--standard=PSR2" />
            <arg value="--extensions=php" />
            <arg value="--ignore=autoload.php" />
            <arg path="${basedir}/src" />
            <arg path="${basedir}/tests" />
        </exec>
    </target>

    <target name="phpcs-ci"
            depends="prepare"
            description="Find coding standard violations using PHP_CodeSniffer and log result in XML format. Intended for usage within a continuous integration environment.">
        <exec executable="${toolsdir}phpcs" output="/dev/null">
            <arg value="--report=checkstyle" />
            <arg value="--report-file=${basedir}/build/logs/checkstyle.xml" />
            <arg value="--standard=PSR2" />
            <arg value="--extensions=php" />
            <arg value="--ignore=autoload.php" />
            <arg path="${basedir}/src" />
        </exec>
    </target>

    <target name="phpcpd"
            description="Find duplicate code using PHPCPD and print human readable output. Intended for usage on the command line before committing.">
        <exec executable="${toolsdir}phpcpd">
            <arg path="${basedir}/src" />
        </exec>
    </target>

    <target name="phpcpd-ci"
            depends="prepare"
            description="Find duplicate code using PHPCPD and log result in XML format. Intended for usage within a continuous integration environment.">
        <exec executable="${toolsdir}phpcpd">
            <arg value="--log-pmd" />
            <arg path="${basedir}/build/logs/pmd-cpd.xml" />
            <arg path="${basedir}/src" />
        </exec>
    </target>

    <target name="phpunit"
            depends="prepare"
            description="Run unit tests with PHPUnit">
        <exec executable="${toolsdir}phpunit" failonerror="true">
            <arg value="--configuration"/>
            <arg path="${basedir}/build/phpunit.xml"/>
        </exec>
    </target>

    <target name="startphpserver">
        <exec executable="${basedir}/phpserver.sh" failonerror="true" dir="${basedir}">
            <arg value="start" />
        </exec>
    </target>

    <target name="behat" description="Run tests with Behat" depends="startphpserver">
        <exec executable="${basedir}/bin/behat" failonerror="true">
            <arg value="--tags" />
            <arg value="@jenkins_remote" />
        </exec>
    </target>

    <target name="stopphpserver"
            depends="startphpserver">
        <exec executable="${basedir}/phpserver.sh" failonerror="true" dir="${basedir}">
            <arg value="stop" />
        </exec>
    </target>

    <target name="phpcompatinfo">
        <echo message="phpcompatinfo: Checking src/"/>
        <exec executable="${basedir}/bin/phpcompatinfo" dir="${basedir}">
            <arg value="analyser:run"/>
            <arg value="src/"/>
        </exec>
        <echo message="phpcompatinfo: Checking tests/"/>
        <exec executable="${basedir}/bin/phpcompatinfo" dir="${basedir}">
            <arg value="analyser:run"/>
            <arg value="tests/"/>
        </exec>
    </target>

    <target name="phpdox"
            depends="phploc-ci,phpcs-ci,phpmd-ci"
            description="Generate project documentation using phpDox">
        <exec executable="${toolsdir}phpdox" dir="${basedir}/build"/>
    </target>

</project>