2 ##export PATH=/usr/sbin:/sbin:/usr/bin:/bin
3 # use svn propset svn:keywords Revision to enable this
4 REVISION=$(echo '$Revision$' | sed -e 's,\$,,g' -e 's,^\w*:\s,,' )
10 # default values, tunable with command-line options
11 SVNPATH="svn+ssh://build@svn.one-lab.org/svn/build/trunk"
13 MAILTO="onelab-build@one-lab.org"
14 DISTROMAKETAGS=onelab-tags.mk
15 PLEBOX=root@planet-lab.eu
16 TESTBUILDURL="http://build.one-lab.org/"
17 TESTBOX=onelab-test.inria.fr
18 TESTBOXSSH=root@onelab-test.inria.fr
19 TESTSVNPATH="svn+ssh://build@svn.one-lab.org/svn/new_plc_api/trunk/plctest"
20 TESTSCRIPT=TestMain.py
23 # plc chroot runs in UTC
24 DATE=$(date -u +'%Y.%m.%d')
26 ### in the root context
27 function do_chroot () {
28 chroot /plc/devel/root su - build <<EOF
29 $CHROOTBINDIR/$COMMAND $@
34 # Notify recipient of failure or success, manage various stamps
37 (echo -n "============================== $COMMAND: failure at" ; date ; tail -c 20k ${BUILD}/log-build.txt) >> ${BUILD}.broken
38 if [ -n "$MAILTO" ] ; then
39 tail -c 8k ${BUILD}/log-build.txt | mail -s "Failures for ${BUILD}" $MAILTO
47 if [ -n "$MAILTO" ] ; then
48 (echo "http://build.one-lab.org/$DISTRO/$BASE" ; echo "Completed on $(date)" ) | mail -s "Successfull build in ${BUILD}" $MAILTO
56 function create_base () {
58 while ! mkdir ${BASE}${i} 2>/dev/null ; do
59 [ -z ${i} ] && BASE=${BASE}.
61 if [ $i -gt 100 ] ; then
62 echo "$0: Failed to create release directory `pwd`/${BASE}${i}"
69 function use_base () {
70 [ ! -d $BASE ] && mkdir $BASE
71 if [ ! -d $BASE ] ; then
72 echo $COMMAND failed to create base $BASE
83 echo -n "============================== Starting $COMMAND:build on "
89 # if TAGSTAG specified : update DISTROMAKETAGS with this tag
90 if [ -n "$TAGSTAG" ] ; then
92 svn up -r $TAGSTAG $DISTROMAKETAGS
98 echo "Running make IN build $(pwd)"
99 make stage1=true ${MAKEOPTS[@]} DISTROMAKETAGS=${DISTROMAKETAGS} PLDISTRO=${DISTRO} ${MAKEVARS[@]} -C $BASE
100 # in case we use an older build
102 make ${MAKEOPTS[@]} DISTROMAKETAGS=${DISTROMAKETAGS} PLDISTRO=${DISTRO} ${MAKEVARS[@]} -C $BASE versions
104 make ${MAKEOPTS[@]} DISTROMAKETAGS=${DISTROMAKETAGS} PLDISTRO=${DISTRO} ${MAKEVARS[@]} -C $BASE $MAKETARGETS
106 # restore silent mode - otherwise cron gets it
110 function runtest () {
115 echo -n"==============================> testing the sendmail service on PLE"
116 #under the chroot jail launch an ssh on ple and the script is run there
117 ssh ${PLEBOX} python -u /root/${TESTSEND}
119 echo -n "============================== Starting $COMMAND:runtest on "
123 ### compute URL to the myplc package
125 buildname=$(basename $build)
127 rpm=$(find RPMS -name myplc\*.rpm )
128 url=${TESTBUILDURL}${DISTRO}/${buildname}/${rpm}
129 ### checkout the test material
130 svn co ${TESTSVNPATH} plctest
131 # compute test directory name on test box
132 testdir=plctest-${buildname}
133 # rsync/push test material onto the test box
134 ssh ${TESTBOXSSH} mkdir -p ${testdir}
135 rsync -a -v plctest/ ${TESTBOXSSH}:${testdir}
136 # invoke test on testbox
137 ssh ${TESTBOXSSH} python -u ${testdir}/${TESTSCRIPT} ${url}
138 #invoke make install from build to the testbox
139 make install PLCHOST=${TESTBOX}
141 if [ "$?" != 0 ] ; then
148 function show_env () {
152 echo SVNPATH=$SVNPATH
153 echo MAKEVARS="${MAKEVARS[@]}"
154 echo MAKEOPTS="${MAKEOPTS[@]}"
155 echo DISTROMAKETAGS="$DISTROMAKETAGS"
156 echo TAGSTAG="$TAGSTAG"
157 echo "XXXXXXXXXXXXXXXXXXXX Contents of tags definition file $DISTROMAKETAGS"
158 cat $BASE/$DISTROMAKETAGS
159 echo "XXXXXXXXXXXXXXXXXXXX end tags definition"
163 echo "Usage: $COMMAND [option] make-targets"
164 echo "This is revision $REVISION"
165 echo "Supported options"
166 echo " -b BASE - may include @, then replaced with current date"
167 echo " -u : uses directory given as BASE as is, even if already exists"
169 echo " -t DISTROMAKETAGS"
170 echo " -r TAGSTAG - a tag that refers to DISTROMAKETAGS - defaults to HEAD"
171 echo " -s MAKEVAR=value - spaces in value are not supported"
172 echo " -n dry-run : -n passed to make - no mail sent"
175 echo " -B : run build only"
176 echo " -T : run test only"
182 if [ -d /plc/devel/data ] ; then
189 while getopts "b:ud:t:r:s:nm:s:BTh" opt ; do
194 t) DISTROMAKETAGS=$OPTARG ;;
195 r) TAGSTAG=$OPTARG ;;
196 s) MAKEVARS=(${MAKEVARS[@]} $OPTARG) ;;
197 n) MAILTO="" ; MAKEOPTS=(${MAKEOPTS[@]} -n) ;;
199 s) SVNPATH=$OPTARG ;;
201 T) DO_BUILD= ; USEOLD=true ;;
206 shift $(($OPTIND - 1))
213 ### set BASE from DISTRO, if unspecified
214 [ -z "$BASE" ] && BASE=${DISTRO}
215 BASE=$(echo ${BASE} | sed -e "s,@,${DATE},g")
217 if [ -n "$USEOLD" ] ; then
224 if [ -n "$DO_SEND" ] ; then
225 test_sendmail ${BUILD} >> ${BUILD}/log-build.txt 2>&1
228 if [ -n "$DO_BUILD" ] ; then
229 build >> ${BUILD}/log-build.txt 2>&1
230 touch ${BUILD}.build-ok
233 if [ -n "$DO_TEST" ] ; then
234 runtest ${BUILD} >> ${BUILD}/log-build.txt 2>&1
237 success >> ${BUILD}/log-build.txt 2>&1