Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?xml version="1.0"?>
- <project name="deploy" default="all">
- <property name="nant.settings.currentframework" value="net-4.0" />
- <!-- Any of these can be passed through the command line -->
- <property name="sourceDirectory" value="${project::get-base-directory()}" />
- <property name="publishDirectory" value="${sourceDirectory}\build" />
- <property name="MSBuildPath" value="${framework::get-assembly-directory(framework::get-target-framework())}\msbuild.exe" />
- <!-- The build configuration to use when publishing and transforming the web.config file. This is useful when you have multiple environments for which you create builds -->
- <property name="buildConfiguration" value="Release" />
- <!-- Set these as needed -->
- <property name="svn.username" value="" />
- <property name="svn.password" value="" />
- <target name="SvnPrep">
- <property name="svn.dir" value="${publishDirectory}\.svn" />
- <property name="svn.update" value="true" readonly="false" />
- <echo>env.svn.path = svn</echo>
- <echo>svn.dir = ${svn.dir}</echo>
- <mkdir dir="${publishDirectory}" unless="${directory::exists(publishDirectory)}" />
- <!-- Check if there's a .svn dir already. If not: checkout, else: update. -->
- <if test="${not directory::exists(svn.dir)}">
- <exec program='svn.exe' workingdir="${publishDirectory}" verbose="true">
- <arg line='co ${svn.builduri} --username ${svn.username} --password ${svn.password} --non-interactive ./' />
- </exec>
- <property name="svn.update" value="false" readonly="false" />
- </if>
- <if test="${svn.update}">
- <exec program='svn.exe' workingdir="${publishDirectory}\" verbose="true">
- <arg line='up --username ${svn.username} --password ${svn.password} --non-interactive --force ./' />
- </exec>
- </if>
- <!-- Force any conflicts to be resolved with the most recent code -->
- <exec program='svn.exe' workingdir="${publishDirectory}\" verbose="true">
- <arg line='resolve --accept theirs-full -R ./' />
- </exec>
- </target>
- <target name="DeleteFiles">
- <!-- Delete only the files (retain directory structure) in the directory to which you are going to publish/build. NAnt excludes svn directories by default. -->
- <delete includeemptydirs="false">
- <fileset basedir="${publishDirectory}">
- <include name="**/*.*" />
- </fileset>
- </delete>
- </target>
- <target name="Publish">
- <!-- I know there's an MSBuild task, I don't know why I didn't use it, but this works. -->
- <!-- Build and publish frontend -->
- <exec program="${MSBuildPath}">
- <arg line='"${sourceDirectory}\YourProject.csproj"' />
- <arg value='"/p:Platform=AnyCPU;Configuration=${buildConfiguration};PublishDestination=${publishDirectory}"' />
- <arg value="/target:PublishToFileSystem" />
- </exec>
- <!-- Transform the correct web.config and copy it to the build folder. PublishToFileSystem doesn't transform the web.config, unfortunately. -->
- <exec program="${MSBuildPath}">
- <arg line='"${sourceDirectory}\YourProject.csproj"' />
- <arg value='"/p:Platform=AnyCPU;Configuration=${buildConfiguration};PublishDestination=${publishDirectory}"' />
- <arg value="/target:TransformWebConfig" />
- </exec>
- <copy file="${sourceDirectory}\YourProject\obj\${buildConfiguration}\TransformWebConfig\transformed\Web.config" tofile="${publishDirectory}\YourProject\web.config" overwrite="true" />
- </target>
- <target name="SvnCommit">
- <!-- add any new files -->
- <exec program='svn.exe' workingdir="${publishDirectory}" verbose="true">
- <arg line='add --force .' />
- </exec>
- <!-- delete any missing files, a modification of this http://stackoverflow.com/questions/1071857/how-do-i-svn-add-all-unversioned-files-to-svn -->
- <!-- When there's nothing to delete it looks like this fails (to NAnt) but it is actually fine, that's why failonerror is false -->
- <exec program='cmd.exe' workingdir="${publishDirectory}\" verbose="true" failonerror="false"
- commandline='/C for /f "usebackq tokens=2*" %i in (`svn status ^| findstr /r "^\!"`) do svn del "%i %j"' >
- </exec>
- <exec program='svn.exe' workingdir="${publishDirectory}" verbose="true">
- <arg line='commit -m "Automated commit from build runner"' />
- </exec>
- </target>
- <target name="ShowProperties">
- <script language="C#" prefix="util" >
- <code>
- <![CDATA[
- public static void ScriptMain(Project project)
- {
- foreach (DictionaryEntry entry in project.Properties)
- {
- Console.WriteLine("{0}={1}", entry.Key, entry.Value);
- }
- }
- ]]>
- </code>
- </script>
- </target>
- <target name="all">
- <call target="ShowProperties" />
- <call target="SvnPrep" />
- <call target="DeleteFiles" />
- <call target="Publish" />
- <call target="SvnCommit" />
- </target>
- </project>
Advertisement
Add Comment
Please, Sign In to add comment