One of the things I really want to be able to do with Sitecore is build automation. It might not be as pressing when you have one or two projects in development, but here in Sitecore Ukraine we need to constantly update and maintain a number of modules which easily exceed a number of programmers. The usual build stuff like updating and checking in the package can get pretty tedious.
The good news is that we're getting much closer to this goal with 5.3, and the new packager is a big part of this. So what do we need to make the build magic happen?
1. Building the project package(s) automatically.
It's were the new packager really rocks. Separating package definition (package project) from the actual data file is a much needed change. One of the killer features of this is being able to dynamically (conditionally) include items in the package. For instance the package project could say that all children of /system/modules/my_module and /system/templates/my_module should be included in the package when it is built - no need to update the definition each time you decide to add a new template field.
What is missing: there's still no readymade way to automatically build the package. The packager API makes it really simple though, and it would be a trivial task to add a web service that builds the package from package project file.
2. Automated package / module installation.
First, there needs to be a way to automatically install the package. The hard part then is being able to automate configuration changes as most of the settings are still stored in configuration files while packager speaks items, not xml. 5.3 makes is somewhat easier with _sc.include_. Dealing with external module dependencies can be even harder, but that's mostly out of scope of Sitecore and can be dealt with on individual basis.
What can be done: Again, packager provides API that can be used to issue 'install package x' command, so it's not hard to have this available via web service of some sort. At the moment it also involves designing a package in a way that ensures that no 'overwrite' confirmations are required - packager needs to be enhanced with 'quiet install' mode.
Automated configuration changes is still an untouched territory. Truly automated module installations is a major (and very noble) task involving lots of changes, but for the sake automated builds some shortcuts could be made. Basically you need a way of adding your custom bits to default web.config, but not sure if the half-solution is worth it though.
3. Running unit tests.
Once the package is built and installed into a prototype Sitecore instance, it's testing time. To recap: we use a custom NUnit test runner (which is simply a web page) to run NUnit tests against Sitecore in a fully setup web environment. A number of helper methods such as programmatically setting up the Sitecore site support the test framework. he custom test runner is already able to execute all tests in the supplied assembly and save the standard NUnit test report .xml to disk, which then can be analyzed to decide if the build is successful or broken.
So yes, we're getting closer but not quite there yet. A lot can be built on top of what we're already have in 5.3, and apart from that I'd really like the configuration issue to be tackled. Another thing we all can benefit from is known conventions of how you do develop with Sitecore, making it easier to support it using the automation.