Introduction
I’ve been a bit quiet on the CruiseControl.NET front lately – mainly due to a change in job, plus I’ve taken on post-graduate studies. Unfortunately, this has also meant that work on CruiseControl.NET has pretty much come to a halt as well
The other core developers obviously have the same lack of time.
However, while I haven’t had much time for coding, I have had some time for thinking. So I thought I’d note down some thoughts about where I’d like to see CruiseControl.NET go in the future.
Note: at this point I want to stop and make a disclaimer – I am not the project lead, lead developer or anything of the sort for CruiseControl.NET, I am just a contributor (although yes, a fairly active one). As such, this post is purely my thoughts on future direction – there is no guarantee that any of them will be done.
1.5: Current Release
We are currently in RC1 for 1.5, but not much is happening. I’d like to draw a line in the sand – do what we can within a set timeframe and then have that as the official 1.5 release. I know it will still contain some bugs and unresolved issues, but I do not think they will be resolved anytime soon (unless one of the other developers suddenly gets some spare time!)
For my part, I’m hoping to spend some time dealing with the critical concurrency issue we have – this is basically where two external tasks are conflicting and causing one of them to halt until the other is finished. However, given the difficulty of this, I can’t promise any resolution.
1.6: Next Release
Again I’d like to draw a line in the sand and propose a cut-off date (at the moment I am thinking beginning of next year.) This release will include a number of the patches we have received but were unable to include in 1.5, plus some fixes on out-standing issues.
It will also be the first .NET 3.5 release of CruiseControl.NET – I’ve managed to get enough of a consensus within the core developers to make this happen. Currently we are resolving some issues and then we will switch to a 1.6 development mode.
The other major item for 1.6 is the inclusion of the CCNet Conditional Plug-in. This is an awesome extension that has been developed by Lasse Sjørup. Basically it allows conditions within CruiseControl.NET (task sections only). It is extensible and already covers a wide range of options. This plug-in is currently available at http://ccnetconditional.codeplex.com/, but from the 1.6 release it will be included natively!
One of the other developers was also talking about ASP.NET MVC 2.0 – so perhaps there is a possibility of finally replacing the current dashboard (and all its home-grown components) with something that is easier to maintain. Just a rumour, but it would definitely be something that I would get involved with!!!
2.0: 2012 (perhaps?)
The next major iteration of CruiseControl.NET will be sometime in the future. There are two major changes I would like to see, both of which are breaking and pretty major.
First, I would like to get rid of the massive in-memory strings that we currently have. This is basically the work that I have done around converting to stream-based logging. Unfortunately this is not in a usable state at the moment, there are still some significant issues to resolve. However this would go a long way to reducing CruiseControl.NET’s memory consumption and it will also speed things up.
Second, I think we should change from NetReflector to XAML for the configuration. This would eliminate another component that we are the sole users of, and thus is not progressing at all. Unfortunately this also has a dependency on .NET 4.0, so we cannot progress down this path until Mono supports .NET 4.0.
The Rest (2.1 onwards)
Some of the other areas in CruiseControl.NET that I think we can work on once we have moved to .NET 4.0 are:
- Removing the dependency on .NET Remoting (perhaps even offering multiple communications channels)
- Alternate scheduling engine (current the only option is queue-based)
- Using the parallel extensions in .NET 4.0 to simplify some of our threading (most of the current code was written pre-.NET 2.0)
- Use MEF to allow additional extension points within the server
- Allow alternate configuration stores (e.g. databases, common configuration server, etc.)
- Distributed builds (peer-to-peer?)
Anyway, these are just ideas at this time, but I think it is good to have a vision for the future
So this is what I would like to see happen in CruiseControl.NET. If anyone else has anything they would like to contribute, or even if they would like to get involved with the project, let me know and I will see what I can do.