blob: 9c16db89ad0f553621b6a0330512566d3d61a2aa [file] [log] [blame]
david_williamsbd17e9e2008-01-20 05:05:16 +00001#!/usr/bin/env bash
2#
3# Script to promote the latest build in the specified committers area
4#
david_williamsbd17e9e2008-01-20 05:05:16 +00005
david_williams03bdf892008-02-02 03:00:11 +00006function usage() {
david_williamsacb65562008-12-13 20:02:58 +00007 printf "\n\tUsage: %s [-v] [-d] [-s] [-c] [-p] projectname " $(basename $0) >&2
david_williams03bdf892008-02-02 03:00:11 +00008 printf "\n\t\t%s\n\n" "where <projectname> is wtp-R2.0-M, wtp-R3.0-I, wtp-R3.0-N, etc." >&2
9}
10
david_williams33445492008-02-23 02:30:34 +000011source rsync-retry.sh
12
david_williams8bfa02a2008-01-22 05:34:52 +000013verboseFlag=
14deleteOld=
15doCopy=
16projectname=
david_williams4e4949d2008-12-13 18:17:17 +000017while getopts 'hvdcsp:' OPTION
david_williams8bfa02a2008-01-22 05:34:52 +000018do
19 case $OPTION in
david_williamsf1521c12008-05-30 20:20:25 +000020 h) usage
21 exit 1
22 ;;
david_williams8bfa02a2008-01-22 05:34:52 +000023 v) verboseFlag=1
24 ;;
25 d) deleteOld=1
26 ;;
27 c) doCopy=1
28 ;;
david_williams4e4949d2008-12-13 18:17:17 +000029 s) sendmail=1
30 ;;
31 p) projectname=$OPTARG
david_williams8bfa02a2008-01-22 05:34:52 +000032 ;;
david_williams03bdf892008-02-02 03:00:11 +000033 ?) usage
david_williams8bfa02a2008-01-22 05:34:52 +000034 exit 2
35 ;;
36 esac
37done
38
39shift $(($OPTIND - 1))
40
41
42
david_williams03bdf892008-02-02 03:00:11 +000043# check we have at least the project name
david_williams8bfa02a2008-01-22 05:34:52 +000044if [ -z $projectname ]
45then
46 printf "\n\t%s\n" "Error: project name is required." >&2
david_williams03bdf892008-02-02 03:00:11 +000047 usage
david_williams8bfa02a2008-01-22 05:34:52 +000048 exit 1
49fi
david_williamsbd17e9e2008-01-20 05:05:16 +000050
51if [[ "$projectname" =~ "(.*)-(.*)-(.*)" ]]
52then
53 distribution=${BASH_REMATCH[1]}
54 buildBranch=${BASH_REMATCH[2]}
55 buildType=${BASH_REMATCH[3]}
56 printf "\n\t%s\n\n" "Promoting latest build from ${1} ..."
david_williams8bfa02a2008-01-22 05:34:52 +000057 if [ $verboseFlag ]
58 then
59 echo "distribution: $distribution"
60 echo "buildBranch: $buildBranch"
61 echo "buildType: $buildType"
62 fi
david_williamsbd17e9e2008-01-20 05:05:16 +000063else
david_williams03bdf892008-02-02 03:00:11 +000064 printf "\n\t%s\n" "Error: projectname doesn't match <distribution>-<buildbranch>-<buildtype> pattern." >&2
65 usage
david_williamsbd17e9e2008-01-20 05:05:16 +000066 exit 3
67fi
68
69# remember to leave no slashes on filename in source command,
70# (the commonVariations.shsource file, that is)
71# so that users path is used to find it (first)
72if [ -z $BUILD_INITIALIZED ]
73then
david_williams8bfa02a2008-01-22 05:34:52 +000074 source commonVariations.shsource
75 MINIMIZE_SCRIPT_OUTPUT="true"
76 source ${BUILD_HOME}/releng.control/commonComputedVariables.shsource
david_williamsbd17e9e2008-01-20 05:05:16 +000077fi
78
79artifactsDir=${PROJECT_ARTIFACTS}
80promoteProjectDir=${artifactsDir}'/'${projectname}
david_williams8bfa02a2008-01-22 05:34:52 +000081if [ $verboseFlag ]
82then
83 echo "Project directory to promote: ${promoteProjectDir} "
84fi
85
david_williamsbd17e9e2008-01-20 05:05:16 +000086if [ ! \( -d ${promoteProjectDir} \) ]
87then
88 printf "\n\t%s\n" "Error: directory ${promoteProjectDir} does not exist." >&2
david_williams03bdf892008-02-02 03:00:11 +000089 usage
david_williamsbd17e9e2008-01-20 05:05:16 +000090 exit 4
91fi
92
93i=0
94for FN in ${promoteProjectDir}/*
95do
96 dirName=$(basename ${FN})
david_williams8bfa02a2008-01-22 05:34:52 +000097 if [ $verboseFlag ]
98 then
99 echo -n "${i}: "
100 echo ${dirName}
101 fi
102 # todo: could check that the name follows the expected date pattern
david_williamsbd17e9e2008-01-20 05:05:16 +0000103 dirList[${i}]=${dirName}
104 i=$(($i + 1))
105done
106
107nDir=${#dirList[*]}
108
david_williams8bfa02a2008-01-22 05:34:52 +0000109if [ $verboseFlag ]
110then
111 echo "Number of directories: ${nDir}"
112fi
david_williamsbd17e9e2008-01-20 05:05:16 +0000113
114# echo "Least recent: ${dirList[0]}"
115# echo "Most recent: ${dirList[$(($nDir - 1))]}"
116
117mostRecent=${dirList[$(($nDir - 1))]}
118
119mostRecentDir=${promoteProjectDir}/${mostRecent}
120
121
122i=0
123for FN in ${mostRecentDir}/*
124do
125 dropDirName=$(basename ${FN})
david_williams8bfa02a2008-01-22 05:34:52 +0000126 if [ $verboseFlag ]
127 then
128 echo -n "${i}: "
129 echo ${dropDirName}
130 fi
131 # todo: could check that the name follows the expected drop directory pattern
david_williamsbd17e9e2008-01-20 05:05:16 +0000132 dropDirList[${i}]=${dropDirName}
133 i=$(($i + 1))
134done
135
david_williams4cbceb72008-01-22 03:41:40 +0000136ndropDir=${#dropDirList[*]}
david_williamsbd17e9e2008-01-20 05:05:16 +0000137
138# there should be exactly one drop directory
david_williams4cbceb72008-01-22 03:41:40 +0000139if [ $ndropDir != 1 ]
david_williamsbd17e9e2008-01-20 05:05:16 +0000140then
david_williams8bfa02a2008-01-22 05:34:52 +0000141 printf "\n\t%s\n" "Error: there was not exactly one drop direc:tory. There was $ndropDir found instead." >&2
david_williams03bdf892008-02-02 03:00:11 +0000142 usage
david_williamsbd17e9e2008-01-20 05:05:16 +0000143 exit 5
david_williamsbd17e9e2008-01-20 05:05:16 +0000144fi
145
146# knowing there is exactly one, the value of dropDirName is still valid
147
david_williams8bfa02a2008-01-22 05:34:52 +0000148echo "Drop directory: ${dropDirName}"
david_williamsbd17e9e2008-01-20 05:05:16 +0000149
150FROMDIR=${mostRecentDir}/${dropDirName}
151
david_williams34f3f912008-07-08 01:36:22 +0000152if [ "patches" == $distribution ]
153then
154 TODIR=${DOWNLOAD_ROOT}/webtools/patches/drops/${buildBranch}/
155else
156 TODIR=${DOWNLOAD_ROOT}/webtools/downloads/drops/${buildBranch}/
157fi
david_williamsf6963892008-01-20 05:38:13 +0000158
159printf "\t%s\n" "declaring build ${dropDirName} on buildstream ${buildBranch}"
160printf "\t\t%s\n" "into ${TODIR}"
161printf "\t\t%s\n\n" "using the build from ${FROMDIR}"
david_williamsbd17e9e2008-01-20 05:05:16 +0000162
david_williams8bfa02a2008-01-22 05:34:52 +0000163if [ $doCopy ]
david_williams26840072008-01-22 03:32:43 +0000164then
david_williams33445492008-02-23 02:30:34 +0000165 rsync-retry ${FROMDIR} ${TODIR} $verboseFlag
166 exitCode=$?
167 if [ $exitCode -ne 0 ]
168 then
169 exit $exitCode
170 fi
david_williams26840072008-01-22 03:32:43 +0000171
david_williams8bfa02a2008-01-22 05:34:52 +0000172 fromString="webtools/committers"
david_williams9db6fa42008-08-25 17:03:10 +0000173 if [ "patches" == $distribution ]
174 then
175 toString="webtools/patches"
176 else
177 toString="webtools/downloads"
david_williams55ecb6d2008-08-26 03:52:18 +0000178 fi
david_williams8bfa02a2008-01-22 05:34:52 +0000179 replaceCommand="s!${fromString}!${toString}!g"
david_williamsbd17e9e2008-01-20 05:05:16 +0000180
david_williams0be0d972008-02-16 05:38:57 +0000181 # remember TODIR already has a slash
182 ${REMOTE_SSH_COMMAND} perl -w -pi -e ${replaceCommand} ${TODIR}${dropDirName}/*.php
david_williamsbd17e9e2008-01-20 05:05:16 +0000183
david_williams4e4949d2008-12-13 18:17:17 +0000184 # send notification mail only if copying?
185
david_williams8bfa02a2008-01-22 05:34:52 +0000186else
david_williams03bdf892008-02-02 03:00:11 +0000187 printf "\n\t%s\n\n" "Nothing copied: specify -c to actually do the copy"
david_williams26840072008-01-22 03:32:43 +0000188fi
david_williamsbd17e9e2008-01-20 05:05:16 +0000189
david_williams4e4949d2008-12-13 18:17:17 +0000190if [ $sendmail ]
191then
192 ./sendPromoteMail.sh "$projectname" "$TODIR" "$dropDirName"
193 echo "mail sent"
194else
195 echo "no mail sent. Specify -s if desired"
196fi
197
david_williams03bdf892008-02-02 03:00:11 +0000198
199if [ $deleteOld ]
200then
201
202 maxToDelete=$(($nDir - 1))
203 if [ $verboseFlag ]
204 then
205 echo "maxToDelete: $maxToDelete"
206 fi
207 for (( i=0; i < $maxToDelete; i++))
208 do
209 dirbasename=${dirList[$i]}
210 dropDirName=${promoteProjectDir}/${dirbasename}
211 if [ $verboseFlag ]
212 then
213 echo -n "${i}: "
214 echo ${dropDirName}
215 fi
216 rm -fr ${dropDirName}
217 done
218
219fi