source: other-projects/nightly-tasks/diffcol/trunk/task@ 27604

Last change on this file since 27604 was 27604, checked in by ak19, 11 years ago

Fixing up diffcol process so it works better. Current state finds no errors in Small-HTML model-collection. 1. Better handling of gdb database (and ignores .idh) by filtering out fields that are expected to differ such as date before doing the diff. Handles archiveinf-doc.gdb and -src.gdb files and with the sort flag Dr Bainbridge added to db2text and the sorting of keys in perllib/dbutil/gdbmtxtgz, the ordering of keys in the database is no longer affecting the outcome. 2. Better handling of doc.xml files. Once more date fields that will differ are filtered out before performing the diff. EarliestDatestamp file is ignored. 3. The task script now ensures that model-collect is up to date with the svn version when about to perform the diff col testing.

File size: 9.2 KB
Line 
1#!/bin/bash
2
3if [ "x$TASK_HOME" == "x" ]; then
4 TASK_HOME=`pwd`;
5fi
6
7export DATA_DIR=$TASK_HOME/diffcol-data
8export UPLOAD_DIR=$TASK_HOME/diffcol-reports
9export [email protected]
10
11# control if an existing compiled greenstone is used
12# or, if one should be checked out, which revision to checkout from svn
13SVN_OPT_REV="-r head"
14#export GSDLHOME=
15#export GSDL3SRCHOME=
16
17#check key environment vars are set
18if [ "$UPLOAD_DIR" == "" ]; then
19 echo "Please set a UPLOAD_DIR for the test in an environment.sh file"
20 exit
21fi
22if [ "$DATA_DIR" == "" ]; then
23 echo "Please set a DATA_DIR for the test in an environment.sh file"
24 exit
25fi
26if [ "$MONITOR_EMAIL" == "" ]; then
27 echo "Please set a MONITOR_EMAIL for the test in an environment.sh file"
28 exit
29fi
30
31
32if [ "$DATA_DIR" == "/" ]; then
33 echo "DATA_DIR should not be the fs root"
34 exit
35fi
36
37echo "DATA_DIR: $DATA_DIR"
38echo "UPLOAD_DIR: $UPLOAD_DIR"
39
40#create an id for this test
41dateid=`date +'%Y-%m-%d'`
42
43echo "Starting test '$dateid'"
44
45#set classpath
46CLASSPATH=
47for file in $TASK_HOME/lib/*.jar; do
48 CLASSPATH=$file:$CLASSPATH
49done
50export CLASSPATH
51
52#set the location of the full report
53xmlout=$DATA_DIR'/full-report-'$dateid'.xml'
54
55# the toplevel folder of the greenstone installation being used
56greenstone_home=
57# gsdl is the checkout folder and can be greenstone2 or greenstone3
58gsdl=greenstone2
59
60
61# Check if using existing compiled-up greenstone installation
62# and set the greenstone_home location accordingly
63if [ "x$GSDL3SRCHOME" != "x" -o "x$GSDLHOME" != "x" ]; then
64 echo "Found existing Greenstone home, will use that instead"
65 greenstone_home=$GSDLHOME
66else
67 greenstone_home="$DATA_DIR/$gsdl";
68fi
69
70
71
72function setup_greenstone() {
73
74 #clean up from previous tests
75 echo -n "about to clean up any old tests (Ctrl-C to cancel)"
76 for i in x x x x x; do sleep 1; echo -n .; done
77 echo
78
79 echo "cleaning up previous tests"
80 rm -rf $DATA_DIR
81
82 echo "creating the data dir"
83 mkdir -p $DATA_DIR || exit
84
85 cd $DATA_DIR
86
87
88 # use existing compiled-up greenstone installation
89 if [ "x$GSDL3SRCHOME" != "x" -o "x$GSDLHOME" != "x" ]; then
90 echo "Found existing Greenstone home, will use that instead"
91 return;
92 fi
93
94 # Else checkout a GS from svn into DATA_DIR
95
96
97 #svn checkout of main gsdl directory
98 echo "checkout $gsdl:"
99 svn co $SVN_OPT_REV http://svn.greenstone.org/main/trunk/greenstone2 $gsdl
100 echo "done"
101
102 cd $DATA_DIR/$gsdl
103
104
105 # since this is a bash script, we're on linux/darwin, need gnome-lib
106 # for the correct architecture. Assume all darwin is intel, not ppc
107 echo "setting up gnome-lib-minimal for compilation"
108
109# http://stackoverflow.com/questions/394230/detect-the-os-from-a-bash-script
110 os='linux';
111 gl_suffix=$os;
112 if [[ "$OSTYPE" == "darwin"* ]]; then
113 os='darwin';
114 gl_suffix=$os'-intel';
115 else
116 # linux, work out the bit architecture
117 arch=`uname -m`
118 if [[ "$arch" == *"64"* ]]; then
119 arch='64';
120 gl_suffix=$gl_suffix'-x64';
121 else
122 arch='32';
123 fi
124 fi
125
126
127 #svn checkout gnome-lib for this linux/darwin
128 cd $DATA_DIR/$gsdl/ext
129
130# svn export http://svn.greenstone.org/gs2-extensions/gnome-lib/trunk/gnome-lib-minimal-linux-x64.tar.gz gl.tar.gz
131 svn export http://svn.greenstone.org/gs2-extensions/gnome-lib/trunk/gnome-lib-minimal-$gl_suffix.tar.gz gl.tar.gz
132 tar xvzf gl.tar.gz
133 cd gnome-lib-minimal
134 source devel.bash
135
136 cd ../..
137
138
139 #configure
140 echo "configure $gsdl: "
141 echo "<configure>" >> $xmlout
142 ./configure 2>> $DATA_DIR/compilation-errors
143 echo "</configure>" >> $xmlout
144 echo "done"
145
146 #make
147 echo "make $gsdl: "
148 echo "<make>" >> $xmlout
149 make 2>> $DATA_DIR/compilation-errors
150 echo "</make>" >> $xmlout
151 echo "done"
152
153 #make install
154 echo "make install $gsdl: "
155 echo "<make-install>" >> $xmlout
156 make install $DATA_DIR/compilation-errors
157 echo "</make-install>" >> $xmlout
158 echo "done"
159
160 # set the path to the greenstone_home variable
161 greenstone_home=$DATA_DIR/$gsdl
162}
163
164
165function run_test() {
166
167 #perform the requested subcommands, outputting xml information
168 echo '<test time="'$dateid'" id="'$dateid'">' > $xmlout
169
170 # make sure that diffcol/model-collect is up to date before copying it over to greenstone-home
171 echo "Updating $TASK_HOME/model-collect:"
172 #cd $TASK_HOME/model-collect
173 svn up $TASK_HOME/model-collect
174
175 # go to whichever greenstone_home we're using
176 cd $greenstone_home
177
178 #get svn info
179 echo "getting svn info: "
180 echo "<svn-info>" >> $xmlout
181 svn info >> $xmlout
182 echo "</svn-info>" >> $xmlout
183 echo "done"
184
185 #set up the gsdl environment with the setup.bash script
186 echo "setting up $gsdl environment: "
187 export GSDLHOME=
188 source setup.bash
189 echo "done"
190
191 #make two copies of the model-collect directory in gsdl
192 #one to be rebuild and one as the basis for comparison
193 #strip both of all .svn directories
194
195 #copy the model collections to the collect folder to be rebuilt
196 echo -n "installing test collections and model collections to new $gsdl installation... "
197
198 #clean up
199 rm -rf collect
200 rm -rf model-collect
201
202 #copy to collect and strip
203 cp -r $TASK_HOME/model-collect collect
204 find collect -type d -name .svn -exec rm -rf {} \;
205
206 #make the model copy
207 cp -r collect model-collect
208
209 echo "done"
210
211 #for each collection, import, build and diff with its model counterpart
212 for collection in collect/*; do
213
214 #escape the filename (in case of space)
215 collection=`echo $collection | sed 's@ @\\\ @g'`
216
217 #get just the basename
218 collection=`basename $collection`
219
220 echo '<collection-test name="'$collection'">' >> $xmlout
221
222 #import
223 #Ensure the OIDtype for importing is hash_on_full_filename
224 # "to make document identifiers more stable across
225 # upgrades of the software, although it means that
226 # duplicate documents contained in the collection are no
227 # longer detected automatically."
228 echo $collection' - Importing:'
229 echo "<import>" >> $xmlout
230 import.pl -OIDtype hash_on_full_filename $collection -removeold
231 echo "</import>" >> $xmlout
232 echo "done"
233
234 #build
235 echo $collection' - Building:'
236 echo "<build>" >> $xmlout
237 buildcol.pl $collection -removeold
238 echo "</build>" >> $xmlout
239 echo "done"
240
241 #rename the intermediate 'building' directory 'index'
242 echo -n $collection' - Move "building" to "index"... "'
243 rm -rf collect/$collection/index
244 mv collect/$collection/building collect/$collection/index
245 echo "done"
246
247 #diffcol
248 echo $collection' - Diffing:'
249 cd $TASK_HOME/diffcol
250 ./diffcol.pl -output xml -verbosity 10 $collection >> $xmlout
251 cd $greenstone_home
252 echo "done"
253
254 echo "</collection-test>" >> $xmlout
255 done
256
257 echo "</test>" >> $xmlout
258
259 echo "done"
260
261}
262
263function upload() {
264 # ensure the upload directory exists
265 # before trying to transfer the xml and html files across
266 # if it already existed, clear it of contents
267 if [ ! -d "$UPLOAD_DIR" ]; then
268 mkdir -p "$UPLOAD_DIR";
269# else
270# rm $UPLOAD_DIR/*
271 fi
272
273 scp $DATA_DIR/*.xml $DATA_DIR/*.html $UPLOAD_DIR
274}
275
276function mail_simple_message() {
277 # email out brief failure message if failed
278 echo "Checking if successful... "
279 result=`java org.apache.xalan.xslt.Process -IN "$xmlout" -XSL "$TASK_HOME/xsl/passed-or-not.xsl"`
280 echo "result: "$result
281 if [ "$result" != "yes" ]; then
282 echo 'gsdl regression test for '$dateid' failed' | mail -s 'Regression Test Failed' $MONITOR_EMAIL #$WEBMASTER_EMAIL
283 fi
284}
285
286
287function mail_with_report_attached() {
288 # http://stackoverflow.com/questions/17359/how-do-i-send-a-file-as-an-email-attachment-using-linux-command-line
289
290 #echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- [email protected]
291
292
293 # email out with report attached, if the tests failed
294 echo "Checking if successful... "
295 result=`java org.apache.xalan.xslt.Process -IN "$xmlout" -XSL "$TASK_HOME/xsl/passed-or-not.xsl"`
296 echo "result: "$result
297 if [ "$result" != "yes" ]; then
298 echo $gsdl' regression test for '$dateid' failed' | mutt -a $DATA_DIR'/report-'$dateid'.html' -s 'Regression Test Failed' -- $MONITOR_EMAIL
299 echo "Sent mail with report attached."
300 fi
301}
302
303function summarise() {
304
305 # make a summarised Xml report
306 echo -n "Summarizing the xml report... "
307 java org.apache.xalan.xslt.Process -IN $xmlout -XSL $TASK_HOME/xsl/xml-report.xsl -OUT $DATA_DIR/report-$dateid.xml
308 echo "done"
309
310 # make a summarised HTml report
311 echo -n "Creating an html summary report... "
312 java org.apache.xalan.xslt.Process -IN $DATA_DIR/report-$dateid.xml -XSL $TASK_HOME/xsl/html-report.xsl -OUT $DATA_DIR/report-$dateid.html
313 echo "done"
314
315}
316
317
318#parse arguments
319if [ "$1" == "" ]; then
320 action=all
321else
322 if [ "$1" == "setup_greenstone" ]; then
323 action=setup_greenstone
324 elif [ "$1" == "run_test" ]; then
325 action=run_test
326 elif [ "$1" == "summarise" ]; then
327 action=summarise
328 elif [ "$1" == "upload" ]; then
329 action=upload
330 elif [ "$1" == "all" ]; then
331 action=all
332 else
333 echo "bad subcommand"
334 exit
335 fi
336fi
337
338#do the requested action
339if [ "$action" == "setup_greenstone" ]; then
340 setup_greenstone
341elif [ "$action" == "run_test" ]; then
342 run_test
343# mail_simple_message
344elif [ "$action" == "summarise" ]; then
345 summarise
346elif [ "$action" == "upload" ]; then
347 upload
348# mail_simple_message
349 mail_with_report_attached
350elif [ "$action" == "all" ]; then
351 setup_greenstone
352 run_test
353 summarise
354 upload
355 mail_with_report_attached
356fi
357
Note: See TracBrowser for help on using the repository browser.