2 REVISION=$(echo '$Revision$' | sed -e 's,\$,,g' -e 's,^\w*:\s,,' )
8 # default values, tunable with command-line options
10 SVNPATH="http://svn.one-lab.org/build/trunk"
12 MAILTO="onelab-build@one-lab.org"
13 DISTROMAKETAGS=onelab-tags.mk
14 PLEBOX=root@planet-lab.eu
15 TESTBUILDURL="http://build.one-lab.org/"
16 TESTBOX=onelab-test.inria.fr
17 TESTBOXSSH=root@onelab-test.inria.fr
18 TESTSVNPATH="http://svn.one-lab.org/new_plc_api/trunk/plctest"
19 TESTSCRIPT=TestMain.py
22 # plc chroot runs in UTC
23 DATE=$(date -u +'%Y.%m.%d')
25 ###### copy this command into the vserver before invoking it - install in /
26 ###function install_in_vserver () {
28 ### cp $COMMANDPATH /vservers/$vserver/$COMMAND
31 ###function run_in_vserver () {
33 ### vserver $vserver exec /$COMMAND "$@"
36 # Notify recipient of failure or success, manage various stamps
39 (echo -n "============================== $COMMAND: failure at" ; date ; tail -c 20k ${BUILD}/log-build.txt) >> ${BUILD}.broken
40 if [ -n "$MAILTO" ] ; then
41 tail -c 8k ${BUILD}/log-build.txt | mail -s "Failures for ${BUILD}" $MAILTO
49 if [ -n "$MAILTO" ] ; then
50 (echo "http://build.one-lab.org/$DISTRO/$BASE" ; echo "Completed on $(date)" ) | mail -s "Successfull build in ${BUILD}" $MAILTO
58 function create_vserver () {
61 function use_base () {
63 [ ! -d $BASE ] && mkdir $BASE
64 if [ ! -d $BASE ] ; then
65 echo $COMMAND failed to create base $BASE
76 echo -n "============================== Starting $COMMAND:build on "
82 # if TAGSRELEASE specified : update DISTROMAKETAGS with this tag
83 if [ -n "$TAGSRELEASE" ] ; then
85 svn up -r $TAGSRELEASE $DISTROMAKETAGS
91 echo "Running make IN build $(pwd)"
92 make stage1=true ${MAKEOPTS[@]} DISTROMAKETAGS=${DISTROMAKETAGS} PLDISTRO=${DISTRO} ${MAKEVARS[@]} -C $BASE
93 # in case we use an older build
95 make ${MAKEOPTS[@]} DISTROMAKETAGS=${DISTROMAKETAGS} PLDISTRO=${DISTRO} ${MAKEVARS[@]} -C $BASE versions
97 make ${MAKEOPTS[@]} DISTROMAKETAGS=${DISTROMAKETAGS} PLDISTRO=${DISTRO} ${MAKEVARS[@]} -C $BASE $MAKETARGETS
99 # restore silent mode - otherwise cron gets it
103 function runtest () {
108 echo -n"==============================> testing the sendmail service on PLE"
109 ssh ${PLEBOX} python -u /root/${TESTSEND}
111 echo -n "============================== Starting $COMMAND:runtest on "
115 ### compute URL to the myplc package
117 buildname=$(basename $build)
119 rpm=$(find RPMS -name myplc\*.rpm )
120 url=${TESTBUILDURL}${DISTRO}/${buildname}/${rpm}
121 ### checkout the test material
122 svn co ${TESTSVNPATH} plctest
123 # compute test directory name on test box
124 testdir=plctest-${buildname}
125 # rsync/push test material onto the test box
126 ssh ${TESTBOXSSH} mkdir -p ${testdir}
127 rsync -a -v plctest/ ${TESTBOXSSH}:${testdir}
128 # invoke test on testbox
129 ssh ${TESTBOXSSH} python -u ${testdir}/${TESTSCRIPT} ${url}
130 #invoke make install from build to the testbox
131 make install PLCHOST=${TESTBOX}
133 if [ "$?" != 0 ] ; then
140 function show_env () {
142 echo FC_DISTRO=$FC_DISTRO
145 echo SVNPATH=$SVNPATH
146 echo MAKEVARS="${MAKEVARS[@]}"
147 echo MAKEOPTS="${MAKEOPTS[@]}"
148 echo DISTROMAKETAGS="$DISTROMAKETAGS"
149 echo TAGSRELEASE="$TAGSRELEASE"
150 echo "XXXXXXXXXXXXXXXXXXXX Contents of tags definition file $DISTROMAKETAGS"
151 cat $BASE/$DISTROMAKETAGS
152 echo "XXXXXXXXXXXXXXXXXXXX end tags definition"
156 echo "Usage: $COMMAND [option] make-targets"
157 echo "This is revision $REVISION"
158 echo "Supported options"
159 echo " -f FC_DISTRO - defaults to $DEFAULT_FC_DISTRO"
160 echo " -b BASE - may include @, then replaced with current date"
161 echo " -u : uses directory given as BASE as is, even if already exists"
163 echo " -t PLDISTROMAKETAGS"
164 echo " -r TAGSRELEASE - a release number that refers to PLDISTROMAKETAGS - defaults to HEAD"
165 echo " -s MAKEVAR=value - spaces in value are not supported"
166 echo " -n dry-run : -n passed to make - no mail sent"
169 echo " -B : run build only"
170 echo " -T : run test only"
181 while getopts "f:b:ud:t:r:s:nm:s:BTh" opt ; do
183 f) FC_DISTRO=$OPTARG ;;
187 t) DISTROMAKETAGS=$OPTARG ;;
188 r) TAGSRELEASE=$OPTARG ;;
189 s) MAKEVARS=(${MAKEVARS[@]} $OPTARG) ;;
190 n) MAILTO="" ; MAKEOPTS=(${MAKEOPTS[@]} -n) ;;
192 s) SVNPATH=$OPTARG ;;
194 T) DO_BUILD= ; USEOLD=true ;;
199 shift $(($OPTIND - 1))
201 [ -z "$FC_DISTRO" ] && FC_DISTRO=$DEFAULT_FC_DISTRO
204 ### set BASE from DISTRO, if unspecified
205 [ -z "$BASE" ] && BASE=${DISTRO}-${FC_DISTRO}
206 BASE=$(echo ${BASE} | sed -e "s,@,${DATE},g")
208 # if we run in the root context :
209 # (*) create or check for the vserver to use
210 # (*) copy this command in the vserver
213 if [ -d /vservers ] ; then
215 if [ -n "$USEOLD" ] ; then
216 ### Re-use a vserver (finish an unfinished build..)
217 if [ ! -d /vservers/${BASE} ] ; then
218 echo $COMMAND : cannot find vserver $BASE
222 vserver ${BASE} exec svn update /build
224 # create vserver: check it does not exist yet
226 while [ -d /vservers/${BASE}${i} ] ; do
227 [ -z ${i} ] && BASE=${BASE}.
229 if [ $i -gt 100 ] ; then
230 echo "$COMMAND: Failed to create release directory /vservers/${BASE}${i}"
235 ### extract vbuild.setup and run it
236 svn cat $SVNPATH/vbuild.setup /tmp/vbuild-$$
237 svn cat $SVNPATH/${DISTRO}-devel.lst /tmp/${DISTRO}-devel.lst
240 /tmp/vbuild-$$ ${BASE} ${FC_DISTRO} ${DISTRO}-devel
243 vserver ${BASE} exec svn checkout ${SVNPATH} /build
246 cp $COMMANDPATH /vservers/${BASE}
247 # invoke this command in the vserver
248 vserver ${BASE} exec /$COMMAND "$@"
251 if [ -n "$DO_BUILD" ] ; then
252 build >> /log-build.txt 2>&1
256 if [ -n "$DO_TEST" ] ; then
257 runtest ${BUILD} >> ${BUILD}/log-build.txt 2>&1
260 success >> ${BUILD}/log-build.txt 2>&1
264 # todo : gather results from various vservers into a single build index