2 REVISION=$(echo '$Revision$' | sed -e 's,\$,,g' -e 's,^\w*:\s,,' )
7 # default values, tunable with command-line options
9 SVNPATH="http://svn.one-lab.org/build/trunk"
11 MAILTO="onelab-build@one-lab.org"
12 DISTROMAKETAGS=onelab-tags.mk
14 # web publishing results
15 WEBPATH=/build/@DISTRO@/@BUILD@
16 WEBLOG=/build/@DISTRO@/@BUILD@.txt
19 TESTBUILDURL="http://build.one-lab.org/"
20 TESTBOX=onelab-test.inria.fr
21 TESTBOXSSH=root@onelab-test.inria.fr
22 TESTSVNPATH="http://svn.one-lab.org/new_plc_api/trunk/plctest"
23 TESTSCRIPT=TestMain.py
25 # assuming vserver runs in UTC
26 DATE=$(date -u +'%Y.%m.%d')
28 # Notify recipient of failure or success, manage various stamps
31 (echo -n "============================== $COMMAND: failure at" ; date ; tail -c 20k $LOG) >> $(dirname $LOG)/build-broken.txt
32 if [ -n "$MAILTO" ] ; then
33 tail -c 8k $LOG | mail -s "Failures for ${BASE}" $MAILTO
40 touch $(dirname $LOG)/build-ok.txt
41 if [ -n "$MAILTO" ] ; then
42 (echo "http://build.one-lab.org/$DISTRO/$BASE" ; echo "Completed on $(date)" ) | mail -s "Successfull build for ${BASE}" $MAILTO
52 echo -n "============================== Starting $COMMAND:build on "
56 # svn checkout $SVNPATH $BASE
58 # if TAGSRELEASE specified : update DISTROMAKETAGS with this tag
59 if [ -n "$TAGSRELEASE" ] ; then
61 svn up -r $TAGSRELEASE $DISTROMAKETAGS
67 echo "Running make IN $(pwd)"
68 make stage1=true "${MAKEOPTS[@]}" DISTROMAKETAGS=${DISTROMAKETAGS} PLDISTRO=${DISTRO} "${MAKEVARS[@]}" -C /build
69 # in case we use an older build
71 make "${MAKEOPTS[@]}" DISTROMAKETAGS=${DISTROMAKETAGS} PLDISTRO=${DISTRO} "${MAKEVARS[@]}" -C /build versions
73 make "${MAKEOPTS[@]}" DISTROMAKETAGS=${DISTROMAKETAGS} PLDISTRO=${DISTRO} "${MAKEVARS[@]}" -C /build $MAKETARGETS
75 # restore silent mode - otherwise cron gets it
84 echo -n "============================== Starting $COMMAND:runtest on "
87 ### compute URL to the myplc package
89 rpm=$(find RPMS -name myplc\*.rpm )
90 url=${TESTBUILDURL}${DISTRO}/${BASE}/${rpm}
91 ### checkout the test material
92 svn co ${TESTSVNPATH} plctest
93 # compute test directory name on test box
94 testdir=plctest-${buildname}
95 # rsync/push test material onto the test box
96 ssh ${TESTBOXSSH} mkdir -p ${testdir}
97 rsync -a -v plctest/ ${TESTBOXSSH}:${testdir}
98 # invoke test on testbox
99 ssh ${TESTBOXSSH} python -u ${testdir}/${TESTSCRIPT} ${url}
100 #invoke make install from build to the testbox
101 make install PLCHOST=${TESTBOX}
103 if [ "$?" != 0 ] ; then
110 function show_env () {
112 echo FC_DISTRO=$FC_DISTRO
115 echo SVNPATH=$SVNPATH
116 echo MAKEVARS="${MAKEVARS[@]}"
117 echo MAKEOPTS="${MAKEOPTS[@]}"
118 echo DISTROMAKETAGS="$DISTROMAKETAGS"
119 echo TAGSRELEASE="$TAGSRELEASE"
120 if [ -f /build/$DISTROMAKETAGS ] ; then
121 echo "XXXXXXXXXXXXXXXXXXXX Contents of tags definition file $DISTROMAKETAGS"
122 cat /build/$DISTROMAKETAGS
124 echo "no tags definition yet - probably out of vserver"
126 echo "XXXXXXXXXXXXXXXXXXXX end tags definition"
130 echo "Usage: $COMMAND [option] make-targets"
131 echo "This is revision $REVISION"
132 echo "Supported options"
133 echo " -n dry-run : -n passed to make - no mail sent"
135 echo " -b BASE - may include @, then replaced with current date"
136 echo " -t PLDISTROMAKETAGS"
137 echo " -r TAGSRELEASE - a release number that refers to PLDISTROMAKETAGS - defaults to HEAD"
138 echo " -s SVNPATH - where to fetch the build module"
139 echo " -f FC_DISTRO - defaults to $DEFAULT_FC_DISTRO"
140 echo " -u : uses directory given as BASE as is, even if already exists"
141 echo " -s MAKEVAR=value"
143 echo " -B : run build only"
144 echo " -T : run test only"
152 # preserve arguments for passing them again later
154 for arg in "$@"; do argv=(${argv[@]} "$arg") ; done
161 while getopts "f:b:ud:t:r:s:nm:s:BTh" opt ; do
163 f) FC_DISTRO=$OPTARG ;;
167 t) DISTROMAKETAGS=$OPTARG ;;
168 r) TAGSRELEASE=$OPTARG ;;
169 s) MAKEVARS=(${MAKEVARS[@]} "$OPTARG") ;;
170 n) MAILTO="" ; MAKEOPTS=(${MAKEOPTS[@]} -n) ;;
172 s) SVNPATH=$OPTARG ;;
174 T) DO_BUILD= ; USEOLD=true ;;
179 shift $(($OPTIND - 1))
181 [ -z "$FC_DISTRO" ] && FC_DISTRO=$DEFAULT_FC_DISTRO
184 ### set BASE from DISTRO, if unspecified
185 [ -z "$BASE" ] && BASE=${DISTRO}-${FC_DISTRO}
186 BASE=$(echo ${BASE} | sed -e "s,@,${DATE},g")
188 if [ -d /vservers ] ; then
189 # we run in the root context :
190 # (*) create or check for the vserver to use
191 # (*) copy this command in the vserver
194 if [ -n "$USEOLD" ] ; then
195 ### Re-use a vserver (finish an unfinished build..)
196 if [ ! -d /vservers/${BASE} ] ; then
197 echo $COMMAND : cannot find vserver $BASE
201 LOG=/vservers/${BASE}/build/build-log.txt
202 mkdir -p $(dirname $LOG)
203 # redirect stdout and stderr from now on
205 echo "XXXXXXXXXX $COMMAND: using existing vserver $BASE" $(date)
206 vserver ${BASE} exec svn update /build
208 # create vserver: check it does not exist yet
210 while [ -d /vservers/${BASE}${i} ] ; do
211 # we name subsequent builds <base>-n<i> so the logs and builds get sorted properly
212 [ -z ${i} ] && BASE=${BASE}-n
214 if [ $i -gt 100 ] ; then
215 echo "$COMMAND: Failed to create build vserver /vservers/${BASE}${i}"
220 LOG=/vservers/${BASE}-log.txt
221 mkdir -p $(dirname $LOG)
222 # redirect stdout and stderr from now on
224 echo "XXXXXXXXXX $COMMAND: creating vserver $BASE" $(date)
226 ### extract vbuild.setup and run it
227 svn cat $SVNPATH/vbuild.setup > /tmp/vbuild-$$
228 svn cat $SVNPATH/${DISTRO}-devel.lst > /tmp/${DISTRO}-devel.lst
232 /tmp/vbuild-$$ ${BASE} ${FC_DISTRO} ${DISTRO}
235 vserver ${BASE} exec svn checkout ${SVNPATH} /build
237 LOG=/vservers/${BASE}/build/build-log.txt
241 echo "XXXXXXXXXX $COMMAND: preparation of vserver $BASE done" $(date)
242 cp $COMMANDPATH /vservers/${BASE}/
243 # invoke this command in the vserver
244 vserver ${BASE} exec /$COMMAND "${argv[@]}"
247 webpath=$(echo $WEBPATH | sed -e s,@DISTRO@,"$DISTRO",g -e s,@BUILD@,"$BASE",g)
248 weblog=$(echo $WEBLOG | sed -e s,@DISTRO@,"$DISTRO",g -e s,@BUILD@,"$BASE",g)
250 ln -s /vservers/$BASE/build $webpath
255 LOG=/build/build-log.txt
256 if [ -n "$DO_BUILD" ] ; then
261 if [ -n "$DO_TEST" ] ; then