I’ve been working with Phing lately to automate some processes and have had great success… here’s the first draft of the build.xml file… still a little crude, but functional. I will likely do some rearranging for portability.
<?xml version="1.0" encoding="UTF-8"?>
<project name="default" default="summary" basedir=".">
<propertyprompt propertyName="project.name" defaultValue="myproject" promptText="Enter a project name" promptCharacter=":" />
<!-- get environment -->
<target name="get-env" description="get the environment for an action">
<propertyprompt propertyName="project.property_file" defaultValue="${project.name}.properties" promptText="Enter the properties file to use" promptCharacter=":" />
<property file="${project.property_file}" />
</target>
<!-- build filesets -->
<fileset dir="${project.name}/setup/db/ee/ddl" id="filesets.sql.ee.ddl">
<include name="*.sql"/>
<exclude name="**/.svn/**" />
</fileset>
<fileset dir="${project.name}/setup/db/ee/dml" id="filesets.sql.ee.dml">
<include name="*.sql"/>
<exclude name="**/.svn/**" />
</fileset>
<fileset dir="${project.name}/setup/db/aux_refrence/ddl" id="filesets.sql.aux_refrence.ddl">
<include name="*.sql"/>
<exclude name="**/.svn/**" />
</fileset>
<fileset dir="${project.name}/setup/db/aux_refrence/dml" id="filesets.sql.aux_refrence.dml">
<include name="*.sql"/>
<exclude name="**/.svn/**" />
</fileset>
<!-- get files from svn -->
<target name="svn-co" depends="get-env" description="">
<svncheckout
svnpath="${svn.path}"
username="${svn.user}"
password="${svn.pass}"
nocache="true"
repositoryurl="${svn.repourl}"
todir="${project.name}" />
<svnlastrevision
svnpath="${svn.path}"
workingcopy="${project.name}"
propertyname="svn.lastrevision"/>
<property name="db.ee.name" value="${project.name}_${db.ee.name}_rev${svn.lastrevision}" override="true" />
<property name="db.aux_refrence.name" value="${project.name}_${db.aux_refrence.name}_rev${svn.lastrevision}" override="true" />
</target>
<!-- configure -->
<target name="config" depends="svn-co" description="">
<copy overwrite="true"
file="${project.name}/setup/config/config.php.template"
tofile="${project.name}/system/ee-system/config.php">
<filterchain>
<expandproperties />
</filterchain>
</copy>
</target>
<target name="db_ee" depends="config" description="">
<reflexive>
<fileset dir="${project.name}/setup/db/ee">
<include name="*.sql" />
<exclude name="**/.svn/**" />
</fileset>
<filterchain>
<replacetokens begintoken="@{" endtoken="}@">
<token key="db_ee_name" value="${db.ee.name}" />
</replacetokens>
</filterchain>
</reflexive>
<pdo url="mysql:host=${db.global.host}" userid="${db.global.user}" password="${db.global.pass}">
<transaction src="${project.name}/setup/db/ee/create_schema.sql"/>
</pdo>
<pdo url="mysql:host=${db.global.host};dbname=${db.ee.name}" userid="${db.global.user}" password="${db.global.pass}">
<fileset refid="filesets.sql.ee.ddl" />
<fileset refid="filesets.sql.ee.dml" />
</pdo>
</target>
<target name="db_aux_refrence" depends="db_ee" description="">
<reflexive>
<fileset dir="${project.name}/setup/db/aux_refrence">
<include name="*.sql" />
<exclude name="**/.svn/**" />
</fileset>
<filterchain>
<replacetokens begintoken="@{" endtoken="}@">
<token key="db_aux_refrence_name" value="${db.aux_refrence.name}" />
</replacetokens>
</filterchain>
</reflexive>
<pdo url="mysql:host=${db.global.host}" userid="${db.global.user}" password="${db.global.pass}">
<transaction src="${project.name}/setup/db/aux_refrence/create_schema.sql"/>
</pdo>
<pdo url="mysql:host=${db.global.host};dbname=${db.aux_refrence.name}" userid="${db.global.user}" password="${db.global.pass}">
<fileset refid="filesets.sql.aux_refrence.ddl" />
<fileset refid="filesets.sql.aux_refrence.dml" />
</pdo>
</target>
<!-- update permissions -->
<target name="permissions" depends="db_aux_refrence" description="">
<exec command="chown -R ${files.owner}:${files.group} ${project.name}" dir="${project.basedir}" />
</target>
<target name="summary" depends="permissions" description="">
<echo>NOTE: This is a dev build with a directory structure that is not typical of a production environment</echo>
<echo>"siteroot" folder - typical files meant to live within the siteroot (which may or may not be the same dir as EE)</echo>
<echo>"setup" folder - files used during the build process</echo>
<echo>"system" folder - typical files used in the system (not limited to EE)</echo>
<echo>SUMMARY: The following is a summary of the installed dev system</echo>
<echo>Project folder: ${project.name}</echo>
<echo>aux_refrence DB Name: ${db.aux_refrence.name}</echo>
<echo>ee DB Name: ${db.ee.name}</echo>
<echo>EE System Folder: ${ee.path}/ee-system</echo>
<echo>EE Pubic URL: ${ee.url}</echo>
<echo>EE Admin URL: ${ee.url}/ee-system</echo>
<echo>SVN Revision Checked Out: ${svn.lastrevision}</echo>
</target>
</project>
There is a corresponding properties file that defines the majority of the ${vars}.
