I’m not sure where this script fits into ‘The Joel Test’, but in the interest of automating the process of releasing a build in Subversion, I had the new guy (hey Pete!) spend his first couple days writing a script that:
- copies the trunk to the named branch (ie: /myproject/trunk –> /branches/1.10)
- copies the ‘latest’ tag to a tag called ‘rollback’
- copies the newly created branch to /tags/latest
The end result is that when we decide to do a release to the production environment, we can simply run the script (download the plain text) which copies the Subversion trunk (the main line of development for those unfamiliar with Subversion) to a tag we called ‘latest’ and also to a branch which matches the version number of the release. We point our production servers to /$project/tags/latest and our development servers (which we setup to run nightly builds) to /$project/trunk.
And just so we know that everything is running smoothly, he modified the Ant deployment script so that it sends an email upon completion indicating success or failure along with the output from the build. The email part I thought was going to be relatively simple (ie: use the mail task), but I wasn’t so sure about the generated output. Turns out that you can use MailLogger feature to listen for and get the status of build events simply by appending a logger
flag to the invocation of ant:
ant -logger org.apache.tools.ant.listener.MailLogger
and then by setting the appropriate properties in your build file.
Neat. Just out of interest, is there any reason for two-staging the copy/delete and not just using “svn move” instead?