1
+ <?xml version =" 1.0" ?>
2
+ <project name =" Bolt" default =" build-release" xmlns =" http://nant.sf.net/release/0.85-rc3/nant.xsd" >
3
+
4
+ <target name =" build-release" depends =" clean, make-builddir, release-properties, get-release-version, copy-to-release, retrieve-published-documentation, build-installer" description =" Compile and run unit tests" />
5
+ <target name =" deploy-release" depends =" build-release, deploy-to-qa" />
6
+ <target name =" ship-release" depends =" deploy-release, tag-release, deploy-to-ship, authenticate-against-website deploy-product-to-public-website, deploy-documentation-to-public-website, unauthenticate-from-website" />
7
+
8
+ <!-- Main paths -->
9
+ <property name =" tools.dir" value =" ${path::get-full-path('tools')}" />
10
+ <property name =" src.dir" value =" ${path::get-full-path('code')}" />
11
+ <property name =" build.dir" value =" ${path::get-full-path('build')}" />
12
+
13
+ <!-- Clean-->
14
+ <target name =" clean" description =" Delete automated build artifacts" >
15
+ <delete dir =" ${build.dir}" if =" ${directory::exists(build.dir)}" failonerror =" false" />
16
+ </target >
17
+
18
+ <!-- Make build dir-->
19
+ <target name =" make-builddir" description =" Create build dir and build report dir" >
20
+ <mkdir dir =" ${build.dir}" unless =" ${directory::exists(build.dir)}" />
21
+ </target >
22
+
23
+ <target name =" release-properties" >
24
+ <property name =" asm.version" value =" 9.9" />
25
+ <property name =" release.dir" value =" ${path::combine(path::get-full-path(build.dir),'Release')}" />
26
+ <property name =" htmldocs.release.dir" value =" ${path::combine(path::get-full-path(release.dir),'docs')}" />
27
+ <property name =" asm.version.file" value =" Bolt.Version.xml" />
28
+
29
+ <property name =" documentation.unc" value =" \\focus.fcs.local\DovetailCRM\releases\documentation\BOLT" />
30
+ <property name =" website.unc" value =" \\focus.fcs.local\DovetailCRM\releases\products\BOLT" />
31
+ <property name =" website.username" value =" FOCUS\dovetaildeployer" />
32
+ <property name =" website.password" value =" B0mb3rM@n" />
33
+
34
+ <property name =" product.chm.path" value =" \\authorit\Publishing\HTMLHelp\Dovetail BOLT\" />
35
+ <property name =" product.chm.file" value =" ${product.chm.path}\bolt.chm" />
36
+ <property name =" product.html.docs.dir" value =" \\authorit\Publishing\HTML\Dovetail BOLT\" />
37
+ </target >
38
+
39
+ <target name =" copy-to-release" >
40
+ <mkdir dir =" ${release.dir}" failonerror =" false" />
41
+ <copy todir =" ${release.dir}" >
42
+ <fileset basedir =" ${src.dir}" >
43
+ <include name =" *" />
44
+ <include name =" images/*" />
45
+ <include name =" jQuery/*" />
46
+ <include name =" ClarifyID/*" />
47
+ <include name =" files/*" />
48
+ <exclude name =" *.sln" />
49
+ <exclude name =" *.suo" />
50
+ <exclude name =" _ReSharper.bolt" />
51
+ <exclude name =" .svn" />
52
+ <exclude name =" *.Resharper*" />
53
+ </fileset >
54
+ </copy >
55
+ </target >
56
+
57
+ <target name =" retrieve-published-documentation" depends =" release-properties" >
58
+
59
+ <mkdir dir =" ${htmldocs.release.dir}" />
60
+ <copy todir =" ${htmldocs.release.dir}" >
61
+ <fileset basedir =" \\authorit\Publishing\HTML\Dovetail Bolt" >
62
+ <include name =" *" />
63
+ </fileset >
64
+ </copy >
65
+
66
+ <copy file =" \\authorit\Publishing\HTMLHelp\Dovetail Bolt\bolt.chm" tofile =" ${htmldocs.release.dir}\bolt.chm" />
67
+ </target >
68
+
69
+ <target name =" build-installer" >
70
+ <property name =" wix.dir" value =" ${tools.dir}\wix" overwrite =" false" />
71
+
72
+ <!-- for wix preprocessor so that the version number gets propagated into msi -->
73
+ <setenv name =" asm.version" value =" ${asm.version}" />
74
+
75
+ <!-- for wix preprocessor so that the location of released files gets propagated into msi -->
76
+ <setenv name =" bolt.dir" value =" ${release.dir}" />
77
+ <setenv name =" bolt.docs.dir" value =" ${htmldocs.release.dir}" />
78
+ <setenv name =" bolt.tools.dir" value =" ${tools.dir}" />
79
+
80
+ <setenv name =" wix.lib" value =" ${path::get-full-path('./wix/lib')}" />
81
+
82
+ <echo message =" Build MSI using Wix" />
83
+
84
+ <delete >
85
+ <fileset >
86
+ <include name =" ${wix.dir}/*.wixobj" />
87
+ </fileset >
88
+ </delete >
89
+
90
+ <exec program =" ${wix.dir}\candle.exe" workingdir =" .\wix" commandline =" bolt.wxs UdlConfigurationPromptDialog.wxs DialogSet.wxs" />
91
+ <exec program =" ${wix.dir}\light.exe" workingdir =" .\wix" commandline =" bolt.wixobj DialogSet.wixobj UdlConfigurationPromptDialog.wixobj ${wix.dir}\wixui.wixlib ${wix.dir}\sca.wixlib -loc ${wix.dir}\WixUI_en-us.wxl -out ${release.dir}\bolt_${asm.version}.msi" />
92
+ </target >
93
+
94
+ <target name =" deploy-to-qa" >
95
+ <property name =" deployment.base.dir" value =" \\marvin\build\bolt" />
96
+ <property name =" deployment.dir" value =" ${deployment.base.dir}\${asm.version}" />
97
+
98
+ <mkdir dir =" ${deployment.base.dir}" unless =" ${directory::exists(deployment.base.dir)}" />
99
+
100
+ <mkdir dir =" ${deployment.dir}" unless =" ${directory::exists(deployment.dir)}" />
101
+
102
+ <copy todir =" ${deployment.dir}" overwrite =" true" >
103
+ <fileset basedir =" ${release.dir}" >
104
+ <include name =" ${release.dir}/bolt_${asm.version}.chm" />
105
+ <include name =" *.msi" />
106
+ </fileset >
107
+ </copy >
108
+ </target >
109
+
110
+ <target name =" deploy-to-ship" >
111
+ <property name =" deployment.base.dir" value =" \\marvin\product\bolt" />
112
+ <property name =" deployment.dir" value =" ${deployment.base.dir}\${asm.version}" />
113
+ <property name =" ship.dir" value =" ${deployment.dir}\ship" />
114
+
115
+ <mkdir dir =" ${deployment.base.dir}" unless =" ${directory::exists(deployment.base.dir)}" />
116
+ <mkdir dir =" ${deployment.dir}" unless =" ${directory::exists(deployment.dir)}" />
117
+ <mkdir dir =" ${ship.dir}" unless =" ${directory::exists(ship.dir)}" />
118
+
119
+ <copy todir =" ${ship.dir}" overwrite =" true" >
120
+ <fileset basedir =" ${release.dir}" >
121
+ <include name =" ${release.dir}/bolt_${asm.version}.chm" />
122
+ <include name =" *.msi" />
123
+ </fileset >
124
+ </copy >
125
+ </target >
126
+
127
+ <target name =" svn.revision" >
128
+ <property name =" svn.infotempfile" value =" svninfo.txt" />
129
+ <exec program =" svn.exe" output =" ${svn.infotempfile}" >
130
+ <arg value =" info" />
131
+ </exec >
132
+ <loadfile file =" ${svn.infotempfile}" property =" svn.info" />
133
+ <delete file =" ${svn.infotempfile}" />
134
+ <property name =" match" value =" " />
135
+ <regex pattern =" Last Changed Rev: (?'match'\d+)" input =" ${svn.info}" />
136
+ <property name =" svn.info.revision" value =" ${match}" />
137
+ </target >
138
+
139
+ <target name =" get-release-version" depends =" release-properties, svn.revision" >
140
+ <exec program =" svn.exe" commandline =" update ${asm.version.file}" />
141
+
142
+ <xmlpeek file =" ${asm.version.file}" property =" asm.tempversion" xpath =" //version" />
143
+
144
+ <property name =" asm.version.sans.tag"
145
+ value=" ${ int::to-string(version::get-major(version::parse(asm.tempversion)))
146
+ + '.' + int::to-string(version::get-minor(version::parse(asm.tempversion)))
147
+ + '.' + int::to-string(version::get-build(version::parse(asm.tempversion)))}" overwrite =" true" />
148
+
149
+
150
+ <property name =" asm.version"
151
+ value=" ${ int::to-string(version::get-major(version::parse(asm.tempversion)))
152
+ + '.' + int::to-string(version::get-minor(version::parse(asm.tempversion)))
153
+ + '.' + int::to-string(version::get-build(version::parse(asm.tempversion)))
154
+ + '.' + svn.info.revision }" overwrite =" true" />
155
+
156
+ <property name =" asm.version.major" value =" ${ int::to-string(version::get-major(version::parse(asm.tempversion))) }" overwrite =" true" />
157
+ <property name =" asm.version.minor" value =" ${ int::to-string(version::get-minor(version::parse(asm.tempversion))) }" overwrite =" true" />
158
+
159
+ <setenv name =" asm.version" value =" ${asm.version}" />
160
+
161
+ <echo message =" Version set to ${asm.version}" />
162
+ <echo message =" Version (sans tag) set to ${asm.version.sans.tag}" />
163
+ </target >
164
+
165
+ <target name =" tag-release" depends =" release-properties, get-release-version" >
166
+ <property name =" svn.tag.path" value =" https://code.dovetailsoftware.com/svn/classic/bolt/tags/release_${asm.version}" />
167
+ <property name =" svn.tag.message" value =" Tagging Bolt version ${asm.version} to ${svn.tag.path}" />
168
+
169
+ <echo message =" ${svn.tag.message}" />
170
+
171
+ <exec program =" svn.exe" commandline =" copy https://code.dovetailsoftware.com/svn/classic/bolt/trunk ${svn.tag.path} -m " ${svn.tag.message}" " />
172
+ </target >
173
+
174
+ <target name =" deploy-product-to-public-website" depends =" get-release-version" >
175
+ <property name =" deployment.dir" value =" ${website.unc}/${asm.version.sans.tag}" />
176
+
177
+ <mkdir dir =" ${deployment.dir}" failonerror =" false" />
178
+
179
+ <copy todir =" ${deployment.dir}" overwrite =" true" >
180
+ <fileset basedir =" ${release.dir}" >
181
+ <include name =" *.msi" />
182
+ </fileset >
183
+ </copy >
184
+ </target >
185
+
186
+ <target name =" deploy-documentation-to-public-website" depends =" get-release-version, release-properties" >
187
+ <property name =" deployment.dir" value =" ${documentation.unc}/${asm.version.sans.tag}" />
188
+ <property name =" deployment.html.dir" value =" ${deployment.dir}/html" />
189
+
190
+ <mkdir dir =" ${deployment.dir}" failonerror =" true" />
191
+ <mkdir dir =" ${deployment.html.dir}" failonerror =" true" />
192
+
193
+ <copy todir =" ${deployment.html.dir}" >
194
+ <fileset basedir =" ${product.html.docs.dir}" >
195
+ <include name =" **/*" />
196
+ <exclude name =" *.chm" />
197
+ </fileset >
198
+ </copy >
199
+
200
+ <copy todir =" ${deployment.dir}" >
201
+ <fileset basedir =" ${product.chm.path}" >
202
+ <include name =" *.chm" />
203
+ </fileset >
204
+ </copy >
205
+ </target >
206
+
207
+ <target name =" authenticate-against-website" depends =" release-properties" >
208
+ <echo message =" authenticating against FOCUS.fcs.local IPC" />
209
+ <exec program =" net" commandline =" use " \\FOCUS.fcs.local\IPC$" /USER:${website.username} ${website.password}" failonerror =" false" />
210
+ </target >
211
+
212
+ <target name =" unauthenticate-from-website" depends =" release-properties" >
213
+ <echo message =" unauthenticating from FOCUS.fcs.local IPC" />
214
+ <exec program =" net" commandline =" use \\FOCUS.fcs.local\IPC$ /DELETE" failonerror =" false" />
215
+ </target >
216
+ </project >
0 commit comments