I have implemented a custom script task for NAnt which makes progress
reporting back to CCNet much easier. Progress reporting is accomplished
by inserting XML into a file which is read by CCNet to display progress
information. See
http://confluence.public.thoughtworks.org/display/CCNETCOMM/Viewing+build+progress+with+Nant+and+MSBuild
for official details.
I am attaching the script for anyone to use. What I do is:
1) save the contents of the script below in a file named CCNet-progress.xml
2) include the new file in any NAnt script which will want to utilize it
like:
<include buildfile="CCnet-progress.xml"/>
3) call the progress reporter when you want to update the progress of
your task, like this:
<CCnet-progress message="Beginning the web site clean-up"
file="${CCNetListenerFile}"/>
and that's it. I usually do a little more, like set a true/false
variable like this:
<property name="progress.logging" value="false"/>
<property name="progress.logging" value="true"
if="${property::exists('CCNetListenerFile')}"/>
and then my actual progress logging calls look like:
<CCnet-progress message="Beginning the web site clean-up"
file="${CCNetListenerFile}" if="${progress.logging}"/>
This allows my NAnt scripts to continue working when I am using them
outside of CCNet.
Here's the file:
======================================================================
<?xml version="1.0" encoding="utf-8"?>
<project name="CCNet-extensions">
<script language="C#">
<references>
<include name="System.Xml.dll"/>
</references>
<imports>
<import namespace="System.Xml"/>
</imports>
<code><![CDATA[
[TaskName("CCNet-progress")]
public class TestTask : Task
{
#region Private Instance Fields
private string _message;
private string _file;
#endregion Private Instance Fields
#region Public Instance Properties
[TaskAttribute("message", Required=true)]
[StringValidator(AllowEmpty=false)]
public string Message
{
get { return _message; }
set { _message = value; }
}
[TaskAttribute("file", Required=true)]
[StringValidator(AllowEmpty=false)]
public string FileName
{
get { return _file; }
set { _file = value; }
}
#endregion Public Instance Properties
#region Override implementation of Task
protected override void ExecuteTask()
{
XmlDocument progressXML = new XmlDocument();
if (File.Exists(_file))
{
progressXML.Load (_file);
}
else
{
XmlElement newDE =
progressXML.CreateElement("data");
progressXML.AppendChild (newDE);
}
XmlElement newNode = progressXML.CreateElement ("Item");
newNode.SetAttribute ("Time", DateTime.Now.ToString ());
newNode.SetAttribute ("Data", _message);
progressXML.DocumentElement.AppendChild (newNode);
progressXML.Save (_file);
}
#endregion Override implementation of Task
}
]]></code>
</script>
</project>
==============================================================
------------------------------------------------------------------------------
Come build with us! The BlackBerry® Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay
ahead of the curve. Join us from November 9-12, 2009. Register now!
http://p.sf.net/sfu/devconf
_______________________________________________
NAnt-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/nant-users