CCNetConfig

Continuous Integration, Simplified Configuration

Home | Wiki | About | Login | Contact |
subscribeSubscribe
Subscribe
CCNetConfig
Releases
Beta Releases
Stable Releases
Work Items
Discussions
CPRP
Releases
Beta Releases
Stable Releases
RSS Builds Publisher
Releases
Beta Releases
Stable Releases
Current Release
0.5.0.120
Sun, Jan 20 2008 at 10:02 PM
All Releases
CCNetConfig Build Status
  • Build StatusSuccess
  • Label0.6.420.32915
  • Last Build4/28/2008 6:43 AM
  • Next Build7/24/2008 12:00 AM
Recent Work Items
  • Automated: Unhandled exceptio…
  • Automated: Object reference n…
  • support for SvnRevisionLabell…
  • Automated: Uncommon behaviour…
  • Automated: create a new confi…
  • Copying and pasting a task do…
  • Automated: Invalid URI: The U…
  • Automated: Cannot import a nu…
  • Remove support for plugins in…
  • Show splash screen on initial…
Legend: Proposed Active Fixed Closed
Tag Cloud
  • A Little Class
  • Automation
  • C#
  • CCNet
  • CCNetConfig
  • codeplex
  • CodePlexAPI
  • Continuous Integration
  • CruiseControl.NET
  • feedburner
  • google
  • JSON
  • LOLCode
  • MSBuild
  • RssBuildsPublisher
  • Sandcastle
  • subtext
  • subversion
  • SvnLabeller
  • tfs
  • twitter
  • Visual Studio
  • Wix
  • XML
  • xna
more tags...
Archives
  • July, 2008 (2)
  • May, 2008 (3)
  • April, 2008 (5)
  • March, 2008 (8)
  • February, 2008 (6)
  • January, 2008 (7)
  • December, 2007 (11)
  • November, 2007 (7)
  • October, 2007 (5)
  • September, 2007 (8)
  • August, 2007 (5)
  • June, 2007 (7)
  • May, 2007 (5)
  • April, 2007 (23)
  • March, 2007 (27)
  • February, 2007 (12)
  • January, 2007 (9)
  • December, 2006 (2)
  • November, 2006 (12)
  • October, 2006 (17)
  • September, 2006 (8)
  • August, 2006 (30)
 
Image Galleries
  • Screenshots
  • A Little Class
Post Categories
  • Announcements
  • Automation
  • Beta
  • Beta Marker
  • C#
  • CCNetConfig
  • CCNetConfig.BugTracking
  • CCnetConfig.CCNet
  • CCNetConfig.Core
  • CCNetConfig.GUI
  • CCNetConfig.Updater
  • CCNetConfig.Updater.Core
  • CodePlex
  • CodePlex Release Publisher
  • CodePlexAPI
  • Continuous Integration
  • CruiseControl.NET
  • Extending CCNetConfig
  • MSBuild
  • MsBuild Extended Tasks
  • News
  • Nightly
  • Orcas
  • Project Extension
  • Rant
  • Reflector
  • Release
  • RssBuildsPublisher
  • Sandcastle
  • SubText
  • SubVersion
  • TFS
  • TFS Plugin
  • Tools
  • TortiseSVN
  • Vista
  • Visual Studio
  • Wiki
  • Wix
  • XAML
  • Xbox Live
  • Zune
 

Blog Statistics
  • Posts219
  • Articles0
  • Comments36
  • Trackbacks5
Home
Download
Screenshots
Support
License
Source

September 2006 Entries

Very Busy this past week
I was very busy this past week with work and helping out a friends band ( Slinky Styles ) with their show ( now if they would just let me help with their website ).  This week is going to be just as busy. I have some big shots flying in for work and Slinky Styles has another show that I will be helping out with.

If anyone is in the ChicagoLand area and wants to check them out, they will be playing Gunther Murphy's on September 21st. The doors open at 8pm. You can hear some of their music at their web site http://slinkystyles.com.

After this week I should be able to get back to fixing some of the reported bugs with the beta 1.
Ryan Conrad posted @ Tuesday, September 19, 2006 3:32 PM | Comments (0)
Beta Marker Launched
As Roy Osherove points out here, Beta Marker has been launched.

"Beta Marker is about software you like. You'll discover the newest software releases here, all submitted by Beta Marker members. If you like a software, mark it to promote it to the home page. Submit, comment, mark and share your activity with friends."
And CCNetConfig Beta 1 has been added, you can Mark It Here.
Filed Under [ Beta Marker CCNetConfig News ]
Ryan Conrad posted @ Monday, September 11, 2006 5:32 PM | Comments (0)
Support for extended CCNet Configuration
I started working on support for extended ccnet configuration sections like Jay Flowers' modification to ccnet. This does not add support for these changes, rather it allows anyone to write the configuration section handlers for the extensions. All of the project extensions will be placed under the Project Extension Node under the project. They will be added automatically when the application loads, unlike the triggers, tasks and publishers. Below is a screenshot of what it looks like when the ForceFilters Extension is loaded. The ForceFilters Extension is not part of the CCNetConfig project and is not anywhere near complete. I just started working on the extension to test out adding the extension to the project.  The extension base class ProjectExtension is part of the CCNetConfig.Core Assembly and is in the current nightly build. Serialization of the extension is the responsibility of the extension. In the comming days, the ProjectExtension will be one of the Extending CCNetConfig topics.


Filed Under [ CCNetConfig CCNetConfig.Core Continuous Integration CruiseControl.NET Extending CCNetConfig Project Extension ]
Ryan Conrad posted @ Sunday, September 10, 2006 7:52 PM | Comments (0)
Extending CCNetConfig - Part 1 - Custom Labeller
Over the next few days I will be putting together a few posts to explain how to create custom configuration block providers. In this post I will talk about creating a Labeller.

The first step is to add a reference to CCNetConfig.Core, then we add a class for the labeller. In this example I will be calling it MyLabeller.


First I inherit from the Labeller object. Then I implement the 2 abstract methods. We also call the base constructor passing the name of the labeller.
[code language="c#"]using System; using System.Xml.Serialization; using System.Xml; using System.ComponentModel; using CCNetConfig.Core; using CCNetConfig.Core.Components; using System.Drawing.Design; namespace MyCCNet { public class MyLabeller : Labeller{ /// /// Creates an instance of the myLabeller provider /// public MyLabeller () : base("myLabeller") { } #region ISerialize Members /// /// Serializes this instance. /// /// public XmlElement Serialize() { } /// /// Deserializes the specified element. /// /// The element. public void Deserialize( XmlElement element ) { } #endregion } }[/code]
The next step is to implement ICCNetDocumentation. This interface tells the GUI that this configuration provider has a link to documentation. We set the uri to the path to the documentation and make it so it is not visible in the property grid.
[code language="c#"]using System; using System.Xml.Serialization; using System.Xml; using System.ComponentModel; using CCNetConfig.Core; using CCNetConfig.Core.Components; using System.Drawing.Design; namespace MyCCNet { public class MyLabeller : Labeller, ICCNetDocumentation { /// /// Creates an instance of the myLabeller provider /// public MyLabeller () : base("myLabeller") { } #region ISerialize Members /// /// Serializes this instance. /// /// public XmlElement Serialize() { } /// /// Deserializes the specified element. /// /// The element. public void Deserialize( XmlElement element ) { } #endregion #region ICCNetDocumentation Members /// /// Gets the documentation URI. /// /// The documentation URI. [Browsable (false)] public Uri DocumentationUri { get { return new Uri ("http://mydomain.com/documentation/MyLabeller"); } } #endregion } }[/code]
Now that we have a class with the basic methods and properties implemented, we can now start adding our properties for the labeller. For MyLabeller, we need to add a release date and an option to increment on failure. ReleaseDate is going to be required so we need to call a function that performs the check. We will also add some Attributes to the ReleaseDate property so the property grid uses the Datepicker to edit the value.
We add a Description Attribute so the property grid can display some helpful information to the user. We also set the Category to "Required" for the ReleaseDate. Then we set the DefaultValue Attribute to null. Then we set the Editor Attribute for the ReleaseDate to use DatePickerUIEditor.
Since IncrementOnFailure can be null, true or false we want an Editor that will allow that. we set the Editor Attribute to DefaultableBooleanUIEditor, then set the TypeConverter to DefaultableBooleanTypeConverter.
[code language="c#"]using System; using System.Xml.Serialization; using System.Xml; using System.ComponentModel; using CCNetConfig.Core; using CCNetConfig.Core.Components; using System.Drawing.Design; namespace MyCCNet { public class MyLabeller : Labeller, ICCNetDocumentation { private DateTime? _releaseDate = DateTime.Now.Date; private bool? _incrementOnFailure = null; /// /// Creates an instance of the myLabeller provider /// public MyLabeller () : base("myLabeller") { } /// /// The start date for the release (the start date of iteration one) /// [Description("The start date for the release (the start date of iteration one)"), Category("Required"), DisplayName("(ReleaseDate)"),DefaultValue(null), Editor ( typeof ( DatePickerUIEditor ), typeof ( UITypeEditor ) )] public DateTime ReleaseDate { get { return this._releaseDate; } set { this._releaseDate = Util.CheckRequired(this,"releaseDate",value); } } /// /// If true, the label will be incremented even if the build fails. Otherwise it will only be incremented if the build succeeds. /// [Description ("If true, the label will be incremented even if the build fails. Otherwise it will only be incremented if the build succeeds."), Editor (typeof (DefaultableBooleanUIEditor), typeof (UITypeEditor)), TypeConverter (typeof (DefaultableBooleanTypeConverter)), DefaultValue ( null ), Category ( "Optional" )] public bool? IncrementOnFailure { get { return this._incrementOnFailure; } set { this._incrementOnFailure = value; } } #region ISerialize Members /// /// Serializes this instance. /// /// public XmlElement Serialize() { } /// /// Deserializes the specified element. /// /// The element. public void Deserialize( XmlElement element ) { } #endregion #region ICCNetDocumentation Members /// /// Gets the documentation URI. /// /// The documentation URI. [Browsable (false)] public Uri DocumentationUri { get { return new Uri ("http://mydomain.com/documentation/MyLabeller"); } } #endregion } }[/code]
Now we have all of our properties for the MyLabeller provider. Next we are going to write the code for the Serialize method. Since this method returns an XmlElement, there are different ways to serialize this object to xml, for this example, we are going to do it "manually".
[code language="c#"]public override System.Xml.XmlElement Serialize () { // we create the xml document XmlDocument doc = new XmlDocument (); // create the root element XmlElement root = doc.CreateElement ("labeller"); // this is a special attribute that CCNet Will ignore, this is used for loading configuration files. This allows the deserializer to know exactly what type of object to load with out having to look at all the labellers first. root.SetAttribute ("ccnetconfigType", string.Format ("{0}, {1}", this.GetType ().FullName, this.GetType ().Assembly.GetName ().Name)); // set the type attribute to the type of labeller this is. root.SetAttribute ("type", this.TypeName); // create the element for the releaseDate XmlElement ele = doc.CreateElement ("releaseDate"); // set the text of the element to the value passing it through the CheckRequired method to validate the value. ele.InnerText = Util.CheckRequired(this,"releaseDate",this.ReleaseDate.ToString ("yyyy/MM/dd")); // add the element to the root element. root.AppendChild (ele); // check if the increment on failure has a value. if ( this.IncrementOnFailure.HasValue ) { // since it does create the element ele = doc.CreateElement ("incrementOnFailure"); // set the text to the value. ele.InnerText = this.IncrementOnFailure.Value.ToString (); // add it to the root element. root.AppendChild (ele); } // return the root element. return root; }[/code]
Finally we will add the logic to deserialize this labeller
[code language="C#"]public override void Deserialize ( System.Xml.XmlElement element ) { // first we set everything to a default value. this._releaseDate = DateTime.Now.Date; this.IncrementOnFailure = null; // check if we can convert the element to this type of Labeller if ( string.Compare (element.GetAttribute ("type"), this.TypeName, false) != 0 ) throw new InvalidCastException (string.Format ("Unable to convert {0} to a {1}", element.GetAttribute ("type"), this.TypeName)); DateTime dt = DateTime.Now.Date; // this method will find the releaseDate value if it is an attribute or an element string myValue = Util.GetElementOrAttributeValue ("releaseDate", element); if ( !string.IsNullOrEmpty ) DateTime.TryParse (myValue, out dt); this.ReleaseDate = dt; // now get the incrementOnFailure value. myValue = Util.GetElementOrAttributeValue ("incrementOnFailure",element); if ( !string.IsNullOrEmpty(myValue) ) this.IncrementOnFailure = string.Compare ( myValue, bool.TrueString, true ) == 0; }[/code]
And we created a provider for a custom Configuration Block that is not supported by default by CCNet.
Filed Under [ CCnetConfig.CCNet CCNetConfig.Core Extending CCNetConfig ]
Ryan Conrad posted @ Sunday, September 10, 2006 3:48 PM | Comments (0)
Team Foundation Tools on CodePlex
Buck Hodges put together a nice list of tools available for Team Foundation Server on CodePlex. While this list does not contain this project, and I don't really know if it sould, it does link to the TFS Plug-in for CruiseControl.NET and about 10 other projects. If you use TFS, it's worth at least a look.
Filed Under [ CodePlex Continuous Integration CruiseControl.NET TFS TFS Plugin Visual Studio ]
Ryan Conrad posted @ Friday, September 08, 2006 10:22 PM | Comments (0)
Nightly Binaries and Sources now Available
Nightly builds and sources are now available. These and previous builds are available for download and are updated any time there is a change to the source. The nightly builds are not considered stable, stable releases will be posted on the CodePlex Site and via automatic updates.
Filed Under [ CCNetConfig CodePlex News Release ]
Ryan Conrad posted @ Friday, September 08, 2006 10:12 PM | Comments (0)
CCNet Build Restrictions and Project Relationships
I stumbled upon this post by Jay Flowers about a custom branch of CCNet that has user restrictions to forcing a build and better project relationships. The project relationships can stop project B from building if project A failed, is checking for modifications etc. These are some interesting additions to ccnet, I will keep an on these changes and if they go further and the updates that jay mentions he is going to make happen I may add support for these in ccnetconfig.
Filed Under [ CCNetConfig CCnetConfig.CCNet CCNetConfig.Core Continuous Integration CruiseControl.NET Tools ]
Ryan Conrad posted @ Friday, September 08, 2006 7:51 PM | Comments (0)
Beta 1 Released
The first Beta Release (0.1.0.28) is now available via codeplex and AutoUpdates
Technorati Tags:[ CCNetConfig ]
Filed Under [ CCNetConfig Release ]
Ryan Conrad posted @ Tuesday, September 05, 2006 3:04 PM | Comments (0)
Powered by Subtext - Version: 1.9.5.176
Copyright © 2006 - 2008 Ryan Conrad. All Rights Reserved. Privacy Policy