uppercutbuild 1.3.0.0 → 1.4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. data/docs/README +20 -2
  2. data/docs/Samples/CC.NET/server/ccnet.config +8 -2
  3. data/lib/build.bat +1 -3
  4. data/lib/build/Castle.Core.dll +0 -0
  5. data/lib/build/Castle.DynamicProxy2.dll +0 -0
  6. data/lib/build/Castle.MicroKernel.dll +0 -0
  7. data/lib/build/Castle.Windsor.dll +0 -0
  8. data/lib/build/UppercuT.xml +1 -2
  9. data/lib/build/analyze.step +9 -44
  10. data/lib/build/analyzers/gallio.test.step +13 -49
  11. data/lib/build/analyzers/mbunit2.test.step +12 -48
  12. data/lib/build/analyzers/metrics.step +106 -0
  13. data/lib/build/analyzers/moma.step +13 -49
  14. data/lib/build/analyzers/ncover.step +14 -50
  15. data/lib/build/analyzers/ndepend.step +12 -47
  16. data/lib/build/analyzers/nitriq.step +13 -49
  17. data/lib/build/analyzers/nunit.test.step +18 -54
  18. data/lib/build/analyzers/storevil.test.step +17 -53
  19. data/lib/build/analyzers/test.step +16 -44
  20. data/lib/build/analyzers/xunit.test.step +13 -49
  21. data/lib/build/compile.step +94 -63
  22. data/lib/build/customize.build +8 -5
  23. data/lib/build/customizers/item.template +2 -1
  24. data/lib/build/default.build +27 -64
  25. data/lib/build/deploymentBuilder.step +60 -60
  26. data/lib/build/environmentBuilder.step +43 -61
  27. data/lib/build/gemsBuild.step +8 -44
  28. data/lib/build/gemsPrepare.step +17 -54
  29. data/lib/build/generateBuildInfo.step +9 -45
  30. data/lib/build/ilmerge.build +14 -60
  31. data/lib/build/nugetBuild.step +12 -45
  32. data/lib/build/nugetPrepare.step +28 -55
  33. data/lib/build/obfuscate.step +12 -45
  34. data/lib/build/open.build +28 -58
  35. data/lib/build/package.step +41 -63
  36. data/lib/build/policyChecks.step +8 -44
  37. data/lib/build/uc.exe +0 -0
  38. data/lib/build/uc.exe.config +3 -0
  39. data/lib/build/updateAssemblies.build +11 -57
  40. data/lib/build/uppercut.dll +0 -0
  41. data/lib/build/uppercut.tasks.dll +0 -0
  42. data/lib/build/versionBuilder.step +12 -44
  43. data/lib/build/versioners/git.step +8 -45
  44. data/lib/build/versioners/hg.step +8 -45
  45. data/lib/build/versioners/svn.step +8 -45
  46. data/lib/build/versioners/tfs.step +7 -43
  47. data/lib/build/zip.build +17 -63
  48. data/lib/lib/NAnt/NAnt.CompressionTasks.dll +0 -0
  49. data/lib/lib/NAnt/NAnt.Contrib.Tasks.dll +0 -0
  50. data/lib/lib/NAnt/NAnt.Core.dll +0 -0
  51. data/lib/lib/NAnt/NAnt.DotNetTasks.dll +0 -0
  52. data/lib/lib/NAnt/NAnt.MSNetTasks.dll +0 -0
  53. data/lib/lib/NAnt/NAnt.NUnit.dll +0 -0
  54. data/lib/lib/NAnt/NAnt.NUnit1Tasks.dll +0 -0
  55. data/lib/lib/NAnt/NAnt.NUnit2Tasks.dll +0 -0
  56. data/lib/lib/NAnt/NAnt.SourceControlTasks.dll +0 -0
  57. data/lib/lib/NAnt/NAnt.VSNetTasks.dll +0 -0
  58. data/lib/lib/NAnt/NAnt.VisualCppTasks.dll +0 -0
  59. data/lib/lib/NAnt/NAnt.Win32Tasks.dll +0 -0
  60. data/lib/lib/NAnt/NAnt.exe +0 -0
  61. data/lib/lib/NAnt/NAnt.exe.config +333 -136
  62. data/lib/lib/NAnt/NDoc.Documenter.NAnt.dll +0 -0
  63. data/lib/lib/NAnt/SLiNgshoT.Core.dll +0 -0
  64. data/lib/lib/NAnt/SLiNgshoT.exe +0 -0
  65. data/lib/lib/NAnt/extensions/common/2.0/NAnt.MSBuild.dll +0 -0
  66. data/lib/lib/NuGet/NuGet.exe +0 -0
  67. data/lib/open.bat +1 -1
  68. data/lib/settings/LOCAL.settings +3 -1
  69. data/lib/settings/UppercuT.config +10 -7
  70. data/lib/test.bat +2 -2
  71. data/lib/zip.bat +2 -2
  72. metadata +42 -89
  73. data/lib/lib/NAnt/MSITaskErrors.mst +0 -0
  74. data/lib/lib/NAnt/MSITaskTemplate.msi +0 -0
  75. data/lib/lib/NAnt/MSMTaskErrors.mst +0 -0
  76. data/lib/lib/NAnt/MSMTaskTemplate.msm +0 -0
  77. data/lib/lib/NAnt/NDepend.Build.NAntTasks.dll +0 -0
  78. data/lib/lib/NAnt/extensions/common/2.0/NAnt.MSBuild.xml +0 -36
  79. data/lib/lib/NAnt/lib/mono/1.0/NDoc.Core.dll +0 -0
  80. data/lib/lib/NAnt/lib/mono/1.0/NDoc.Documenter.Msdn.dll +0 -0
  81. data/lib/lib/NAnt/lib/mono/1.0/NDoc.ExtendedUI.dll +0 -0
  82. data/lib/lib/NAnt/lib/mono/1.0/nunit.core.dll +0 -0
  83. data/lib/lib/NAnt/lib/mono/1.0/nunit.framework.dll +0 -0
  84. data/lib/lib/NAnt/lib/mono/1.0/nunit.util.dll +0 -0
  85. data/lib/lib/NAnt/lib/mono/2.0/NDoc.Core.dll +0 -0
  86. data/lib/lib/NAnt/lib/mono/2.0/NDoc.Documenter.Msdn.dll +0 -0
  87. data/lib/lib/NAnt/lib/mono/2.0/NDoc.ExtendedUI.dll +0 -0
  88. data/lib/lib/NAnt/lib/mono/2.0/nunit.core.dll +0 -0
  89. data/lib/lib/NAnt/lib/mono/2.0/nunit.framework.dll +0 -0
  90. data/lib/lib/NAnt/lib/mono/2.0/nunit.util.dll +0 -0
  91. data/lib/lib/NAnt/lib/net/1.1/NDoc.Core.dll +0 -0
  92. data/lib/lib/NAnt/lib/net/1.1/NDoc.Documenter.Msdn.dll +0 -0
  93. data/lib/lib/NAnt/lib/net/1.1/NDoc.ExtendedUI.dll +0 -0
  94. data/lib/lib/NAnt/lib/net/1.1/nunit.core.dll +0 -0
  95. data/lib/lib/NAnt/lib/net/1.1/nunit.framework.dll +0 -0
  96. data/lib/lib/NAnt/lib/net/1.1/nunit.util.dll +0 -0
  97. data/lib/lib/NAnt/lib/net/2.0/NDoc.Core.dll +0 -0
  98. data/lib/lib/NAnt/lib/net/2.0/NDoc.Documenter.Msdn.dll +0 -0
  99. data/lib/lib/NAnt/lib/net/2.0/NDoc.ExtendedUI.dll +0 -0
  100. data/lib/lib/NAnt/lib/net/2.0/nunit.core.dll +0 -0
  101. data/lib/lib/NAnt/lib/net/2.0/nunit.framework.dll +0 -0
  102. data/lib/lib/NAnt/lib/net/2.0/nunit.util.dll +0 -0
data/docs/README CHANGED
@@ -55,10 +55,28 @@ Donations Accepted - If you enjoy using this product or it has saved you time an
55
55
  It helps keep to the product updated, pays for site hosting, etc. https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=4410250
56
56
 
57
57
  # RELEASE NOTES
58
- =1.1.x.x=
59
- * Adding in support for xUnit.
58
+ =1.x.x.x=
60
59
  * Adding in support for StorEvil.
61
60
 
61
+ ==1.4.0.0==
62
+ * FIX: Issue 33 - Cannot build .NET 1.0 and 1.1 Solutions - see http://code.google.com/p/uppercut/issues/detail?id=33 for details. (412)
63
+ * Issue 37 - Enhancement: Add support for Microsoft's built-in code metrics. New settings have been added to the uppercut.config: <property name="app.metric" value="C:${path.separator}Program Files (x86)${path.separator}Microsoft Visual Studio 10.0${path.separator}Team Tools${path.separator}Static Analysis Tools${path.separator}FxCop${path.separator}Metrics.exe" overwrite="false" /> - see http://code.google.com/p/uppercut/issues/detail?id=37 for details. (410)
64
+ * Issue 34 - Enhancement: MSBuild output is logged for CC.NET to merge in - see http://code.google.com/p/uppercut/issues/detail?id=34 for details. (410)
65
+ * Issue 36 - Enhancement: Open creates SolutionVersion if missing - see http://code.google.com/p/uppercut/issues/detail?id=36 for details. (407)
66
+ * FIX: Issue 35 - Open fails on Windows platform when VSLauncher.exe is missing - see http://code.google.com/p/uppercut/issues/detail?id=35 for details. (407)
67
+ * Issue 28 - Enhancement: Allow setting of Ruby and PowerShell path via variable - see http://code.google.com/p/uppercut/issues/detail?id=28 for details. (405)
68
+ * Issue 38 - Enhancement - Pass properties to ruby/powershell extensions. New settings have been added to the uppercut.config: <property name="app.ruby" value="C:\Ruby\bin\ruby.exe" overwrite="false" /> <property name="app.powershell" value="%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe" overwrite="false" /> and this setting has been removed: <property name="allow.powershell.unrestricted" value="false" overwrite="false" /> - see http://code.google.com/p/uppercut/issues/detail?id=38 for details. (404)
69
+ * Console Logging is very reduced with all detail to build.log. (400)
70
+ * Issue 32: Upgrade to NAnt 0.91 Alpha 2 - see http://code.google.com/p/uppercut/issues/detail?id=32 for details. (400)
71
+ * FIX: Settings file values should be able to have more than one other settings value token - see https://github.com/chucknorris/uppercut/issues/3 for details. (400)
72
+ * FIX : Nunit now generates a report when the tests fail. (399)
73
+ * FIX: Issue 31 - Log file copied to code_drop directory before build is complete - see http://code.google.com/p/uppercut/issues/detail?id=31 for details. (396)
74
+ * Issue 29 - Handle Readonly Files during build - allows you to build against source controls that mark files readonly (looking at you TFS) - see http://code.google.com/p/uppercut/issues/detail?id=29 for details. (396)
75
+ * FIX: Obfuscation should find files that are versioning with SemVer. (395)
76
+ * Allowing arguments to be passed into the build.bat file as pass through to nant. (389)
77
+ * NuGet support enhancements to allow subdirectories for building multiple nuget packages in a single solution. (388)
78
+ * Adding in _PublishedApplications known folder. - see http://code.google.com/p/uppercut/issues/detail?id=27 for details. (386)
79
+
62
80
  ==1.3.0.0==
63
81
  * Fix for spaces in the path when trying to resolve the revision for SVN - see http://code.google.com/p/uppercut/issues/detail?id=25 for details. (385)
64
82
  * xUnit Support for automated testing. Will handle multiple test assemblies for you. (384)
@@ -28,10 +28,16 @@
28
28
  <merge>
29
29
  <files>
30
30
  <file>$(working_directory)\$(projectName)\build_output\build_artifacts\*.xml</file>
31
- <file>$(working_directory)\$(projectName)\build_output\build_artifacts\mbunit\*-results.xml</file>
32
- <file>$(working_directory)\$(projectName)\build_output\build_artifacts\nunit\*-results.xml</file>
31
+ <file>$(working_directory)\$(projectName)\build_output\build_artifacts\mbunit\*-results.xml</file>
32
+ <file>$(working_directory)\$(projectName)\build_output\build_artifacts\mbunit2\*-results.xml</file>
33
+ <file>$(working_directory)\$(projectName)\build_output\build_artifacts\moma\*-results.xml</file>
33
34
  <file>$(working_directory)\$(projectName)\build_output\build_artifacts\ncover\*-results.xml</file>
34
35
  <file>$(working_directory)\$(projectName)\build_output\build_artifacts\ndepend\*.xml</file>
36
+ <file>$(working_directory)\$(projectName)\build_output\build_artifacts\nitriq\*-results.xml</file>
37
+ <file>$(working_directory)\$(projectName)\build_output\build_artifacts\nunit\*-results.xml</file>
38
+ <file>$(working_directory)\$(projectName)\build_output\build_artifacts\storevil\*-results.xml</file>
39
+ <file>$(working_directory)\$(projectName)\build_output\build_artifacts\xunit\*-results.xml</file>
40
+ <file>$(working_directory)\$(projectName)\build_output\build_artifacts\compile\*-results.xml</file>
35
41
 
36
42
  </files>
37
43
  </merge>
data/lib/build.bat CHANGED
@@ -3,8 +3,6 @@
3
3
  ::Project UppercuT - http://uppercut.googlecode.com
4
4
  ::No edits to this file are required - http://uppercut.pbwiki.com
5
5
 
6
- if '%2' NEQ '' goto usage
7
- if '%3' NEQ '' goto usage
8
6
  if '%1' == '/?' goto usage
9
7
  if '%1' == '-?' goto usage
10
8
  if '%1' == '?' goto usage
@@ -14,7 +12,7 @@ SET DIR=%~d0%~p0%
14
12
  SET NANT="%DIR%lib\Nant\nant.exe"
15
13
  SET build.config.settings="%DIR%settings\UppercuT.config"
16
14
 
17
- %NANT% %1 /f:.\build\default.build -D:build.config.settings=%build.config.settings%
15
+ %NANT% -logger:NAnt.Core.DefaultLogger -quiet /f:.\build\default.build -D:build.config.settings=%build.config.settings% %*
18
16
 
19
17
  if %ERRORLEVEL% NEQ 0 goto errors
20
18
 
Binary file
Binary file
Binary file
Binary file
@@ -1,5 +1,4 @@
1
1
  <?xml version="1.0" ?>
2
2
  <uppercut>
3
- <version>1.3.0.0</version>
3
+ <version>1.4.0.0</version>
4
4
  </uppercut>
5
-
@@ -1,5 +1,5 @@
1
1
  <?xml version="1.0" encoding="utf-8" ?>
2
- <project name="Analyzer" default="go">
2
+ <project name="Analyzers" default="go">
3
3
  <!-- Project UppercuT - http://projectuppercut.org -->
4
4
  <!-- DO NOT EDIT THIS FILE - Add custom tasks in BuildTasks.Custom folder with file by the same name - find out more at http://uppercut.pbwiki.com -->
5
5
  <property name="build.config.settings" value="__NONE__" overwrite="false" />
@@ -11,69 +11,34 @@
11
11
  <property name="folder.build_scripts" value="build" overwrite="false" />
12
12
  <property name="folder.build_scripts_custom" value="build.custom" overwrite="false" />
13
13
  <property name="dirs.build_scripts_custom" value="${dirs.current}${path.separator}${path.to.toplevel}${path.separator}${folder.build_scripts_custom}" />
14
- <property name="file.custom.step.before" value="${dirs.build_scripts_custom}${path.separator}${file.current.no_extension}.pre.step" />
15
- <property name="file.custom.step.after" value="${dirs.build_scripts_custom}${path.separator}${file.current.no_extension}.post.step" />
16
- <property name="file.custom.step.replace" value="${dirs.build_scripts_custom}${path.separator}${file.current.no_extension}.replace.step" />
17
14
  <property name="is.replaced" value="false" />
18
15
  <property name="fail.build.on.error" value="true" />
19
16
 
20
17
  <target name="go" depends="run_tasks" />
21
18
 
22
19
  <target name="run_tasks">
23
- <echo message="Running ${project::get-name()} tasks." />
20
+ <echo level="Warning" message="" />
21
+ <echo level="Warning" message="====================" />
22
+ <echo level="Warning" message="${project::get-name()}" />
23
+ <echo level="Warning" message="====================" />
24
24
  <call target="prepare" if="${target::exists('prepare')}" />
25
- <call target="custom_tasks_before" if="${target::exists('custom_tasks_before')}" />
26
- <call target="custom_tasks_replace" if="${target::exists('custom_tasks_replace')}" />
25
+ <customExtension extends="${project::get-buildfile-path()}" type="pre" failonerror="${fail.build.on.error}" />
26
+ <customExtension extends="${project::get-buildfile-path()}" type="replace" failonerror="${fail.build.on.error}" />
27
27
  <call target="run_normal_tasks" if="${not is.replaced}" />
28
- <call target="custom_tasks_after" if="${target::exists('custom_tasks_after')}" />
28
+ <customExtension extends="${project::get-buildfile-path()}" type="post" failonerror="${fail.build.on.error}" />
29
29
  </target>
30
30
 
31
31
  <target name="run_normal_tasks"
32
32
  depends="run_analyzers"
33
33
  description="Analyzing project for quality indicators." />
34
34
 
35
- <target name="custom_tasks_before">
36
- <echo message="Running custom tasks if ${file.custom.step.before} exists." />
37
- <nant buildfile="${file.custom.step.before}" inheritall="true" if="${file::exists(file.custom.step.before)}" failonerror="${fail.build.on.error}" />
38
- <exec program="powershell.exe" if="${file::exists(file.custom.step.before + '.ps1')}" failonerror="${fail.build.on.error}">
39
- <arg value="${path::get-full-path(file.custom.step.before + '.ps1')}" />
40
- </exec>
41
- <exec program="ruby.exe" if="${file::exists(file.custom.step.before + '.rb')}" failonerror="${fail.build.on.error}">
42
- <arg value="${path::get-full-path(file.custom.step.before + '.rb')}" />
43
- </exec>
44
- </target>
45
-
46
- <target name="custom_tasks_replace">
47
- <echo message="Running custom tasks instead of normal tasks if ${file.custom.step.replace} exists." />
48
- <property name="is.replaced" value="true" if="${file::exists(file.custom.step.replace)}" />
49
- <nant buildfile="${file.custom.step.replace}" inheritall="true" if="${file::exists(file.custom.step.replace)}" failonerror="${fail.build.on.error}" />
50
- <property name="is.replaced" value="true" if="${file::exists(file.custom.step.replace + '.ps1')}" />
51
- <exec program="powershell.exe" if="${file::exists(file.custom.step.replace + '.ps1')}" failonerror="${fail.build.on.error}" >
52
- <arg value="${path::get-full-path(file.custom.step.replace + '.ps1')}" />
53
- </exec>
54
- <property name="is.replaced" value="true" if="${file::exists(file.custom.step.replace + '.rb')}" />
55
- <exec program="ruby.exe" if="${file::exists(file.custom.step.replace + '.rb')}" failonerror="${fail.build.on.error}" >
56
- <arg value="${path::get-full-path(file.custom.step.replace + '.rb')}" />
57
- </exec>
58
- </target>
59
-
60
35
  <target name="run_analyzers">
61
36
  <nant buildfile="${dirs.current}${path.separator}analyzers${path.separator}test.step" inheritall="true" />
62
37
  <nant buildfile="${dirs.current}${path.separator}analyzers${path.separator}ncover.step" inheritall="true" failonerror="false" />
63
38
  <nant buildfile="${dirs.current}${path.separator}analyzers${path.separator}ndepend.step" inheritall="true" failonerror="false" />
64
39
  <nant buildfile="${dirs.current}${path.separator}analyzers${path.separator}nitriq.step" inheritall="true" failonerror="false" />
40
+ <nant buildfile="${dirs.current}${path.separator}analyzers${path.separator}metrics.step" inheritall="true" failonerror="false" />
65
41
  <nant buildfile="${dirs.current}${path.separator}analyzers${path.separator}moma.step" inheritall="true" failonerror="false" />
66
42
  </target>
67
43
 
68
- <target name="custom_tasks_after">
69
- <echo message="Running custom tasks if ${file.custom.step.after} exists." />
70
- <nant buildfile="${file.custom.step.after}" inheritall="true" if="${file::exists(file.custom.step.after)}" failonerror="${fail.build.on.error}" />
71
- <exec program="powershell.exe" if="${file::exists(file.custom.step.after + '.ps1')}" failonerror="${fail.build.on.error}" >
72
- <arg value="${path::get-full-path(file.custom.step.after + '.ps1')}" />
73
- </exec>
74
- <exec program="ruby.exe" if="${file::exists(file.custom.step.after + '.rb')}" failonerror="${fail.build.on.error}" >
75
- <arg value="${path::get-full-path(file.custom.step.after + '.rb')}" />
76
- </exec>
77
- </target>
78
-
79
44
  </project>
@@ -22,66 +22,41 @@
22
22
  <property name="file.test_results" value="gallio-results" overwrite="false" />
23
23
  <property name="time.limit.in.seconds" value="240" />
24
24
 
25
- <property name="file.custom.step.before" value="${dirs.build_scripts_custom}${path.separator}${file.current.no_extension}.pre.step" />
26
- <property name="file.custom.step.after" value="${dirs.build_scripts_custom}${path.separator}${file.current.no_extension}.post.step" />
27
- <property name="file.custom.step.replace" value="${dirs.build_scripts_custom}${path.separator}${file.current.no_extension}.replace.step" />
28
25
  <property name="is.replaced" value="false" />
29
26
  <property name="fail.build.on.error" value="true" />
30
27
 
31
28
  <target name="go" depends="run_tasks" />
32
29
 
33
- <target name="run_tasks">
34
- <echo message="Running ${project::get-name()} tasks." />
30
+ <target name="run_tasks">
31
+ <echo level="Warning" message="" />
32
+ <echo level="Warning" message="====================" />
33
+ <echo level="Warning" message="${project::get-name()}" />
34
+ <echo level="Warning" message="====================" />
35
35
  <call target="prepare" if="${target::exists('prepare')}" />
36
- <call target="custom_tasks_before" if="${target::exists('custom_tasks_before')}" />
37
- <call target="custom_tasks_replace" if="${target::exists('custom_tasks_replace')}" />
36
+ <customExtension extends="${project::get-buildfile-path()}" type="pre" failonerror="${fail.build.on.error}" />
37
+ <customExtension extends="${project::get-buildfile-path()}" type="replace" failonerror="${fail.build.on.error}" />
38
38
  <call target="run_normal_tasks" if="${not is.replaced}" />
39
- <call target="custom_tasks_after" if="${target::exists('custom_tasks_after')}" />
39
+ <customExtension extends="${project::get-buildfile-path()}" type="post" failonerror="${fail.build.on.error}" />
40
40
  </target>
41
41
 
42
42
  <target name="run_normal_tasks"
43
43
  depends="run_tests"
44
44
  description="Testing with Gallio." />
45
45
 
46
- <target name="custom_tasks_before">
47
- <echo message="Running custom tasks if ${file.custom.step.before} exists." />
48
- <nant buildfile="${file.custom.step.before}" inheritall="true" if="${file::exists(file.custom.step.before)}" failonerror="${fail.build.on.error}" />
49
- <exec program="powershell.exe" if="${file::exists(file.custom.step.before + '.ps1')}" failonerror="${fail.build.on.error}">
50
- <arg value="${path::get-full-path(file.custom.step.before + '.ps1')}" />
51
- </exec>
52
- <exec program="ruby.exe" if="${file::exists(file.custom.step.before + '.rb')}" failonerror="${fail.build.on.error}">
53
- <arg value="${path::get-full-path(file.custom.step.before + '.rb')}" />
54
- </exec>
55
- </target>
56
-
57
- <target name="custom_tasks_replace">
58
- <echo message="Running custom tasks instead of normal tasks if ${file.custom.step.replace} exists." />
59
- <property name="is.replaced" value="true" if="${file::exists(file.custom.step.replace)}" />
60
- <nant buildfile="${file.custom.step.replace}" inheritall="true" if="${file::exists(file.custom.step.replace)}" failonerror="${fail.build.on.error}" />
61
- <property name="is.replaced" value="true" if="${file::exists(file.custom.step.replace + '.ps1')}" />
62
- <exec program="powershell.exe" if="${file::exists(file.custom.step.replace + '.ps1')}" failonerror="${fail.build.on.error}" >
63
- <arg value="${path::get-full-path(file.custom.step.replace + '.ps1')}" />
64
- </exec>
65
- <property name="is.replaced" value="true" if="${file::exists(file.custom.step.replace + '.rb')}" />
66
- <exec program="ruby.exe" if="${file::exists(file.custom.step.replace + '.rb')}" failonerror="${fail.build.on.error}" >
67
- <arg value="${path::get-full-path(file.custom.step.replace + '.rb')}" />
68
- </exec>
69
- </target>
70
-
71
46
  <target name="prepare">
72
- <echo message="Removing and adding ${dirs.test_results}."/>
47
+ <echo level="Warning" message="Removing and adding ${dirs.test_results}."/>
73
48
  <delete dir="${dirs.test_results}" failonerror="false" />
74
49
  <mkdir dir="${dirs.test_results}" />
75
50
  </target>
76
51
 
77
52
  <target name="load_tasks">
78
- <echo message="Loading Gallio Nant Tasks from Program Files." />
53
+ <echo level="Warning" message="Loading Gallio Nant Tasks from Program Files." />
79
54
  <loadtasks assembly="C:${path.separator}Program Files (x86)${path.separator}Gallio${path.separator}bin${path.separator}Gallio.NAntTasks.dll" if="${file::exists('C:' + path.separator + 'Program Files (x86)' + path.separator + 'Gallio' + path.separator + 'bin' + path.separator + 'Gallio.NAntTasks.dll')}" />
80
55
  <loadtasks assembly="C:${path.separator}Program Files${path.separator}Gallio${path.separator}bin${path.separator}Gallio.NAntTasks.dll" if="${file::exists('C:' + path.separator + 'Program Files' + path.separator + 'Gallio' + path.separator + 'bin' + path.separator + 'Gallio.NAntTasks.dll')}" />
81
56
  </target>
82
57
 
83
58
  <target name="run_tests" depends="prepare,load_tasks" description="Running Unit Tests">
84
- <echo message="Running tests using Gallio and putting results in ${dirs.test_results}."/>
59
+ <echo level="Warning" message="Running tests using Gallio and putting results in ${dirs.test_results}."/>
85
60
  <gallio working-directory="${dirs.build}"
86
61
  report-types="Html;Xml;Text"
87
62
  report-directory="${dirs.test_results}"
@@ -105,7 +80,7 @@
105
80
  </target>
106
81
 
107
82
  <target name="run_all_tests" depends="prepare,load_tasks" description="Running All Unit Tests">
108
- <echo message="Running all tests (including integration tests) using Gallio and putting results in ${dirs.test_results}."/>
83
+ <echo level="Warning" message="Running all tests (including integration tests) using Gallio and putting results in ${dirs.test_results}."/>
109
84
  <gallio working-directory="${dirs.build}"
110
85
  report-types="Html;Xml;Text"
111
86
  report-directory="${dirs.test_results}"
@@ -126,19 +101,8 @@
126
101
  </target>
127
102
 
128
103
  <target name="open_results">
129
- <echo message="Opening results - ${path::get-full-path(dirs.test_results) + path.separator + file.test_results + '.html'}" />
104
+ <echo level="Warning" message="Opening results - ${path::get-full-path(dirs.test_results) + path.separator + file.test_results + '.html'}" />
130
105
  <results display="${path::get-full-path(dirs.test_results) + path.separator + file.test_results + '.html'}" />
131
106
  </target>
132
107
 
133
- <target name="custom_tasks_after">
134
- <echo message="Running custom tasks if ${file.custom.step.after} exists." />
135
- <nant buildfile="${file.custom.step.after}" inheritall="true" if="${file::exists(file.custom.step.after)}" failonerror="${fail.build.on.error}" />
136
- <exec program="powershell.exe" if="${file::exists(file.custom.step.after + '.ps1')}" failonerror="${fail.build.on.error}" >
137
- <arg value="${path::get-full-path(file.custom.step.after + '.ps1')}" />
138
- </exec>
139
- <exec program="ruby.exe" if="${file::exists(file.custom.step.after + '.rb')}" failonerror="${fail.build.on.error}" >
140
- <arg value="${path::get-full-path(file.custom.step.after + '.rb')}" />
141
- </exec>
142
- </target>
143
-
144
108
  </project>
@@ -20,9 +20,6 @@
20
20
  <property name="dirs.build_artifacts" value="${path::get-full-path(dirs.build)}${path.separator}${folder.build_artifacts}" />
21
21
  <property name="dirs.test_results" value="${dirs.build_artifacts}${path.separator}mbunit2" overwrite="false" />
22
22
  <property name="file.test_results" value="mbunit-results" overwrite="false" />
23
- <property name="file.custom.step.before" value="${dirs.build_scripts_custom}${path.separator}${file.current.no_extension}.pre.step" />
24
- <property name="file.custom.step.after" value="${dirs.build_scripts_custom}${path.separator}${file.current.no_extension}.post.step" />
25
- <property name="file.custom.step.replace" value="${dirs.build_scripts_custom}${path.separator}${file.current.no_extension}.replace.step" />
26
23
  <property name="is.replaced" value="false" />
27
24
  <property name="fail.build.on.error" value="true" />
28
25
 
@@ -44,52 +41,30 @@
44
41
 
45
42
  <target name="go" depends="run_tasks" />
46
43
 
47
- <target name="run_tasks">
48
- <echo message="Running ${project::get-name()} tasks." />
44
+ <target name="run_tasks">
45
+ <echo level="Warning" message="" />
46
+ <echo level="Warning" message="====================" />
47
+ <echo level="Warning" message="${project::get-name()}" />
48
+ <echo level="Warning" message="====================" />
49
49
  <call target="prepare" if="${target::exists('prepare')}" />
50
- <call target="custom_tasks_before" if="${target::exists('custom_tasks_before')}" />
51
- <call target="custom_tasks_replace" if="${target::exists('custom_tasks_replace')}" />
50
+ <customExtension extends="${project::get-buildfile-path()}" type="pre" failonerror="${fail.build.on.error}" />
51
+ <customExtension extends="${project::get-buildfile-path()}" type="replace" failonerror="${fail.build.on.error}" />
52
52
  <call target="run_normal_tasks" if="${not is.replaced}" />
53
- <call target="custom_tasks_after" if="${target::exists('custom_tasks_after')}" />
53
+ <customExtension extends="${project::get-buildfile-path()}" type="post" failonerror="${fail.build.on.error}" />
54
54
  </target>
55
55
 
56
56
  <target name="run_normal_tasks"
57
57
  depends="run_tests"
58
58
  description="Testing with MbUnit v2." />
59
59
 
60
- <target name="custom_tasks_before">
61
- <echo message="Running custom tasks if ${file.custom.step.before} exists." />
62
- <nant buildfile="${file.custom.step.before}" inheritall="true" if="${file::exists(file.custom.step.before)}" failonerror="${fail.build.on.error}" />
63
- <exec program="powershell.exe" if="${file::exists(file.custom.step.before + '.ps1')}" failonerror="${fail.build.on.error}">
64
- <arg value="${path::get-full-path(file.custom.step.before + '.ps1')}" />
65
- </exec>
66
- <exec program="ruby.exe" if="${file::exists(file.custom.step.before + '.rb')}" failonerror="${fail.build.on.error}">
67
- <arg value="${path::get-full-path(file.custom.step.before + '.rb')}" />
68
- </exec>
69
- </target>
70
-
71
- <target name="custom_tasks_replace">
72
- <echo message="Running custom tasks instead of normal tasks if ${file.custom.step.replace} exists." />
73
- <property name="is.replaced" value="true" if="${file::exists(file.custom.step.replace)}" />
74
- <nant buildfile="${file.custom.step.replace}" inheritall="true" if="${file::exists(file.custom.step.replace)}" failonerror="${fail.build.on.error}" />
75
- <property name="is.replaced" value="true" if="${file::exists(file.custom.step.replace + '.ps1')}" />
76
- <exec program="powershell.exe" if="${file::exists(file.custom.step.replace + '.ps1')}" failonerror="${fail.build.on.error}" >
77
- <arg value="${path::get-full-path(file.custom.step.replace + '.ps1')}" />
78
- </exec>
79
- <property name="is.replaced" value="true" if="${file::exists(file.custom.step.replace + '.rb')}" />
80
- <exec program="ruby.exe" if="${file::exists(file.custom.step.replace + '.rb')}" failonerror="${fail.build.on.error}" >
81
- <arg value="${path::get-full-path(file.custom.step.replace + '.rb')}" />
82
- </exec>
83
- </target>
84
-
85
60
  <target name="prepare">
86
- <echo message="Removing and adding ${dirs.test_results}."/>
61
+ <echo level="Warning" message="Removing and adding ${dirs.test_results}."/>
87
62
  <delete dir="${dirs.test_results}" failonerror="false" />
88
63
  <mkdir dir="${dirs.test_results}" />
89
64
  </target>
90
65
 
91
66
  <target name="run_tests" depends="prepare" description="Running Unit Tests">
92
- <echo message="Running tests using MbUnit and putting results in ${dirs.test_results}."/>
67
+ <echo level="Warning" message="Running tests using MbUnit and putting results in ${dirs.test_results}."/>
93
68
  <mbunit
94
69
  report-types="Html;Xml;Text"
95
70
  report-filename-format="${file.test_results}"
@@ -114,7 +89,7 @@
114
89
  </target>
115
90
 
116
91
  <target name="run_all_tests" depends="prepare" description="Running All Unit Tests">
117
- <echo message="Running all tests (including integration tests) using MbUnit and putting results in ${dirs.test_results}."/>
92
+ <echo level="Warning" message="Running all tests (including integration tests) using MbUnit and putting results in ${dirs.test_results}."/>
118
93
  <mbunit
119
94
  report-types="Html;Xml;Text"
120
95
  report-filename-format="${file.test_results}"
@@ -127,19 +102,8 @@
127
102
  </target>
128
103
 
129
104
  <target name="open_results">
130
- <echo message="Opening results - ${path::get-full-path(dirs.test_results) + path.separator + file.test_results + '.html'}" />
105
+ <echo level="Warning" message="Opening results - ${path::get-full-path(dirs.test_results) + path.separator + file.test_results + '.html'}" />
131
106
  <results display="${path::get-full-path(dirs.test_results) + path.separator + file.test_results + '.html'}" />
132
107
  </target>
133
108
 
134
- <target name="custom_tasks_after">
135
- <echo message="Running custom tasks if ${file.custom.step.after} exists." />
136
- <nant buildfile="${file.custom.step.after}" inheritall="true" if="${file::exists(file.custom.step.after)}" failonerror="${fail.build.on.error}" />
137
- <exec program="powershell.exe" if="${file::exists(file.custom.step.after + '.ps1')}" failonerror="${fail.build.on.error}" >
138
- <arg value="${path::get-full-path(file.custom.step.after + '.ps1')}" />
139
- </exec>
140
- <exec program="ruby.exe" if="${file::exists(file.custom.step.after + '.rb')}" failonerror="${fail.build.on.error}" >
141
- <arg value="${path::get-full-path(file.custom.step.after + '.rb')}" />
142
- </exec>
143
- </target>
144
-
145
109
  </project>
@@ -0,0 +1,106 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <project name="Visual Studio Code Metrics" default="go">
3
+ <!-- Project UppercuT - http://projectuppercut.org -->
4
+ <property name="build.config.settings" value="__NONE__" overwrite="false" />
5
+ <include buildfile="${build.config.settings}" if="${file::exists(build.config.settings)}" />
6
+ <property name="path.separator" value="${string::trim(path::combine(' ', ' '))}" />
7
+ <include buildfile="..${path.separator}csharp.functions" />
8
+ <property name="file.current.no_extension" value="metrics" />
9
+ <property name="dirs.current" value="${directory::get-parent-directory(project::get-buildfile-path())}" />
10
+ <property name="path.to.toplevel" value="..${path.separator}.." />
11
+ <property name="folder.build_scripts" value="build" overwrite="false" />
12
+ <property name="folder.build_scripts_custom" value="build.custom" overwrite="false" />
13
+ <property name="dirs.build_scripts_custom" value="${dirs.current}${path.separator}${path.to.toplevel}${path.separator}${folder.build_scripts_custom}${path.separator}analyzers" />
14
+ <property name="folder.code_build" value="build_output" overwrite="false" />
15
+ <property name="dirs.build" value="${dirs.current}${path.separator}${path.to.toplevel}${path.separator}${folder.code_build}" />
16
+ <property name="folder.app.drop" value="${project.name}" overwrite="false" />
17
+ <property name="dirs.build.code" value="${dirs.build}${path.separator}${folder.app.drop}" overwrite="false" />
18
+ <property name="folder.build_artifacts" value="build_artifacts" overwrite="false" />
19
+ <property name="dirs.build_artifacts" value="${path::get-full-path(dirs.build)}${path.separator}${folder.build_artifacts}" />
20
+ <property name="folder.program_files" value="${environment::get-folder-path('ProgramFiles')}" />
21
+ <property name="project.name" value="__SOLUTION_NAME_WITHOUT_SLN_EXTENSION__" overwrite="false" />
22
+ <property name="folder.references" value="lib" overwrite="false" />
23
+ <property name="dirs.lib" value="${dirs.current}${path.separator}${path.to.toplevel}${path.separator}${folder.references}" overwrite="false" />
24
+ <property name="dirs.metrics_results" value="${path::get-full-path(dirs.build_artifacts)}${path.separator}metrics" />
25
+ <property name="app.metrics" value="${path::get-full-path(folder.program_files)}${path.separator}Microsoft Visual Studio 10.0${path.separator}Team Tools${path.separator}Static Analysis Tools${path.separator}FxCop${path.separator}Metrics.exe" overwrite="false" />
26
+ <property name="file.metrics_results" value="${project.name}.Metrics.xml" />
27
+ <property name="file.metrics_log" value="${project.name}.Metrics.log" />
28
+ <property name="args.metrics" value="/searchgac /o:&quot;${dirs.metrics_results}${path.separator}${file.metrics_results}&quot;" />
29
+
30
+ <property name="is.replaced" value="false" />
31
+ <property name="fail.build.on.error" value="false" />
32
+
33
+ <target name="go" depends="run_tasks" if="${file::exists(app.metrics)}" />
34
+
35
+ <target name="run_tasks" if="${file::exists(app.metrics)}" >
36
+ <echo level="Warning" message="" />
37
+ <echo level="Warning" message="====================" />
38
+ <echo level="Warning" message="${project::get-name()}" />
39
+ <echo level="Warning" message="====================" />
40
+ <call target="prepare" if="${target::exists('prepare')}" />
41
+ <customExtension extends="${project::get-buildfile-path()}" type="pre" failonerror="${fail.build.on.error}" />
42
+ <customExtension extends="${project::get-buildfile-path()}" type="replace" failonerror="${fail.build.on.error}" />
43
+ <call target="run_normal_tasks" if="${not is.replaced}" />
44
+ <customExtension extends="${project::get-buildfile-path()}" type="post" failonerror="${fail.build.on.error}" />
45
+ </target>
46
+
47
+ <target name="prepare">
48
+ <echo message="Removing and adding ${dirs.metrics_results}."/>
49
+ <delete dir="${dirs.metrics_results}" failonerror="false" />
50
+ <mkdir dir="${dirs.metrics_results}" />
51
+ </target>
52
+
53
+ <target name="run_normal_tasks"
54
+ depends="get_regular_dlls, metrics"
55
+ description="Using Visual Studio Code Metrics to report on the complexity and maintainability of your project(s)."
56
+ if="${file::exists(app.metrics)}" />
57
+
58
+ <target name="get_regular_dlls">
59
+ <echo message="Getting output dlls based on name in directory ${path::get-full-path(dirs.build.code)}." />
60
+ <property name="dll.names" value="" />
61
+ <property name="dll.args" value="" />
62
+ <foreach item="File" property="dll.filename">
63
+ <in>
64
+ <items>
65
+ <exclude name="${dirs.build.code}${path.separator}lib${path.separator}**" />
66
+ <exclude name="${dirs.build.code}${path.separator}**${path.separator}NUnit*.dll" />
67
+ <exclude name="${dirs.build.code}${path.separator}**${path.separator}MbUnit*.dll" />
68
+ <exclude name="${dirs.build.code}${path.separator}**${path.separator}TestFu.dll" />
69
+ <exclude name="${dirs.build.code}${path.separator}**${path.separator}QuickGraph*.dll" />
70
+ <exclude name="${dirs.build.code}${path.separator}**${path.separator}Refly*.dll" />
71
+ <exclude name="${dirs.build.code}${path.separator}**${path.separator}Rhino.Mocks*.dll" />
72
+ <exclude name="${dirs.build.code}${path.separator}**${path.separator}*bdd*.dll" />
73
+ <exclude name="${dirs.build.code}${path.separator}**${path.separator}*Test*dll" />
74
+ <exclude name="${dirs.build.code}${path.separator}**${path.separator}*Spec*dll" />
75
+ <include name="${dirs.build.code}${path.separator}**${path.separator}*.dll" />
76
+ <include name="${dirs.build.code}${path.separator}**${path.separator}*.exe" />
77
+ </items>
78
+ </in>
79
+ <do>
80
+ <property name="dll.names" value="${dll.names + ' ' + string::replace(string::replace(dll.filename,path::get-full-path(dirs.build.code) + '\',''),'\',path.separator) + ''}" />
81
+ <property name="dll.args" value="${dll.args + ' /f:&quot;' + string::replace(string::replace(dll.filename,path::get-full-path(dirs.build.code) + '\',''),'\',path.separator) + '&quot;'}" />
82
+ </do>
83
+ </foreach>
84
+
85
+ <property name="dlls.regular" value="${dll.names}" />
86
+ <echo level="Warning" message="Running Visual Studio Code Metrics against these files - ${dlls.regular}." />
87
+
88
+ <property name="args.metrics" value=" ${dll.args} ${args.metrics}" />
89
+ </target>
90
+
91
+ <target name="metrics" if="${file::exists(app.metrics)}" >
92
+ <echo level="Warning" message="Attempting to run Visual Studio Code Metrics. Creating file at ${file.metrics_results} and logging at ${file.metrics_log}." />
93
+
94
+ <exec program="${app.metrics}" workingdir="${dirs.build.code}">
95
+ <arg line="${args.metrics}" />
96
+ </exec>
97
+
98
+ </target>
99
+
100
+ <target name="open_results">
101
+ <echo message="Opening results - ${path::get-full-path(dirs.metrics_results) + path.separator + file.metrics_results}."/>
102
+ <results display="${path::get-full-path(dirs.metrics_results) + path.separator + file.metrics_results}" />
103
+ </target>
104
+
105
+
106
+ </project>