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 TAGSFILE=onelab-tags.mk
16 TESTBUILDURL="http://build.one-lab.org/"
17 TESTBOXSSH=root@onelab-test.inria.fr
18 TESTSVNPATH="svn+ssh://build@svn.one-lab.org/svn/new_plc_api/trunk/plctest"
19 TESTSCRIPT=TestMain.py
22 # plc chroot runs in UTC
23 DATE=$(date -u +'%Y.%m.%d')
25 ### in the root context
26 function do_chroot () {
27 chroot /plc/devel/root su - build <<EOF
28 $CHROOTBINDIR/$COMMAND $@
32 # Notify recipient of failure or success, manage various stamps
36 if [ -n "$MAILTO" ] ; then
37 tail -c 8k ${BUILD}/log-build.txt | mail -s "Failures for ${BUILD}" $MAILTO
45 if [ -n "$MAILTO" ] ; then
46 (echo "http://build.one-lab.org/$DISTRO/$BASE" ; echo "Completed on $(date)" ) | mail -s "Successfull build in ${BUILD}" $MAILTO
54 function create_base () {
56 while ! mkdir ${BASE}${i} 2>/dev/null ; do
57 [ -z ${i} ] && BASE=${BASE}.
59 if [ $i -gt 100 ] ; then
60 echo "$0: Failed to create release directory `pwd`/${BASE}${i}"
67 function use_base () {
68 [ ! -d $BASE ] && mkdir $BASE
69 if [ ! -d $BASE ] ; then
70 echo $COMMAND failed to create base $BASE
80 echo -n "============================== Starting $COMMAND:build on "
86 # if TAGSTAG specified : update TAGSFILE with this tag
87 if [ -n "$TAGSTAG" ] ; then
89 svn up -r $TAGSTAG $TAGSFILE
95 echo "Running make IN build $(pwd)"
96 make stage1=true ${MAKEOPTS[@]} TAGSFILE=${TAGSFILE} PLDISTRO=${DISTRO} ${MAKEVARS[@]} -C $BASE $MAKETARGETS
97 make ${MAKEOPTS[@]} TAGSFILE=${TAGSFILE} PLDISTRO=${DISTRO} ${MAKEVARS[@]} -C $BASE $MAKETARGETS
100 function runtest () {
105 echo -n "============================== Starting $COMMAND:runtest on "
108 ### compute URL to the myplc package
110 buildname=$(basename $build)
112 rpm=$(find RPMS -name myplc\*.rpm )
113 url=${TESTBUILDURL}${DISTRO}/${buildname}/${rpm}
115 ### checkout the test material
116 svn co ${TESTSVNPATH} plctest
117 # compute test directory name on test box
118 testdir=plctest-${buildname}
119 # rsync/push test material onto the test box
120 ssh ${TESTBOXSSH} mkdir -p ${testdir}
121 rsync -a -v plctest/ ${TESTBOXSSH}:${testdir}
122 # invoke test on testbox
123 ssh ${TESTBOXSSH} ${testdir}/${TESTSCRIPT} ${url}
127 function show_env () {
131 echo SVNPATH=$SVNPATH
132 echo MAKEVARS="${MAKEVARS[@]}"
133 echo MAKEOPTS="${MAKEOPTS[@]}"
134 echo TAGSFILE="$TAGSFILE"
135 echo TAGSTAG="$TAGSTAG"
136 echo "XXXXXXXXXXXXXXXXXXXX Contents of tags definition file $TAGSFILE"
138 echo "XXXXXXXXXXXXXXXXXXXX end tags definition"
142 echo "Usage: $COMMAND [option] make-targets"
143 echo "This is revision $REVISION"
144 echo "Supported options"
145 echo " -b BASE - may include @, then replaced with current date"
146 echo " -u : uses directory given as BASE as is, even if already exists"
147 echo " -e : exits (does nothing) if BASE already exists"
150 echo " -r TAGSTAG - a tag that refers to TAGSFILE - defaults to HEAD"
151 echo " -s MAKEVAR=value - spaces in value are not supported"
152 echo " -n passed to make"
155 echo " -T : run test only"
161 if [ -d /plc/devel/data ] ; then
166 while getopts "b:ued:t:r:B:s:nm:s:Th" opt ; do
172 t) TAGSFILE=$OPTARG ;;
173 r) TAGSTAG=$OPTARG ;;
174 s) MAKEVARS=(${MAKEVARS[@]} $OPTARG) ;;
175 n) MAILTO="" ; MAKEOPTS=(${MAKEOPTS[@]} -n) ;;
177 s) SVNPATH=$OPTARG ;;
178 T) TESTONLY=true ; USEOLD=true ;;
183 shift $(($OPTIND - 1))
190 ### set BASE from DISTRO, if unspecified
191 [ -z "$BASE" ] && BASE=${DISTRO}
192 BASE=$(echo ${BASE} | sed -e "s,@,${DATE},g")
194 if [ -n "$EXITIFOLD" -a -d "$BASE" ] ; then
195 echo "$COMMAND: -e : exits on existing base directory $BASE"
201 if [ -n "$USEOLD" ] ; then
208 if [ -z "$TESTONLY" ] ; then
209 build >> ${BUILD}/log-build.txt 2>&1
212 runtest ${BUILD} >> ${BUILD}/log-build.txt 2>&1
214 success >> ${BUILD}/log-build.txt 2>&1