Skip to content

Commit

Permalink
Add build process for jenkins integration
Browse files Browse the repository at this point in the history
  • Loading branch information
Olivier Paradis committed Apr 27, 2012
1 parent b5ab213 commit c30bd94
Show file tree
Hide file tree
Showing 5 changed files with 253 additions and 31 deletions.
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
.idea
.DS_Store
build
phpunit.xml
Resources/doc/_build/*
nbproject
coverage
coverage
composer.lock
vendor
37 changes: 9 additions & 28 deletions Tests/tests/autoload.php.dist
Original file line number Diff line number Diff line change
@@ -1,34 +1,15 @@
<?php

// try to reuse lib defined in a current symfony2 project
// if the bundle is within a symfony project, try to reuse the project's autoload
$autoload = __DIR__.'/../../../../../../app/autoload.php';

// if the bundle is the project, try to use the composer's autoload for the tests
$composerAutoload = __DIR__.'/../../vendor/autoload.php';

if (is_file($autoload)) {
include $autoload;
} elseif (is_file($composerAutoload)) {
include $composerAutoload;
} else {
$vendorDir = __DIR__.'/../../vendor';
require_once $vendorDir.'/symfony/src/Symfony/Component/ClassLoader/UniversalClassLoader.php';

$loader = new Symfony\Component\ClassLoader\UniversalClassLoader();
$loader->registerNamespaces(array(
'Symfony' => array($vendorDir.'/symfony/src'),
'Knp' => array($vendorDir.'/knpmenu/src'),
'Exporter' => array($vendorDir.'/exporter/lib'),
));
$loader->registerPrefixes(array(
'Twig_' => $vendorDir.'/twig/lib',
));
$loader->register();

spl_autoload_register(function($class) {
if (0 === strpos($class, 'Sonata\\AdminBundle\\')) {
$path = __DIR__.'/../../'.implode('/', array_slice(explode('\\', $class), 2)).'.php';

if (!stream_resolve_include_path($path)) {
return false;
}
require_once $path;
return true;
}
});
}

throw new \Exception('unable to autoload vendors for tests');
}
232 changes: 232 additions & 0 deletions build.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="SonataAdminBundle" basedir="." default="build:main">

<!-- Config files -->
<property name="dir.config" value="${project.basedir}" />
<property name="config.phpunit" value="${dir.config}/phpunit.xml.dist" />
<property name="config.pmd" value="${dir.config}/pmd.xml.dist" />

<!-- Build paths -->
<property name="dir.build" value="${project.basedir}/build" />
<property name="dir.reports" value="${dir.build}/reports" />
<property name="dir.reports.check" value="${dir.reports}/check" />
<property name="dir.reports.test" value="${dir.reports}/test" />
<property name="dir.reports.test.unit" value="${dir.reports.test}/unit" />
<property name="dir.reports.test.coverage" value="${dir.reports.test}/coverage" />
<property name="dir.docs" value="${dir.build}/docs" />
<property name="dir.docs.api" value="${dir.docs}/api" />
<property name="dir.docs.rst" value="${dir.docs}/rst" />
<property name="dir.docs.php" value="${dir.docs}/php" />

<!-- Source paths -->
<property name="dir.src" value="${project.basedir}" />
<property name="dir.src.rst" value="${dir.src}/Resources/doc" />

<!-- Source fileset (used by check tasks) -->
<fileset id="sourcecode" dir="${dir.src}">
<include name="**/*.php" />
<exclude name="**/*Test.php" />
<exclude name="vendor/**/*.php" />
</fileset>


<!-- BUILD TASKS -->

<!-- Main (default) task -->
<target name="build:main"
depends="build:clean, build:prepare, build:check, build:test, build:doc"
description="Run all test and build everything"/>

<!-- Clean previous build files -->
<target name="build:clean"
description="Clean previous build files">

<delete dir="${dir.build}" verbose="true" />

</target>

<!-- Prepare build (performed by each build:* task when called as standalone) -->
<target name="build:prepare"
description="Prepare build">

<mkdir dir="${dir.build}" />

</target>

<!-- Check Project -->
<target name="build:check"
description="Check source code"
depends="build:prepare, check:prepare, check:cs, check:md, check:cpd"/>

<!-- Test Project -->
<target name="build:test"
description="Perform all tests"
depends="build:prepare, test:prepare, test:unit"/>

<!-- Generate documentation -->
<target name="build:doc"
depends="build:prepare, doc:prepare, doc:api"
description="Generate API documentation"/>

<!-- CHECK SECTION -->

<!-- Prepare check (performed by each check:* task when called as standalone) -->
<target name="check:prepare"
description="Create check directories">

<mkdir dir="${dir.reports.check}" />

</target>

<!-- CodeSniffer with Symfony2 convention -->
<target name="check:cs"
depends="check:prepare"
description="Generate PHP_CodeSniffer report">

<phpcodesniffer standard="Symfony2" showSniffs="true" showWarnings="true">
<fileset refid="sourcecode" />
<config name="error_severity" value="1"/>
<config name="warning_severity" value="5"/>
<formatter type="checkstyle" outfile="${dir.reports.check}/checkstyle.xml" />
</phpcodesniffer>

</target>

<!-- PHP Copy and Paste Detector -->
<target name="check:cpd"
description="Generate phpcpd report"
depends="check:prepare">

<phpcpd>
<fileset refid="sourcecode" />
<formatter type="pmd" outfile="${dir.reports.check}/cpd.xml" />
</phpcpd>

</target>

<!-- PHP Mess detector -->
<target name="check:md"
description="Generate phpmd report"
depends="check:prepare" >

<!-- if config.pmd file not found, use default pmd config -->
<if>
<not><available file="${config.pmd}"/></not>
<then>
<echo msg="phpmd config file not found: ${config.pmd}" />
<property name="config.pmd" value="codesize,unusedcode,naming,design" override="yes"/>
</then>
</if>

<phpmd rulesets="${config.pmd}">
<fileset refid="sourcecode" />
<formatter type="xml" outfile="${dir.reports.check}/pmd.xml" />
</phpmd>

</target>

<!-- TEST SECTION -->

<!-- Prepare test environment (performed by each test:* task when called as standalone) -->
<target name="test:prepare"
description="Prepare the test environment">

<echo msg="Prepare test report directory" />
<mkdir dir="${dir.reports.test}" />

<echo msg="Installing/Updating vendors..." />
<exec command="composer update" passthru="true"/>

</target>

<!-- Prepare unit test environment -->
<target name="test:unit:prepare"
description="Prepare the unit test environment"
depends="test:prepare">

<mkdir dir="${dir.reports.test.unit}" />

</target>

<!-- Execute unit tests and code coverage -->
<target name="test:unit"
description="Perform unit tests and code coverage"
depends="test:prepare, test:unit:prepare">

<exec executable="phpunit" logoutput="true">
<arg line="--log-junit ${dir.reports.test.unit}/phpunit.xml" />
<arg line="--coverage-clover ${dir.reports.test.coverage}/clover.xml" />
<arg line="--coverage-html ${dir.reports.test.coverage}/html" />
<arg line="-c ${config.phpunit}" />
</exec>

</target>

<!-- DOCUMENTATION SECTION -->

<!-- Prepare the documentation environment -->
<target name="doc:prepare"
description="Prepare the documentation">

<mkdir dir="${dir.docs}" />

</target>

<!-- Prepare the Api documentation -->
<target name="doc:api:prepare"
description="Prepare the API documentation">

<mkdir dir="${dir.docs.api}" />

</target>

<!-- Generate the Api documentation -->
<target name="doc:api"
description="Generate API documentation"
depends="doc:prepare, doc:api:prepare">

<exec executable="apigen" logoutput="true" passthru="true">
<arg line="--source ${dir.src}" />
<arg line="--exclude */vendor/*" />
<arg line="--exclude */Tests/*" />
<arg line="--destination ${dir.docs.api}" />
</exec>

</target>

<!-- Prepare the phpDoc documentation -->
<target name="doc:php:prepare"
description="Prepare the Php documentation">

<mkdir dir="${dir.docs.php}" />

</target>

<!-- Build the phpDoc documentation -->
<target name="doc:php"
description="Generate Php documentation"
depends="doc:prepare, doc:php:prepare">

<exec executable="phpdoc" logoutput="true" passthru="true">
<arg line="--directory ${dir.src}" />
<arg line="--ignore '*/vendor/*,*/Tests/*'" />
<arg line="--target ${dir.docs.php}" />
<arg line="--sourcecode" />

</exec>

</target>

<!-- Generate the RST documentation -->
<target name="doc:rst"
description="Generate RST documentation"
depends="doc:prepare">

<!-- delete previous directory (sphinx refuses to work on an existing directory) -->
<delete dir="${dir.docs.rst}"/>

<exec command="sphinx-build -C -a -b html ${dir.src.rst} ${dir.docs.rst}" passthru="true" />

</target>

</project>
6 changes: 5 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@
],
"require": {
"php": ">=5.3.2",

"jms/translation-bundle": "*",
"symfony/symfony": "2.0.*",

"symfony/framework-bundle": "2.0.*",
"symfony/security-bundle": "2.0.*",
"knplabs/knp-menu-bundle": "master-dev",
Expand All @@ -26,7 +30,7 @@
"sonata-project/block-bundle": "2.0.*"
},
"suggest": {
"sonata-project/doctrine-orm-admin-bundle": "*",
"sonata-project/doctrine-orm-admin-bundle": "2.0.*",
"sonata-project/intl-bundle": "master-dev"
},
"autoload": {
Expand Down
3 changes: 2 additions & 1 deletion phpunit.xml.dist
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,11 @@
<whitelist>
<directory>./</directory>
<exclude>
<directory>./Tests/tests</directory>
<directory>./Tests/</directory>
<directory>./DataFixtures/</directory>
<directory>./Resources/</directory>
<directory>./DependencyInjection/</directory>
<directory>./vendor/</directory>
</exclude>
</whitelist>
</filter>
Expand Down

0 comments on commit c30bd94

Please sign in to comment.