oops - broken for onelab distro in an attempt to rebuild the planetlab distro
[infrastructure.git] / scripts / nightly-build.sh
1 #!/bin/bash
2
3 COMMAND=$(basename $0)
4 ROOT=/build
5 CVSROOT=":pserver:anon@cvs.planet-lab.org:/cvs"
6 DISTRO=onelab
7 MAILTO="thierry.parmentelat@sophia.inria.fr"
8 TAG=HEAD
9 CHROOTDIR=/root/bin
10
11 # plc chroot runs in UTC
12 date=$(date -u +'%Y.%m.%d')
13
14 function usage () {
15   echo "$COMMAND [option]"
16   echo " -d CVSROOT"
17   echo " -r TAG"
18   echo " -m MAILTO"
19   echo " -f DISTRO"
20   echo " -b BASE"
21   exit 1
22 }
23
24 ### in the root context
25 function do_chroot () {
26   chroot /plc/devel/root su - build <<EOF
27 $CHROOTDIR/$COMMAND $@
28 EOF
29 }
30
31 # Notify recipient of failure
32 function failure() {
33   if [ -n "$MAILTO" ] ; then
34     tail -c 8k ${BUILD}/log-build.txt | mail -s "Failures for ${BUILD}" $MAILTO
35   fi
36   exit 1
37 }
38
39 function success () {
40   if [ -n "$MAILTO" ] ; then
41     date | mail -s "Successfull build in ${BUILD}" $MAILTO
42   fi
43   exit 1
44 }
45
46 function create_base () {
47   BASE=${TAG/HEAD/`date +%Y.%m.%d`}
48   i=
49   while ! mkdir ${BASE}${i} 2>/dev/null ; do
50     [ -z ${i} ] && BASE=${BASE}.
51     i=$((${i}+1))
52     if [ $i -gt 100 ] ; then
53       echo "$0: Failed to create release directory `pwd`/${BASE}${i}"
54       exit 1
55     fi
56   done
57   BASE=${BASE}${i}
58 }
59
60 function use_base () {
61   [ ! -d $BASE ] && mkdir $BASE
62   if [ ! -d $BASE ] ; then
63     echo $COMMAND failed to create base $BASE
64     exit 1
65   fi
66 }
67
68 function manage_distro () {
69
70 #  DISTROFILE=$BUILD/$DISTRO.mk
71 #
72 #  if [ -f $DISTROFILE ] ; then
73 #    echo Using $DISTROFILE
74 #  elif [ -f $ROOT/$DISTRO.mk ] ; then
75 #    echo Using $ROOT/$DISTRO.mk
76 #    ln -s $ROOT/$DISTRO.mk $DISTROFILE
77 #  else
78 #    echo Could not locate $DISTRO.mk
79 #    exit 1
80 #  fi
81 #
82   if [ "$DISTRO" != planetlab ] ; then
83     DISTROFILE=$BUILD/$DISTRO.xml
84
85     if [ -f $DISTROFILE ] ; then
86       echo Using $DISTROFILE
87     elif [ -f $ROOT/$DISTRO.xml ] ; then
88       echo Using $ROOT/$DISTRO.xml
89       ln -s $ROOT/$DISTRO.xml $DISTROFILE
90     else
91       echo Could not locate $DISTRO.xml
92       exit 1
93     fi
94   fi
95
96 }
97
98 function build () {
99   trap failure ERR INT
100   set -x
101
102   echo -n "============================== Starting $COMMAND on "
103   date
104
105   show_env
106     
107   cd $ROOT
108   cvs -d $CVSROOT co -d $BASE build
109
110   manage_distro
111
112   echo "Running make IN build $(pwd)"
113   make TAG=${TAG} PLDISTRO=${DISTRO} -C $BASE
114
115   # only if successful
116   rm -f latest
117   ln -s $BASE latest
118
119   success
120 }
121
122 function show_env () {
123   echo ROOT=$ROOT
124   echo BASE=$BASE
125   echo TAG=$TAG
126   echo DISTRO=$DISTRO
127 }
128
129 function main () {
130
131   if [ -d /plc/devel/data ] ; then
132     do_chroot "$@"
133   else
134     while getopts "d:r:m:f:b:h" opt ; do
135       case $opt in
136         d) CVSROOT=$OPTARG ;;
137         r) TAG=$OPTARG ;;
138         m) MAILTO=$OPTARG ;;
139         f) DISTRO=$OPTARG ;;
140         b) BASE=$OPTARG ;;
141         h) usage ;;
142       esac
143     done
144     shift $(($OPTIND - 1))
145
146     cd $ROOT
147     ### determine BASE
148     # if specified, use it, otherwise create from date
149     if [ -z "$BASE" ] ; then
150       create_base
151     else
152       use_base $BASE
153     fi
154     BUILD=$ROOT/$BASE
155     
156     build >> ${BUILD}/log-build.txt 2>&1
157   fi
158 }  
159
160 ##########
161 main "$@"