Phing Build File

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}.

No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Status via Twitter Comin soon...