forked from FollettSchoolSolutions/fac
-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.xml
214 lines (190 loc) · 9.01 KB
/
build.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
<?xml version="1.0" encoding="UTF-8"?>
<project name="mobile" default="build">
<!-- Load Build Props file-->
<property file="./build.properties" />
<property name="build-for-release" value="true" />
<property name="project.name" value="fac" />
<property name="project.name.js" value="${project.name}-${project.version}.js" />
<property name="project.name.min.js" value="${project.name}-${project.version}.min.js" />
<property name="js.dir" value="src" />
<property name="deploy.dir" value="./output" />
<property name="temp.dir" value="./temp" />
<property name="resources.dir" value="resources" />
<property name="library.project" value="./lib" />
<property name="build.output.verbose" value="false" />
<taskdef name="jslint"
classname="com.googlecode.jslint4java.ant.JSLintTask"
classpath="${library.project}/jslint/jslint4java-2.0.2.jar" />
<taskdef name="jscomp" classname="com.google.javascript.jscomp.ant.CompileTask"
classpath="${library.project}/closure-compiler/compiler.jar"/>
<scriptdef name="html2js" src="lib/build/html2js.js" language="javascript">
<attribute name="prefix" />
<element name="dirset" type="dirset" />
</scriptdef>
<scriptdef name="concatpartialstojs" src="lib/build/concat-partials-to-js.js" language="javascript">
<attribute name="todir" />
<attribute name="tofile" />
<element name="dirset" type="dirset" />
</scriptdef>
<scriptdef name="minify-fileset" src="lib/build/minify-fileset.js" language="javascript"
classpath="${library.project}/closure-compiler/compiler.jar">
<element name="fileset" type="fileset" />
</scriptdef>
<!-- Targets -->
<target name="showProps">
<echo message="************************************ ${project.name.js} build ***********************************************" />
<echo message="js.dir is: ${js.dir}" />
<echo message="deploy.dir is: ${deploy.dir}" />
<echo message="resources.dir is: ${resources.dir}" />
<echo message="Library project dir is: ${library.project}" />
<echo message="basedir is: ${basedir}" />
<echo message="phantom.js.bin is: ${phantom.js.bin}" />
<echo message="build.output.verbose is: ${build.output.verbose}" />
</target>
<target name="build" depends="showProps">
<!-- Decision to ensure JS is ok before we copy -->
<antcall target="jslint" />
<!-- Re-create the working directories -->
<antcall target="clean" />
<!-- Concat the js files -->
<antcall target="concat-js" />
<antcall target="htmlToJs" />
<!-- Minify tasks: These only run if this target was called from 'release' -->
<antcall target="minify-app" />
<!-- Deploy to bootstrap folder -->
<antcall target="deploy" />
</target>
<target name="deploy">
<!-- Copy the final files from the temp location to the output folder -->
<copy todir="${deploy.dir}" verbose="${build.output.verbose}">
<fileset dir="${temp.dir}">
<include name="${project.name.js}" />
<include name="${project.name.min.js}" />
</fileset>
<fileset dir="${resources.dir}">
</fileset>
</copy>
</target>
<target name="clean">
<echo message="Deleting work folders" />
<delete dir="${deploy.dir}" verbose="${build.output.verbose}"/>
<delete dir="${temp.dir}" verbose="${build.output.verbose}"/>
<echo message="Creating work folders..." />
<mkdir dir="${deploy.dir}" />
<mkdir dir="${temp.dir}" />
</target>
<target name="jslint">
<echo message="Running JSLint on javascript resources..." />
<jslint haltOnFailure="true" options="sloppy,plusplus,indent=4,nomen=true" encoding="UTF-8">
<!-- Pre-define any global vars we know are ok to use -->
<predef>angular,module,sinon,inject,expect,describe,it,beforeEach</predef>
<formatter type="plain" />
<fileset dir="src/" includes="**/*.js" excludes="**/fsssanitize.js" />
</jslint>
</target>
<target name="concat-js">
<echo message="Concatenating all js files in ${js.dir} to ${temp.dir}/${project.name.js}" />
<concat destfile="${temp.dir}/${project.name.js}" fixlastline="true">
<fileset dir="${js.dir}" includes="**/*.js" excludes="**/test/**" />
</concat>
</target>
<target name="minify-app" if="build-for-release">
<!-- Create a copy of concatenated file and then minify -->
<copy file="${temp.dir}/${project.name.js}" tofile="${temp.dir}/${project.name.min.js}" verbose="${build.output.verbose}">
</copy>
<echo message="Minifying js file..." />
<minify-fileset>
<fileset dir="${temp.dir}" includes="${project.name.min.js}" />
</minify-fileset>
</target>
<target name="-minify-single-file">
<!-- compilationLevel attribute values are “whitespace”,”simple”,”advanced” -->
<!-- warning attribute values are "quiet", "default", "verbose" -->
<jscomp compilationLevel="simple" warning="default" debug="false" output="${src.dir}/${src.file}">
<sources dir="${src.dir}/">
<file name="${src.file}" />
</sources>
</jscomp>
</target>
<!-- This target combines the individual steps necessary to run
unit tests. Created so that the command line can call a single
target and all targets will run regardless of the outcome,
as we need to ensure that our local test server is stopped
regardless of the test status
-->
<target name="runTests">
<property name="failBuildOnErrors" value="false" />
<antcall target="-runTests" />
</target>
<target name="-runTests" depends="showProps, startServer, test, stopServer">
<echo message="build.status: ${build.status}" />
<echo message="faildBuildOnErrors: ${failBuildOnErrors}" />
<fail>
<condition>
<!-- If test runner returns "1", then fail build -->
<equals arg1="${build.status}" arg2="1" forcestring="true" />
</condition>
</fail>
</target>
<!-- Runs javascript unit tests. Assumes that a server is running already
failBuildOnErrors defaults to true, and will cause build to halt
after running tests. Not ideal for integration server, so the
property was introduced to allow us the option to continue the build
The return code of the test run will be stored in the property
build.status and may be sniffed later to determine whether to fail
the build.
-->
<target name="test" depends="showProps">
<property name="failBuildOnErrors" value="true" />
<echo message="faildBuildOnErrors: ${failBuildOnErrors}" />
<exec executable="${phantom.js.bin}" failonerror="${failBuildOnErrors}" resultproperty="build.status">
<arg value="./test/run_jasmine_test.js" />
<arg value="http://localhost:${test.port}/test/runner.html" />
</exec>
</target>
<target name="startServer" depends="showProps">
<java jar="test/jetty/start.jar" dir="test/jetty"
fork="true"
spawn="true"
maxmemory="128m"
>
<jvmarg value="-DSTOP.PORT=${stop.port}" />
<jvmarg value="-DSTOP.KEY=${stop.key}" />
<jvmarg value="-Djetty.port=${test.port}" />
</java>
<waitfor maxwait="5" maxwaitunit="second">
<http url="http://localhost:${test.port}/test/ready.txt" />
</waitfor>
</target>
<target name="stopServer" depends="showProps">
<java jar="test/jetty/start.jar" dir="test/jetty"
fork="true"
failonerror="true"
maxmemory="128m"
>
<jvmarg value="-DSTOP.PORT=${stop.port}" />
<jvmarg value="-DSTOP.KEY=${stop.key}" />
<arg value="--stop" />
</java>
</target>
<target name="htmlToJs">
<copy todir="${temp.dir}/partials" verbose="${build.output.verbose}">
<fileset dir="${js.dir}">
<include name="**/*.html" />
<exclude name="**/test/**" />
</fileset>
</copy>
<!-- HTML2JS on the partials -->
<html2js>
<dirset dir="${temp.dir}">
<include name="partials" />
</dirset>
</html2js>
<!-- Concatenate javascriptified HTML onto ${project.name.js} -->
<concatpartialstojs todir="${temp.dir}" tofile="${project.name.js}">
<dirset dir="${temp.dir}">
<include name="partials" />
</dirset>
</concatpartialstojs>
</target>
</project>