david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 1 | #!/usr/bin/env bash |
| 2 | # |
| 3 | # Script to promote the latest build in the specified committers area |
| 4 | # |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 5 | |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 6 | function usage() { |
david_williams | acb6556 | 2008-12-13 20:02:58 +0000 | [diff] [blame] | 7 | printf "\n\tUsage: %s [-v] [-d] [-s] [-c] [-p] projectname " $(basename $0) >&2 |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 8 | 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_williams | 3344549 | 2008-02-23 02:30:34 +0000 | [diff] [blame] | 11 | source rsync-retry.sh |
| 12 | |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 13 | verboseFlag= |
| 14 | deleteOld= |
| 15 | doCopy= |
| 16 | projectname= |
david_williams | 4e4949d | 2008-12-13 18:17:17 +0000 | [diff] [blame] | 17 | while getopts 'hvdcsp:' OPTION |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 18 | do |
| 19 | case $OPTION in |
david_williams | f1521c1 | 2008-05-30 20:20:25 +0000 | [diff] [blame] | 20 | h) usage |
| 21 | exit 1 |
| 22 | ;; |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 23 | v) verboseFlag=1 |
| 24 | ;; |
| 25 | d) deleteOld=1 |
| 26 | ;; |
| 27 | c) doCopy=1 |
| 28 | ;; |
david_williams | 4e4949d | 2008-12-13 18:17:17 +0000 | [diff] [blame] | 29 | s) sendmail=1 |
| 30 | ;; |
| 31 | p) projectname=$OPTARG |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 32 | ;; |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 33 | ?) usage |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 34 | exit 2 |
| 35 | ;; |
| 36 | esac |
| 37 | done |
| 38 | |
| 39 | shift $(($OPTIND - 1)) |
| 40 | |
| 41 | |
| 42 | |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 43 | # check we have at least the project name |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 44 | if [ -z $projectname ] |
| 45 | then |
| 46 | printf "\n\t%s\n" "Error: project name is required." >&2 |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 47 | usage |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 48 | exit 1 |
| 49 | fi |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 50 | |
| 51 | if [[ "$projectname" =~ "(.*)-(.*)-(.*)" ]] |
| 52 | then |
| 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_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 57 | if [ $verboseFlag ] |
| 58 | then |
| 59 | echo "distribution: $distribution" |
| 60 | echo "buildBranch: $buildBranch" |
| 61 | echo "buildType: $buildType" |
| 62 | fi |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 63 | else |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 64 | printf "\n\t%s\n" "Error: projectname doesn't match <distribution>-<buildbranch>-<buildtype> pattern." >&2 |
| 65 | usage |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 66 | exit 3 |
| 67 | fi |
| 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) |
| 72 | if [ -z $BUILD_INITIALIZED ] |
| 73 | then |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 74 | source commonVariations.shsource |
| 75 | MINIMIZE_SCRIPT_OUTPUT="true" |
| 76 | source ${BUILD_HOME}/releng.control/commonComputedVariables.shsource |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 77 | fi |
| 78 | |
| 79 | artifactsDir=${PROJECT_ARTIFACTS} |
| 80 | promoteProjectDir=${artifactsDir}'/'${projectname} |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 81 | if [ $verboseFlag ] |
| 82 | then |
| 83 | echo "Project directory to promote: ${promoteProjectDir} " |
| 84 | fi |
| 85 | |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 86 | if [ ! \( -d ${promoteProjectDir} \) ] |
| 87 | then |
| 88 | printf "\n\t%s\n" "Error: directory ${promoteProjectDir} does not exist." >&2 |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 89 | usage |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 90 | exit 4 |
| 91 | fi |
| 92 | |
| 93 | i=0 |
| 94 | for FN in ${promoteProjectDir}/* |
| 95 | do |
| 96 | dirName=$(basename ${FN}) |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 97 | 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_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 103 | dirList[${i}]=${dirName} |
| 104 | i=$(($i + 1)) |
| 105 | done |
| 106 | |
| 107 | nDir=${#dirList[*]} |
| 108 | |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 109 | if [ $verboseFlag ] |
| 110 | then |
| 111 | echo "Number of directories: ${nDir}" |
| 112 | fi |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 113 | |
| 114 | # echo "Least recent: ${dirList[0]}" |
| 115 | # echo "Most recent: ${dirList[$(($nDir - 1))]}" |
| 116 | |
| 117 | mostRecent=${dirList[$(($nDir - 1))]} |
| 118 | |
| 119 | mostRecentDir=${promoteProjectDir}/${mostRecent} |
| 120 | |
| 121 | |
| 122 | i=0 |
| 123 | for FN in ${mostRecentDir}/* |
| 124 | do |
| 125 | dropDirName=$(basename ${FN}) |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 126 | 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_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 132 | dropDirList[${i}]=${dropDirName} |
| 133 | i=$(($i + 1)) |
| 134 | done |
| 135 | |
david_williams | 4cbceb7 | 2008-01-22 03:41:40 +0000 | [diff] [blame] | 136 | ndropDir=${#dropDirList[*]} |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 137 | |
| 138 | # there should be exactly one drop directory |
david_williams | 4cbceb7 | 2008-01-22 03:41:40 +0000 | [diff] [blame] | 139 | if [ $ndropDir != 1 ] |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 140 | then |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 141 | printf "\n\t%s\n" "Error: there was not exactly one drop direc:tory. There was $ndropDir found instead." >&2 |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 142 | usage |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 143 | exit 5 |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 144 | fi |
| 145 | |
| 146 | # knowing there is exactly one, the value of dropDirName is still valid |
| 147 | |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 148 | echo "Drop directory: ${dropDirName}" |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 149 | |
| 150 | FROMDIR=${mostRecentDir}/${dropDirName} |
| 151 | |
david_williams | 34f3f91 | 2008-07-08 01:36:22 +0000 | [diff] [blame] | 152 | if [ "patches" == $distribution ] |
| 153 | then |
| 154 | TODIR=${DOWNLOAD_ROOT}/webtools/patches/drops/${buildBranch}/ |
| 155 | else |
| 156 | TODIR=${DOWNLOAD_ROOT}/webtools/downloads/drops/${buildBranch}/ |
| 157 | fi |
david_williams | f696389 | 2008-01-20 05:38:13 +0000 | [diff] [blame] | 158 | |
| 159 | printf "\t%s\n" "declaring build ${dropDirName} on buildstream ${buildBranch}" |
| 160 | printf "\t\t%s\n" "into ${TODIR}" |
| 161 | printf "\t\t%s\n\n" "using the build from ${FROMDIR}" |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 162 | |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 163 | if [ $doCopy ] |
david_williams | 2684007 | 2008-01-22 03:32:43 +0000 | [diff] [blame] | 164 | then |
david_williams | 3344549 | 2008-02-23 02:30:34 +0000 | [diff] [blame] | 165 | rsync-retry ${FROMDIR} ${TODIR} $verboseFlag |
| 166 | exitCode=$? |
| 167 | if [ $exitCode -ne 0 ] |
| 168 | then |
| 169 | exit $exitCode |
| 170 | fi |
david_williams | 2684007 | 2008-01-22 03:32:43 +0000 | [diff] [blame] | 171 | |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 172 | fromString="webtools/committers" |
david_williams | 9db6fa4 | 2008-08-25 17:03:10 +0000 | [diff] [blame] | 173 | if [ "patches" == $distribution ] |
| 174 | then |
| 175 | toString="webtools/patches" |
| 176 | else |
| 177 | toString="webtools/downloads" |
david_williams | 55ecb6d | 2008-08-26 03:52:18 +0000 | [diff] [blame] | 178 | fi |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 179 | replaceCommand="s!${fromString}!${toString}!g" |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 180 | |
david_williams | 0be0d97 | 2008-02-16 05:38:57 +0000 | [diff] [blame] | 181 | # remember TODIR already has a slash |
| 182 | ${REMOTE_SSH_COMMAND} perl -w -pi -e ${replaceCommand} ${TODIR}${dropDirName}/*.php |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 183 | |
david_williams | 4e4949d | 2008-12-13 18:17:17 +0000 | [diff] [blame] | 184 | # send notification mail only if copying? |
| 185 | |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 186 | else |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 187 | printf "\n\t%s\n\n" "Nothing copied: specify -c to actually do the copy" |
david_williams | 2684007 | 2008-01-22 03:32:43 +0000 | [diff] [blame] | 188 | fi |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 189 | |
david_williams | 4e4949d | 2008-12-13 18:17:17 +0000 | [diff] [blame] | 190 | if [ $sendmail ] |
| 191 | then |
| 192 | ./sendPromoteMail.sh "$projectname" "$TODIR" "$dropDirName" |
| 193 | echo "mail sent" |
| 194 | else |
| 195 | echo "no mail sent. Specify -s if desired" |
| 196 | fi |
| 197 | |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 198 | |
| 199 | if [ $deleteOld ] |
| 200 | then |
| 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 | |
| 219 | fi |