ビルドファイル修正版

Ant用ファイルとPhing用ファイルに分けて、Jenkins側でそれぞれのxmlを指定するようにした。

一応これですべてJenkins上で見られる。
カバレッジレポートはcloverで出してるが、namespace対応できていないっぽくてHTMLレポートでとび先が404になる。
原因は対象クラスファイル名がそのままHTMLになること。
サマリは出るけど、末端はファイルが出力されていなかった。
これはあきらめる。

あとignoreとかexclude指定がはまった。
なかなかうまく除外してくれなかった。


Phing用ビルドファイル

<?xml version="1.0" encoding="utf-8" ?>
<project name="pofc" default="all">
<!-- comment -->
<property name="basedir" value="./" />
<property name="output" value="${basedir}/build/logs" />
<property name="src" value="${basedir}/src" />
<property name="tests" value="${basedir}/tests" />
<property name="ignore" value="${src}/library/Zend/*" />

<target name="all" depends="prepare,lint,pdepend,phpmd,phpcs,phpcpd,phpunit,docblox"></target>

<target name="clean" description="Cleanup build artifacts">
  <delete dir="${basedir}/build/api"/ datetime="2012-03-10T10:56:55+09:00">
  <delete dir="${basedir}/build/code-browser"/ datetime="2012-03-10T10:56:55+09:00">
  <delete dir="${basedir}/build/coverage"/ datetime="2012-03-10T10:56:55+09:00">
  <delete dir="${basedir}/build/logs"/ datetime="2012-03-10T10:56:55+09:00">
  <delete dir="${basedir}/build/pdepend"/ datetime="2012-03-10T10:56:55+09:00">
</target>

<target name="prepare" depends="clean" description="Prepare for build">
  <mkdir dir="${basedir}/build/api"/>
  <mkdir dir="${basedir}/build/code-browser"/>
  <mkdir dir="${basedir}/build/coverage"/>
  <mkdir dir="${basedir}/build/logs"/>
  <mkdir dir="${basedir}/build/pdepend"/>
</target>

<!-- phing -->
<target name="lint">
  <phplint haltonfailure="true" cachefile="${output}/lint_lasttime">
    <fileset dir="${src}">
      <include name="**/*.php" />
      <exclude name="library/Zend/**/*.php" />
    </fileset>
  </phplint>
</target>

<!-- phing -->
<target name="pdepend" description="Calculate software metrics using PHP_Depend">
  <phpdepend>
    <fileset dir="${src}">
      <include name="**/*.php" />
      <exclude name="library/Zend/**/*.php" />
    </fileset>
    <logger type="jdepend-xml" outfile="${output}/jdepend.xml"/>
    <logger type="jdepend-chart" outfile="${basedir}/build/pdepend/dependencies.svg"/>
    <logger type="overview-pyramid" outfile="${basedir}/build/pdepend/overview-pyramid.svg"/>
    <analyzer type="coderank-mode" value="method"/>
  </phpdepend>
</target>

<!-- phing -->
<target name="phpmd">
  <phpmd rulesets="${basedir}/build/phpmd.xml">
    <fileset dir="${src}">
      <include name="**/*.php" />
      <exclude name="library/Zend/**/*.php" />
    </fileset>
    <formatter type="xml" outfile="${output}/pmd.xml"/>
  </phpmd>
</target>

<!-- phing -->
<target name="phpcs" description="Find coding standard violations using PHP_CodeSniffer creating a log file for the continuous integration server">
  <phpcodesniffer standard="Zend" allowedFileExtensions="php" showSniffs="true" showWarnings="true">
    <fileset dir="${src}">
      <include name="**/*.php" />
      <exclude name="library/Zend/**/*.php" />
    </fileset>
    <formatter type="checkstyle" outfile="${output}/checkstyle.xml" />
  </phpcodesniffer>
</target>

<!-- phing -->
<target name="phpcpd">
  <phpcpd minTokens="10">
    <fileset dir="${src}">
      <include name="**/*.php" />
      <exclude name="library/Zend/**/*.php" />
    </fileset>
    <formatter type="pmd" outfile="${output}/pmd-cpd.xml"/>
  </phpcpd>
</target>

<!-- phing -->
<target name="phpunit" description="Run unit tests with PHPUnit">
  <coverage-setup database="${output}/coverage.db">
       <fileset dir="${src}">
	<include name="**/*.php" />
	<exclude name="bootstrap.php" />
	<exclude name="public/**/*.php" />
	<exclude name="library/Zend/**/*.php" />
      </fileset>
  </coverage-setup>
  <phpunit codecoverage="true" bootstrap="${src}/bootstrap.php">
    <formatter type="xml" outfile="${output}/junit.xml" />
    <formatter type="clover" outfile="${output}/clover.xml" />
    <batchtest>
      <fileset dir="${tests}">
        <include name="**/*Test.php" />
      </fileset>
    </batchtest>
  </phpunit>
  <coverage-report outfile="${basedir}/build/coverage/coverage.xml">
    <report todir="${basedir}/build/coverage" />
  </coverage-report>
</target>

<!-- phing -->
<target name="docblox" description="genarate API Document from Docblox">
  <exec executable="docblox.bat">
   <arg line="run -c ${basedir}/build/docblox.xml" />
  </exec>
</target>

</project>


Phing用ビルドファイル内で指定しているDocBlox設定ファイル

<?xml version="1.0" encoding="UTF-8" ?>
<docblox>
    <title>My project</title>
    <parser>
        <target>./build/api</target>
        <markers>
            <item>TODO</item>
            <item>FIXME</item>
        </markers>
        <extensions>
            <extension>php</extension>
        </extensions>
        <visibility></visibility>
    </parser>
    <transformer>
        <target>./build/api</target>
    </transformer>
    <logging>
        <level>warn</level>
        <paths>
            <default>./build/docblox.log</default>
            <errors>./build/docblox.errors.log</errors>
        </paths>
    </logging>
    <transformations>
        <template name="zend" />
    </transformations>
    <files>
        <directory>./src</directory>
        <ignore>library/Zend/*</ignore>
    </files>
</docblox>


Ant用ビルドファイル

<?xml version="1.0" encoding="UTF-8"?>
<project name="pofc" default="all">

<condition property="script-suffix" value=".bat" else="">
  <os family="windows" />
</condition>

<condition property="dev_null" value="nul" else="/dev/null">
  <os family="windows" />
</condition>

<property name="outputDir" value="."/>
<property name="src" value="${basedir}/src" />
<property name="tests" value="${basedir}/tests" />
<property name="ignore" value="${src}/library/Zend/*" />

<target name="all" depends="phploc,phpcb"/>

<target name="phploc" description="Measure project size using PHPLOC">
  <exec executable="phploc${script-suffix}">
   <arg line="--log-csv ${basedir}/build/logs/phploc.csv --exclude ${ignore} --suffixes php ${src}" />
  </exec>
</target>

<target name="phpcb" description="Aggregate tool output with PHP_CodeBrowser">
  <exec executable="phpcb${script-suffix}">
   <arg line="--log=${basedir}/build/logs --source=${src} --output=${basedir}/build/code-browser --ignore=${ignore}" />
  </exec>
</target>
 
</project>


アプリケーションのbootstrapはこんな感じにした。
もちろんユニットテスト実行にも使える。

<?php

function bootstrap()
{
    // not written directly any longer.
    define('HOME_PATH', realpath(dirname(dirname(__FILE__))));

    // define application environment
    define('APPLICATION_ENV', (file_exists(realpath(HOME_PATH . '/development')) ? 'development' : 'production'));

    // application base path
    define('APPS_PATH', realpath(HOME_PATH . '/apps'));

    // application config files path
    define('CONFIGS_PATH', realpath(APPS_PATH . '/configs'));

    // timezone setting is required.
    date_default_timezone_set('Asia/Tokyo');

    // ensure encoding is UTF-8
    mb_internal_encoding('UTF-8');

    // ensure library is on include_path.
    set_include_path(realpath(APPS_PATH . '/library') . PATH_SEPARATOR . get_include_path());

    // set custom error handler.
    require_once 'My/Errorhandler.php';
    set_error_handler(array('My\Errorhandler', 'handleError'));

    // set class autoloader.
    require_once 'Zend/Loader/Autoloader.php';
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $autoloader->registerNamespace(array('My\\', 'Twig_'));

}

// keep clean other symbol tables.
bootstrap();