modxcms/revolution

View on GitHub
_build/build.xml

Summary

Maintainability
Test Coverage
<?xml version="1.0"?>
<project name="MODX Revolution" description="MODX Revolution build script for Phing" default="complete" basedir=".">
    <!-- Override properties in the build.properties file -->
    <property file="build.properties" />

    <!-- Set build timestamp properties, available as:
         DSTAMP "%Y%m%d"
         TSTAMP "%H%M"
         TODAY  "%B %d %Y"
    -->
    <tstamp />

    <!-- Set some common project properties -->
    <property name="project.name" value="MODX Revolution" />
    <property name="project.name.fs" value="modx" />
    <property name="project.root.dir" value=".." />
    <property name="project.core.dir" value="${project.root.dir}/core" />
    <property name="project.assets.dir" value="${project.root.dir}/assets" />
    <property name="project.connectors.dir" value="${project.root.dir}/connectors" />
    <property name="project.manager.dir" value="${project.root.dir}/manager" />

    <!-- Set the project version -->
    <property name="modx.core.version" value="2.8.8" />
    <property name="modx.core.release" value="dev" />

    <!-- Set some common build properties -->
    <property name="build.dir" value="${project.basedir}" />
    <property name="build.src.tree" value="HEAD" />
    <property name="build.distrib.name" value="${project.name.fs}-${modx.core.version}-${modx.core.release}" />
    <property name="build.image.basedir" value="${build.dir}/image" />
    <property name="build.image.dir" value="${build.image.basedir}/${build.distrib.name}" />
    <property name="build.distrib.dir" value="${build.dir}/distrib" />
    <property name="build.templates.dir" value="${build.dir}/templates" />
    <property name="build.apidocs.dir" value="${build.image.basedir}/docs" />
    <property name="build.timestamp" value="true" />

    <!-- Set the paths to the main locations of source code in the build image -->
    <property name="image.core.dir" value="${build.image.dir}/core" />
    <property name="image.assets.dir" value="${build.image.dir}/assets" />
    <property name="image.connectors.dir" value="${build.image.dir}/connectors" />
    <property name="image.manager.dir" value="${build.image.dir}/manager" />

    <!-- =================================
          target: complete
         ================================= -->
    <target name="complete" description="--> Complete Build">
        <phingcall target="prepare-build-image" />
        <phingcall target="git-export-build-image" />
        <!--<phingcall target="copy-core-transport" />-->
        <phingcall target="prepare-build-distrib" />
        <!--<phingcall target="generate-phpdocs" />-->
        <phingcall target="generate-core-transport" />
        <phingcall target="build-sdk" />
        <phingcall target="generate-core-transport" />
        <phingcall target="build-traditional" />
        <phingcall target="build-advanced" />
    </target>

    <!-- =================================
      target: nightly
     ================================= -->
    <target name="nightly" description="--> Nightly Build">
        <phingcall target="prepare-build-image" />
        <phingcall target="git-export-build-image" />
        <phingcall target="prepare-build-distrib" />
        <phingcall target="generate-core-transport" />
        <phingcall target="build-traditional" />
    </target>

    <!-- Make sure the image directory exists and is clean -->
    <target name="prepare-build-image" description="prepare the build image directory">
        <delete includeemptydirs="true" failonerror="false">
            <fileset dir="${build.image.basedir}">
                <include name="**" />
            </fileset>
        </delete>
        <mkdir dir="${build.image.basedir}" />
    </target>

    <!-- Export a build image from a local Git repository tree; requires a local Git clone of the repository -->
    <target name="git-export-build-image" description="export a repository tree of MODX from the local Git repository" if="build.distrib">
        <mkdir dir="${build.image.dir}" />
        <resolvepath propertyName="absolute.root.dir" file="${project.root.dir}" />
        <resolvepath propertyName="absolute.image.basedir" file="${build.image.basedir}" />
        <exec dir="${absolute.root.dir}"
              command="${git.command} archive -o ${absolute.image.basedir}/${build.distrib.name}.zip --format=zip --prefix=${build.distrib.name}/ ${build.src.tree}"
              escape="false" />
        <unzip file="${build.image.dir}.zip" todir="${build.image.basedir}" />
    </target>

    <!-- Run the core data generation script -->
    <target name="generate-core-data" description="generate core data for MODX from a reference database">
        <exec dir="${project.basedir}" command="${php.command} transport.data.php" />
    </target>

    <!-- Run the core package generation script -->
    <target name="generate-core-transport" description="generate the core transport package">
        <if>
            <not><isset property="build.distrib" /></not>
            <then>
                <property name="core.dir" value="${project.core.dir}" />
                <property name="transport.image" value="wc" />
            </then>
            <else>
                <property name="core.dir" value="${image.core.dir}" />
                <property name="transport.image" value="${build.distrib.name}" />
            </else>
        </if>
        <delete file="${core.dir}/packages/core.transport.zip" failonerror="false" />
        <delete dir="${core.dir}/packages/core" failonerror="false" />
        <exec dir="${project.basedir}" command="${php.command} transport.core.php ${transport.image}" />
        <exec dir="${project.basedir}" command="${php.command} fixzip.php ${core.dir}/packages/core.transport.zip" />
    </target>

    <!-- Run the phpdoc generation script -->
    <target name="generate-phpdocs" description="generate the phpdoc documentation" unless="build.nodocs">
        <if>
            <not><isset property="build.distrib" /></not>
            <then>
                <property name="core.dir" value="${project.core.dir}" />
            </then>
            <else>
                <property name="core.dir" value="${image.core.dir}" />
            </else>
        </if>
        <phpdoc title="${project.name} ${modx.core.version} API Documentation"
                target="${build.apidocs.dir}"
                sourcecode="false"
                output="HTML:frames:DOM/earthli"
                parseprivate="true"
                defaultcategoryname="${project.name}"
                defaultpackagename="${project.name.fs}"
                packageoutput="modx,xpdo">
            <fileset dir="${core.dir}/xpdo">
                <include name="**/*.php" />
                <exclude name="**/*.map.inc.php" />
                <exclude name="compression/pclzip.lib.php" />
                <exclude name="json/**" />
            </fileset>
            <fileset dir="${core.dir}/model/modx">
                <include name="**.php" />
                <exclude name="**/*.map.inc.php" />
                <exclude name="**/*_mysql.class.php" />
                <exclude name="jsonrpc/**" />
                <exclude name="mail/phpmailer/**" />
                <exclude name="processors/**" />
                <exclude name="xmlrpc/**" />
                <exclude name="xmlrss/**" />
                <include name="xmlrss/modrssparser.class.php" />
            </fileset>
        </phpdoc>
    </target>

    <!-- Copy the core transport package from a working copy to an exported image and extract it -->
    <target name="copy-core-transport" description="copy the core transport to the image" if="build.distrib">
        <delete file="${build.image.dir}/core/packages/core.transport.zip" failonerror="false" />
        <delete dir="${build.image.dir}/core/packages/core" includeemptydirs="true" failonerror="false" />
        <copy file="${project.core.dir}/packages/core.transport.zip" todir="${build.image.dir}/core/packages" />
        <unzip file="${build.image.dir}/core/packages/core.transport.zip" todir="${build.image.dir}/core/packages" />
    </target>

    <!-- Make sure the distrib directory exists and is clean -->
    <target name="prepare-build-distrib" description="empty the build distrib directory" if="build.distrib">
        <delete includeemptydirs="true">
            <fileset dir="${build.distrib.dir}">
                <include name="**" />
            </fileset>
        </delete>
        <mkdir dir="${build.distrib.dir}" />
    </target>

    <!-- Build a MODX SDK distrib with all files in place and extracted -->
    <target name="build-sdk" description="create the SDK distribution package" if="build.distrib">
        <if>
            <istrue value="${build.timestamp}" />
            <then>
                <property name="distrib.name" value="${build.distrib.name}-${DSTAMP}-sdk" />
            </then>
            <else>
                <property name="distrib.name" value="${build.distrib.name}-sdk" />
            </else>
        </if>
        <reflexive file="${build.image.dir}/setup/includes/config.core.php">
            <filterchain>
                <replacetokens>
                    <token key="git" value="@sdk@" />
                </replacetokens>
            </filterchain>
        </reflexive>
        <reflexive file="${build.image.dir}/core/docs/version.inc.php">
            <filterchain>
                <replacetokens>
                    <token key="git" value="@sdk@" />
                </replacetokens>
            </filterchain>
        </reflexive>
        <!--<copy todir="${build.image.dir}/docs">
            <fileset dir="${build.apidocs.dir}" />
        </copy>-->
        <copy file="${build.templates.dir}/config.core.php.txt" tofile="${build.image.dir}/config.core.php">
            <filterchain>
                <replacetokens>
                    <token key="core-path" value="dirname(__FILE__) . '/core/'" />
                </replacetokens>
            </filterchain>
        </copy>
        <copy file="${build.templates.dir}/config.core.php.txt" tofile="${build.image.dir}/manager/config.core.php">
            <filterchain>
                <replacetokens>
                    <token key="core-path" value="dirname(__DIR__) . '/core/'" />
                </replacetokens>
            </filterchain>
        </copy>
        <copy file="${build.templates.dir}/config.core.php.txt" tofile="${build.image.dir}/connectors/config.core.php">
            <filterchain>
                <replacetokens>
                    <token key="core-path" value="dirname(__DIR__) . '/core/'" />
                </replacetokens>
            </filterchain>
        </copy>
        <zip destfile="${build.distrib.dir}/${distrib.name}.zip" prefix="${build.distrib.name}/">
            <fileset dir="${build.image.dir}">
                <include name="**" />
            </fileset>
        </zip>
        <exec dir="${project.basedir}" command="${php.command} fixzip.php ${build.distrib.dir}/${distrib.name}.zip" />
        <reflexive file="${build.image.dir}/setup/includes/config.core.php">
            <filterchain>
                <replacetokens>
                    <token key="sdk" value="@git@" />
                </replacetokens>
            </filterchain>
        </reflexive>
        <reflexive file="${build.image.dir}/core/docs/version.inc.php">
            <filterchain>
                <replacetokens>
                    <token key="sdk" value="@git@" />
                </replacetokens>
            </filterchain>
        </reflexive>
        <delete file="${build.image.dir}/config.core.php" />
        <delete file="${build.image.dir}/manager/config.core.php" />
        <delete file="${build.image.dir}/connectors/config.core.php" />
        <delete dir="${build.image.dir}/docs" includeemptydirs="true" />
        <delete>
            <fileset dir="${build.image.dir}">
                <include name="manager/assets/ext3/ext-all-debug.js" />
                <include name="manager/assets/ext3/adapter/ext/ext-base-debug.js" />
            </fileset>
        </delete>
    </target>

    <!-- Build a traditional MODX distrib with all files in place and extracted -->
    <target name="build-traditional" description="create the traditional distribution package" if="build.distrib">
        <if>
            <istrue value="${build.timestamp}" />
            <then>
                <property name="distrib.name" value="${build.distrib.name}-${DSTAMP}" />
            </then>
            <else>
                <property name="distrib.name" value="${build.distrib.name}" />
            </else>
        </if>
        <reflexive file="${build.image.dir}/setup/includes/config.core.php">
            <filterchain>
                <replacetokens>
                    <token key="git" value="@traditional@" />
                </replacetokens>
            </filterchain>
        </reflexive>
        <reflexive file="${build.image.dir}/core/docs/version.inc.php">
            <filterchain>
                <replacetokens>
                    <token key="git" value="@traditional@" />
                </replacetokens>
            </filterchain>
        </reflexive>
        <copy file="${build.templates.dir}/config.core.php.txt" tofile="${build.image.dir}/config.core.php">
            <filterchain>
                <replacetokens>
                    <token key="core-path" value="dirname(__FILE__) . '/core/'" />
                </replacetokens>
            </filterchain>
        </copy>
        <copy file="${build.templates.dir}/config.core.php.txt" tofile="${build.image.dir}/manager/config.core.php">
            <filterchain>
                <replacetokens>
                    <token key="core-path" value="dirname(__DIR__) . '/core/'" />
                </replacetokens>
            </filterchain>
        </copy>
        <copy file="${build.templates.dir}/config.core.php.txt" tofile="${build.image.dir}/connectors/config.core.php">
            <filterchain>
                <replacetokens>
                    <token key="core-path" value="dirname(__DIR__) . '/core/'" />
                </replacetokens>
            </filterchain>
        </copy>
        <zip destfile="${build.distrib.dir}/${distrib.name}.zip" prefix="${build.distrib.name}/">
            <fileset dir="${build.image.dir}">
                <exclude name="_build/**" />
                <exclude name="manager/assets/ext3/**/*-debug.js" />
                <include name="**/.gitignore" />
                <include name=".gitignore" />
                <include name="ht.access" />
                <include name="*/ht.access" />
                <include name="config.core.php" />
                <include name="index.php" />
                <include name="connectors/**" />
                <include name="manager/**" />
                <include name="setup/**" />
                <include name="core/cache/**" />
                <include name="core/config/**" />
                <include name="core/docs/**" />
                <include name="core/error/**" />
                <include name="core/export/**" />
                <include name="core/import/**" />
                <include name="core/lexicon/**" />
                <include name="core/model/**" />
                <include name="core/xpdo/**" />
                <include name="core/packages/core.transport.zip" />
                <include name="core/packages/core/manifest.php" />
                <include name="core/packages/core/*/*.vehicle" />
                <include name="core/packages/core/*/*.validator" />
                <include name="core/packages/core/*/*.resolver" />
            </fileset>
        </zip>
        <exec dir="${project.basedir}" command="${php.command} fixzip.php ${build.distrib.dir}/${distrib.name}.zip" />
        <reflexive file="${build.image.dir}/setup/includes/config.core.php">
            <filterchain>
                <replacetokens>
                    <token key="traditional" value="@git@" />
                </replacetokens>
            </filterchain>
        </reflexive>
        <reflexive file="${build.image.dir}/core/docs/version.inc.php">
            <filterchain>
                <replacetokens>
                    <token key="traditional" value="@git@" />
                </replacetokens>
            </filterchain>
        </reflexive>
        <delete file="${build.image.dir}/config.core.php" />
        <delete file="${build.image.dir}/manager/config.core.php" />
        <delete file="${build.image.dir}/connectors/config.core.php" />
    </target>

    <!-- Build a new advanced MODX distrib with only the core/ and setup/ dirs
        and the core transport package included -->
    <target name="build-advanced" description="create the advanced distribution package" if="build.distrib">
        <if>
            <istrue value="${build.timestamp}" />
            <then>
                <property name="distrib.name" value="${build.distrib.name}-${DSTAMP}-advanced" />
            </then>
            <else>
                <property name="distrib.name" value="${build.distrib.name}-advanced" />
            </else>
        </if>
        <reflexive file="${build.image.dir}/setup/includes/config.core.php">
            <filterchain>
                <replacetokens>
                    <token key="git" value="@advanced@" />
                </replacetokens>
            </filterchain>
        </reflexive>
        <reflexive file="${build.image.dir}/core/docs/version.inc.php">
            <filterchain>
                <replacetokens>
                    <token key="git" value="@advanced@" />
                </replacetokens>
            </filterchain>
        </reflexive>
        <zip destfile="${build.distrib.dir}/${distrib.name}.zip" prefix="${build.distrib.name}/">
            <fileset dir="${build.image.dir}">
                <include name="setup/**" />
                <include name="core/.gitignore" />
                <include name="core/**/.gitignore" />
                <include name="core/ht.access" />
                <include name="core/cache/**" />
                <include name="core/config/**" />
                <include name="core/docs/**" />
                <include name="core/error/**" />
                <include name="core/export/**" />
                <include name="core/import/**" />
                <include name="core/lexicon/**" />
                <include name="core/model/**" />
                <include name="core/xpdo/**" />
                <include name="core/packages/core.transport.zip" />
            </fileset>
        </zip>
        <exec dir="${project.basedir}" command="${php.command} fixzip.php ${build.distrib.dir}/${distrib.name}.zip" />
        <reflexive file="${build.image.dir}/setup/includes/config.core.php">
            <filterchain>
                <replacetokens>
                    <token key="advanced" value="@git@" />
                </replacetokens>
            </filterchain>
        </reflexive>
        <reflexive file="${build.image.dir}/core/docs/version.inc.php">
            <filterchain>
                <replacetokens>
                    <token key="advanced" value="@git@" />
                </replacetokens>
            </filterchain>
        </reflexive>
    </target>

    <!-- Publish a distrib to a server -->
    <target name="publish-build" description="publish the build to a server for download" if="build.distrib">
        <echo>Not yet implemented!</echo>
    </target>
</project>