Archive

Posts Tagged ‘Open Source’

It’s Been a While

2 November, 2010 11 comments

I’ve Been Busy

I haven’t been doing much on CruiseControl.NET this year as I have been busy. I have started a new job, returned to university part-time for post-graduate study and my wife is expecting our second child. As you can imagine I have been feeling a bit overwhelmed!

Sad smile

However summer is upon us which means university is almost finished for the year. Since I also work at the university, it also means that my job is going to be quiet over the next two-three months. So, I will finally have some tie for open source again.

Where to From Here?

Since I’ve been gone from CruiseControl.NET it looks like things have stopped. The bug count has soured over five hundred again (which is a bit sad considering I had it under four hundred at the beginning of the year.) There hasn’t been anything from the project owner in a long time and the other developers on the project also have slowed down.

Sad smile

At this point it looks like interest in further development for CruiseControl.NET has effectively died. And given that Continuous Integration has now entered the mainstream there are a lot more commercial products out there that can throw a lot more time and resources at building and maintaining a CI product (e.g. TeamCity, Cruise, TFS, etc.) My team at the university uses TFS (not by choice, I still prefer CC.NET for the flexibility and control it offers). So the way that I currently see it there is no point in doing any more work on CruiseControl.NET.

What do other people think? Is there a future for CruiseControl.NET? Are there other people out there who would contribute?

Categories: CruiseControl.Net Tags:

Conditional Plug-in

An Exciting New Task

A while back one of the other developers showed me an exciting extension to CruiseControl.NET – a conditional task plug-in (at http://ccnetconditional.codeplex.com/). This plug-in allows a user to define conditions for execution – with multiple conditions, alternate execution path and a few other nice features.

I got in touch with the original author (Lasse Sjørup) and he very kindly gave us permission to include it in the codebase for CruiseControl.NET. Unfortunately at the time we were preparing for the 1.5 release and were unable to include it (since we didn’t want to push out the release!)

However, the 1.5 release is pretty much there (maybe a few more bug fixes to add) and we have started on a 1.6 release. So I have spent a bit of time porting the plug-in over to the trunk, and as of now the conditional task can be used!

Some Examples

The task is very simple in the way it works – you specify the conditions to check and then the tasks to run if they pass or if they fail. The basic layout is:

<conditional> 
  <conditions> 
    <!– conditions to check –> 
  </conditions> 
  <tasks> 
    <!– tasks to run if the conditions pass –> 
  </tasks> 
  <elseTasks> 
    <!– tasks to run if the conditions fail–> 
  </elseTasks> 
</conditional>

The nice thing about this task is both the tasks and the elseTasks elements are optional. If you want to run some tasks if some conditions are not met, you just include the elseTasks element – no need for a not condition! But I’m getting side-tracked.

Lasse has provided a base set of 9 conditions:

  • And
  • Or
  • Build condition (ForceBuild or IfModificationExists)
  • Status (successful, failed, exception, etc.)
  • File exists
  • Folder exists
  • URL ping
  • URL ping with header value
  • Value comparison

You build up the conditions to check, and then define the tasks to call (these can be any task or publisher). For example, if we wanted to run different NAnt scripts based on either the build condition or the existence of a file, we could use the following:

<conditional> 
  <conditions> 
    <orCondition> 
      <conditions> 
        <fileExistsCondition> 
          <file>test.txt</file> 
        </fileExistsCondition> 
        <buildCondition> 
          <value>ForceBuild</value> 
        </buildCondition> 
      </conditions> 
    </orCondition> 
  </conditions> 
  <tasks> 
    <!– tasks to run if the conditions pass –> 
  </tasks> 
  <elseTasks> 
    <!– tasks to run if the conditions fail–> 
  </elseTasks> 
</conditional>

And so on. It is possible to build up a very wide range of conditions using the existing conditions. Additionally, it is possible to use dynamic values with these conditions, expanding the range even more.

But Wait, There’s More…

If there is not a task that meets your needs, it is very easy to add more. Lasse designed the conditions around an interface – ITaskCondition. So it is a simple matter to extend the system and add condition plug-ins. This interface has the following definition:

public interface ITaskCondition 
{ 
    bool Eval(IIntegrationResult result); 
}

It uses the standard NetReflector attributes (just like a task, publisher, trigger, etc.)

So not only has Lasse developed a brilliant task, he has made it so easy to extend (I already have a few ideas of new conditions to add :-) )

Documentation

As part of adding the task and the conditions I have also added the documentation to the wiki. The full documentation can be found at http://confluence.public.thoughtworks.org/display/CCNET/Conditional+Task. Let me know if you find any problems with it (I’ll take full responsibility for any mistakes in the documentation!)

A Final Word of Thanks

As you can guess I am really impressed with this plug-in. Again, many thanks to Lasse Sjørup for allowing us to include this in the CruiseControl.NET code.

Categories: CruiseControl.Net Tags:

CruiseControl.NET Converted to .NET 3.5

22 March, 2010 1 comment

Over the week-end we finally upgraded CruiseControl.NET to use .NET 3.5. At the same time we branched the trunk and updated the version number for the trunk to 1.6.

This is good news in two ways:

  1. This means that the 1.5 release is finally marked as finished – there will be no new functionality added to it. There is still the potential for bug fixes, but hopefully these will tail off and we will be able to finally close off the 1.5 release (like we have the 1.4.4 release).
  2. CruiseControl.NET can finally start to use some of the goodies in .NET 3.5. This includes Linq, some multi-threading improvements, ASP.NET 2.0, etc.

At the moment CruiseControl.NET does not use anything from .NET 3.5, but we can look forward to this changing in the near future :-)

When we were debating whether to change to .NET 3.5 or not, we had one person ask why not wait a few weeks for the .NET 4 release and go straight to that? The answer is very simple – we are trying to ensure that CruiseControl.NET also runs on Mono. This means people on non-Windows OS’s can use it as well. Unfortunately, from what I have seen, there is no timeframe for implementing the new .NET 4 functionality into Mono yet, so we will have to wait and see what happens on that front.

But when Mono does have .NET functionality, I will be pushing to upgrade faster this time around…

Categories: CruiseControl.Net Tags:

A Busy Time

26 February, 2010 Leave a comment

I haven’t been posting much recently – or doing much in the way of development for CruiseControl.NET. The reason why is simple – my life is changing!

A month ago I accepted a new job, at one of the local universities. There I will be the technical team for the team that looks after the Learning Management System for the university. So, as you can imagine, my past four weeks have been busy tidying up everything and producing reams of documentation!

At the same time, I’m going to be starting post-graduate studies. I’ve been chasing up people at the university to get my enrolment accepted – my bachelors degree was in exercise physiology, but I’m wanting to do post-grad in computer science! The easy part was getting departmental approval – the rest of the time was jumping through the hoops in the facility’s enrolment process :-(

So, next week I’m starting my new job and becoming a student at the same time. So if I’m not doing much on CruiseControl.NET you’ll know why :-)

Categories: CruiseControl.Net Tags:

A Rant

27 January, 2010 4 comments

This post is a rant about something that someone did recently to annoy me. There is no technical content, and it is only slightly related to CruiseControl.NET (CC.NET). So if you don’t care what annoyed, feel free to totally ignore this post!

And before I continue, I do realise that I am not perfect, I make just as many mistakes as the next person, and I know there are parts of the code that I have added that have bugs in it, so please do not take this post as saying that I am perfect.

So, what has annoyed me?

In the JIRA logs for CC.NET someone has raised an issue saying that security and sessions within the system are flaky. Flaky!

A “flaky” system is one that appears to work, but is broken to the point that it is almost unusable. In other words – it looks good, but is poorly developed!

Like I said above, I know there are some issues in my work, but describing the entire security as “flaky”? Every time I read that, I want to tell the person something rude (but I won’t, especially as I can’t tell him face to face!)

Why does this annoy me so much?

  1. The code for CC.NET is complex! When I first started on the project I spent several months digging through the code to figure out how things work (that was the original purpose of this blog).
  2. This was something no one else was willing to try (and I know why now!)
  3. Finally, I am not getting paid for this (at all!) I do this because I think it is a good product and I want to see it become even better.

So, reading that someone thinks that my work is so unstable to the point of being unusable makes me think “why do I bother?” Even more so considering I’ve been putting in a lot of effort trying to get 1.5 out the door.

So for the moment, I am ignoring that issue and waiting for it to drop off the “recently added” list. Unfortunately that means I probably won’t fix the issues (I’ll wait until someone who appreciates my work raises the issues) and it also means I’m not looking at the recently added list (at least until the issue drops off).

Anyway, rant over. I guess I should be thankful this is the first time I’ve had someone who doesn’t appreciate my work, but still wants me to fix things…

Categories: CruiseControl.Net Tags:

Holiday Plans

23 October, 2009 2 comments

Yes, It’s That Time Again!

Once again we are coming up to our annual trip to China to see the in-laws. This means I will be disconnected for the next three weeks, but I will have plenty of time on my hands. Last year I worked on a replacement for CCTray (Project Leo) which later became FastForward.NET. This year my plans are just as grand :-)

Currently I am working on converting CruiseControl.NET to use streams instead of strings. Given that this is a big task, with lots of complexity, it’s been slow going. I’m aiming to finish this in my time away – plus look into some other possibilities for the concepts (like distributed builds).

Second, I’m looking at building a Silverlight front-end for CruiseControl.NET. I’ve been playing around with Silverlight at work, so this opens a few possibilities. This will be a standard plug-in for the dashboard, so people can choose to use it or not if they desire. The only downside is it will require .NET 3.5 and Silverlight 3 – so I’m not sure how well this will work on *nix environments.

So, you won’t hear much from me for a wee while, but I hope to have some exciting stuff soon!! Plus my Cantonese should be better by the time I return ;-)

Categories: CruiseControl.Net Tags:

One Year On

23 August, 2009 1 comment

Happy anniversary! Yes, my first post on this blog was one year ago! That was when I first adventured into the wonderful world of open source and embarked on enhancing and improving CruiseControl.NET.

Since then a lot of things have changed! Here are some of the highlights:

  • I have a son (he’s almost five months old now!)
  • I’ve written 178 posts
  • I’ve changed 60 thousand lines of code (wow!)
  • I’ve added a new application to CC.NET (CCValidator)
  • And I’ve started my own open source project (FastForward.NET)

In terms of CruiseControl.NET, I’ve added the following functionality:

  • Security
  • Dynamic build values and parameters
  • Message-based communications
  • Common communications client
  • Monitor API
  • NDepend and NCover tasks
  • Image and HTML support in the dashboard
  • Packages
  • Hot-swapping
  • Parallel and sequential tasks
  • Task statuses

Plus I’ve gotten to know a great bunch of people, and learnt a lot about coding and development.

So, all in all, one year down the line, I think it has been very much worth it :D

Here’s to another year!!!

FastForward.NET Information

7 August, 2009 7 comments

I’m still in the process of getting FastForward.NET off the ground. One of the really great things about working on CruiseControl.NET is most of the infrastructure is in place. Unfortunately, starting a new Open Source project means I have to set it all up myself :-(

That’s the bad news, the good news is I am slowly getting there. Here is some project-related information:

Source Control: this is being hosted at SourceForge for the moment. I know SourceForge is slow, but I’m hoping they’ll improve. Here is the project site: https://sourceforge.net/projects/fastforwardnet.

Issue Tracking and Documentation: again, I’m using SourceForge – I am using the hosted version of Trac. This has some nice features, plus all the information is in one place. What I really like is the roadmap section – I’ve started setting things up for how I plan on moving forward. The only down side is it is slow, again I’m hoping the SourceForge will improve. The location is https://sourceforge.net/apps/trac/fastforwardnet/.

Finally, I’ve set up a Google mailing group at http://groups.google.com.ag/group/fastforwardnet. I imagine this will be similar to what we have for CruiseControl.NET – general discussions will occur here (including help if necessary) with issues being raised on Trac as they come up.

Also, I hope to be able to use a CruiseControl.NET soon, in which case the project will be under continuous integration. Unfortunately I don’t have a server available, so I’ll need to convince some kind-hearted person, so stay tuned on this front…

Finally, if anyone wants to submit code for this project, I’m am more than willing to grant access to Subversion. The project is under a MIT/X11 license, so it’s very, VERY free. Just don’t wreck the code :-)

Anyway, that’s enough for now, let me know if there is anything else you want to know.

Categories: FastForward.NET Tags:

CruiseControl.NET and Ohloh

Introducing Ohloh

Ohloh is a social site for open-source development – it allows developers to track what is happening with their projects, to “toot their horns” so to speak. Their website is at http://www.ohloh.net/ – and you can even see CruiseControl.NET on there (https://www.ohloh.net/p/cruisecontrol).

Some More Stats

Since we are both open source projects, I thought I’d add a quick link between the two. This link means you can now see Ohloh stats for your open source project within CruiseControl.NET itself.

Actually, I didn’t think of this idea myself – instead I got it from the Subtext instance of CruiseControl.NET (http://build.subtextproject.com/ccnet/ViewFarmReport.aspx). This is another open source project – one that uses both Ohloh and CruiseControl.NET. Actually they’ve done a very nice job of customising CruiseControl.NET – take a look sometime.

Rather than using their approach, I’ve taken a more limited approach (their Ohloh stats are displayed on the main pages – which is ok for them since they have CruiseControl.NET for only one project). Instead I’ve added a plug-in that enables a project to be linked to Ohloh.

Here are some pictures of what I’ve implemented:

Ohloh-1

This first picture shows the Ohloh quick summary next to the project title. Also, there is now a “View Ohloh" Stats” menu command (on the left). Clicking on this link brings up the Ohloh widgets in their own page:

Ohloh-2

Configuring this requires two steps:

Configure the server

since the stats are on a per-project basis the actual link is stored in ccnet.config. To configure a project to link through to Ohloh, add the following configuration:

<linkedSites>
  <namedValue name="ohloh" value="322"/>
</linkedSites>

In this case the project id for CruiseControl.NET in Ohloh is 322. This would be replaced with the identifier of the project.

Add the Ohloh Stats Package

The first step configured the server, this step configures the plug-in in the dashboard. The quick summary will be enabled when the Ohloh link is added, to add the “View Obloh Stats” command this plug-in must be installed.

In Conclusion

This was a nice simple feature to implement (for a change!) If you have an open source project, give it a spin and let me know what you think (sorry – this is only for open source).

Categories: CruiseControl.Net Tags:

A Son is Born

27 March, 2009 3 comments

This morning at 6:25am, my son, Ethan Philip Sutherland, was finally born. He is a nice healthy young boy, although certainly on the heavy side (especially considering the size of my wife!)

Normally, I aim not to post personal events in this blog, but this event will have a significant impact on my life and the various tasks I do, hence the reason for the post.

I am taking the next four weeks off work to help my wife adapt from a two-person to a three-person family (an yeah, I need the time too!) As such, I probably won’t have much time to work on CruiseControl.Net either, although this will be even more impacted.

I had hoped to have the security branch merged and tested by this time, but due to continuing delays in completing the 1.4.x releases, this hasn’t happened :-( The code is 95% complete for the following features:

  • Security
  • Dynamic build parameters
  • Messaging
  • Communications client
  • Server extension points
  • Build throttling

I say 95% completed, because there has not been much feedback or testing on these new features. As such, I know there will be additional issues or items that I have not thought of. So, these items are on hold indefinitely, as I have no idea of when I will have time to do them. Perhaps one of the other developers will take these features and complete them…

Additionally, there are a few other items I’ve been working on which haven’t been checked into Subversion anywhere. These include the following features:

  • Simplified web administration
  • Installation packages
  • Detailed task statuses for builds
  • Package publisher
  • NDepend task (plus installation package)
  • XMPP publisher
  • Dashboard themes
  • Extended source control exception handling

These are in various states of completion, depending on where I got these to. Most of these are proofs-of-concepts, so I only developed them to the point where I was happy the concept was valid. The idea was to then commit these into the trunk and finish them.

If I have time, I may add some of these items in, but then it will make the lead developer unhappy as we are only supposed to be bug-fixing.

Finally the VS2008 migration is also on hold. This work has been completed and tested, but thanks to the on-going issues with 1.4.x cannot be merged!

So, you won’t see many posts from me for the next while, hopefully I will have time to work on CruiseControl.Net, but I’m not planning on it for a while.

Thanks for all your support,

A proud (but tired) new dad :-)

Categories: CruiseControl.Net Tags:
Follow

Get every new post delivered to your Inbox.