ec817dd42785e5ccea830f036414b48ff8db2df7
[infrastructure.git] / scripts / all-builds.sh
1 #!/bin/bash
2 # $Id$
3 # this script is managed under subversion at 
4 # http://svn.onelab.eu/infrastructure/scripts/all-builds.sh
5 # it is triggered every night at 0:05 french time on build.onelab.eu aka blitz.inria.fr
6
7 COMMAND=$(basename $0)
8
9 MAILTO="-m build@onelab.eu"
10
11 function usage () {
12     echo "Usage: $COMMAND [options [ -- vbuild-nightly-options ]]"
13     echo "In manual mode you should export the following vars (or use related option)"
14     echo "MAJOR_DISTROS (-d) TRUNK_DISTROS (-td) TRUNK_FCDISTROS (-tf) VS_DISTROS (-vd)"
15     echo "FCDISTROS (-f) BITS (-i) BASE (-b)"
16     echo "BUILD_BRANCH(4.2) (-bb) BUILD_TRUNK (-bt)"
17     echo "Overwrite (-o) TEST (-T) DRY_RUN (-n)"
18     echo "Use at least one space for blanking a set of distros"
19     exit 1
20 }
21
22 function run () {
23     [ -n "$manual" ] && echo "$@" '; \'
24     if [ -z "$DRY_RUN" ] ; then
25         "$@"
26     fi
27 }
28
29 function shortname () {
30     distro=$1; shift
31     case $distro in
32         onelab)         echo 1l;;
33         planetlab)      echo pl;;
34         f?|f1?)         echo $distro;;
35         centos5)        echo c5;;
36         *)              echo xx;;
37     esac
38 }
39
40 # comment off for usual dailies
41 #MAJOR=5.0
42 #MINOR=rc01
43 MAJOR=4.2
44 MINOR=rc25
45 base_option=-b
46
47 while [[ -n "$@" ]] ; do
48     case "$1" in
49         -d) shift ; MAJOR_DISTROS="$MAJOR_DISTROS $1" ;;
50         -f) shift ; FCDISTROS="$FCDISTROS $1" ;;
51         -i) shift ; BITS="$BITS $1" ;;
52         -td) shift; TRUNK_DISTROS="$1" ;;
53         -tf) shift; TRUNK_FCDISTROS="$1" ;;
54         -vd) shift; VS_DISTROS="$1" ;;
55         -b) shift; BASE="$1" ;;
56         -bb) BUILD_BRANCH=true ;;
57         -bt) BUILD_TRUNK=true ;;
58         -o) base_option=-o ;;
59         -T) TEST=true ;;
60         -n) DRY_RUN=true ;;
61         -z) MINOR="" ;;
62         --) shift; extra_option="$@" ; shift $# ;;
63         *) usage ;;
64     esac
65     shift
66 done
67
68 FCDISTRO=centos5
69 DEFAULT_FCDISTROS="centos5"
70 DEFAULT_BASE="@DATE@"
71
72 function trunk_builds () {
73     DEFAULT_BITS="32 64"
74     DEFAULT_MAJOR_DISTROS=""
75     DEFAULT_VS_DISTROS=""
76 # 5.0 ready for planetlab distro only so far
77     DEFAULT_TRUNK_DISTROS="planetlab"
78 #    DEFAULT_TRUNK_DISTROS="onelab planetlab"
79     DEFAULT_TRUNK_FCDISTROS="f8 f10"
80 }
81
82 function branch_builds_42 () {
83     DEFAULT_MAJOR_DISTROS="onelab planetlab"
84     DEFAULT_VS_DISTROS=""
85     DEFAULT_BITS="32"
86     DEFAULT_TRUNK_DISTROS=""
87     DEFAULT_TRUNK_FCDISTROS=""
88     DEFAULT_FCDISTROS="f8"
89 }
90
91 function tagged_builds_42 () {
92     DEFAULT_BITS="32 64"
93     DEFAULT_MAJOR_DISTROS="onelab planetlab"
94     DEFAULT_VS_DISTROS="onelab"
95     DEFAULT_TRUNK_DISTROS=""
96     DEFAULT_TRUNK_FCDISTROS=""
97 }
98
99 if [ -n "$BUILD_BRANCH" ] ; then
100     branch_builds_42
101     BUILDOPT="-s http://svn.planet-lab.org/svn/build/branches/${MAJOR}"
102 elif [ -n "$BUILD_TRUNK" ] ; then
103     trunk_builds
104     BUILDOPT=""
105 else
106     tagged_builds_42
107     BUILDOPT="-s http://svn.planet-lab.org/svn/build/tags/${MAJOR}-${MINOR}"
108 fi
109
110 [[ -n "$@" ]] && usage
111
112 # export any of these to override - this is for manual use only
113 if [ -z "$MAJOR_DISTROS" ] ;    then MAJOR_DISTROS=$DEFAULT_MAJOR_DISTROS ;     else manual=true ; fi
114 if [ -z "$FCDISTROS" ] ;        then FCDISTROS=$DEFAULT_FCDISTROS ;             else manual=true ; fi
115 if [ -z "$BITS" ] ;             then BITS=$DEFAULT_BITS ;                       else manual=true ; fi
116 if [ -z "$TRUNK_DISTROS" ] ;    then TRUNK_DISTROS=$DEFAULT_TRUNK_DISTROS ;     else manual=true ; fi
117 if [ -z "$TRUNK_FCDISTROS" ] ;  then TRUNK_FCDISTROS=$DEFAULT_TRUNK_FCDISTROS ; else manual=true ; fi
118 if [ -z "$VS_DISTROS" ] ;       then VS_DISTROS=$DEFAULT_VS_DISTROS ;           else manual=true ; fi
119 if [ -z "$BASE" ] ;             then BASE=$DEFAULT_BASE ;                       else manual=true ; fi
120 [ -n "$TEST" ] &&       { extra_option="$extra_option -T" ; }
121 [ -n "$DRY_RUN" ] &&    { manual=true ; }
122
123 ############################## ${MAJOR}
124 for bits in $BITS; do
125     for f in $FCDISTROS ; do 
126         for d in $MAJOR_DISTROS ; do
127             p=linux${bits}
128             s=$(shortname $d)
129             if [ -n "$BUILD_BRANCH" ] ; then
130                 buildname="${d}-${MAJOR}-${BASE}-${f}-${bits}"
131             elif [ -n "$BUILD_TRUNK" ] ; then
132                 buildname="${BASE}--${s}.${MAJOR}--${f}-${bits}"
133             else
134                 buildname="${d}-${MAJOR}-${MINOR}-${f}-${bits}"
135             fi
136             command="/root/bin/vbuild-nightly.sh ${MAILTO} ${BUILDOPT} \
137                 -d $d -p $p -f $f -t ${d}-tags-${MAJOR}.mk \
138                 ${base_option} $buildname $extra_option"
139             run $command
140         done
141     done
142 done
143
144 ############################## ${MAJOR}/centos5
145 # centos5 : for both archs, make the vserver rpms
146 # does not test, so skip if test is requested
147 if [ -z "$TEST" ] ; then
148     f=centos5
149     for d in $VS_DISTROS ; do
150         for bits in $BITS ; do
151             p=linux${bits}
152             s=$(shortname $d)
153             if [ -n "$BUILD_BRANCH" ] ; then 
154                 buildname="${d}-${MAJOR}-${BASE}-vs-${f}-${bits}"
155             elif [ -n "$BUILD_TRUNK" ] ; then
156                 buildname="${BASE}--${s}.${MAJOR}--vs-${f}-${bits}"
157             else
158                 buildname="${d}-${MAJOR}-${MINOR}-vs-${f}-${bits}"
159             fi
160             command="/root/bin/vbuild-nightly.sh ${MAILTO} ${BUILDOPT} \
161             -d $d -p $p -f $f -t ${d}-tags-${MAJOR}.mk \
162             ${base_option} $buildname -B $extra_option vserver"
163             run $command
164         done
165     done
166 fi
167
168 ############################## TRUNK
169 # raw - std planetlab x f8 x 32bits for deploying on alpha nodes
170 for bits in $BITS; do
171
172     for f in $TRUNK_FCDISTROS; do 
173         fs=$(shortname $f)      
174         p=linux${bits}
175         d=planetlab
176         ds=$(shortname $d)
177         buildname="${BASE}--tr${fs}-${ds}-${bits}"
178         command="/root/bin/vbuild-nightly.sh ${MAILTO} ${BUILDOPT} \
179          -d $d -p $p -f $f ${base_option} $buildname $extra_option"
180         run $command
181     done
182
183     for d in $TRUNK_DISTROS; do
184         ds=$(shortname $d)
185         p=linux${bits}
186         f=$FCDISTRO
187         fs=$(shortname $f)
188         buildname="${BASE}--tr${fs}-${ds}-${bits}"
189         command="/root/bin/vbuild-nightly.sh ${MAILTO} ${BUILDOPT} \
190          -d $d -p $p -f $f ${base_option} $buildname $extra_option"
191         run $command
192     done
193 done
194 ##############################