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 | eaa47b4 | 2011-02-15 04:11:49 +0000 | [diff] [blame] | 7 | printf "\n\tUsage: %s [-v] [-d] [-s] [-c] [-z] [-p] projectname " $(basename $0) >&2 |
david_williams | 01e8a41 | 2011-02-15 04:37:15 +0000 | [diff] [blame^] | 8 | printf "\n\t\t%s\n" "where <projectname> (for -p) is cc project, such as wtp-R3.2.3-M, wtp-R3.3.0-I, etc." >&2 |
| 9 | printf "\n\t\t%s\t%s" "-v" "verbose" >&2 |
| 10 | printf "\n\t\t%s\t%s" "-d" "delete old builds" >&2 |
| 11 | printf "\n\t\t%s\t%s" "-s" "send notification mail" >&2 |
| 12 | printf "\n\t\t%s\t%s" "-c" "copy the build from committers to downloads" >&2 |
| 13 | printf "\n\t\t%s\t%s" "-z" "process artifacts (create pack200 gz jars, etc.) Remember, is long running." >&2 |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 14 | } |
| 15 | |
david_williams | 3344549 | 2008-02-23 02:30:34 +0000 | [diff] [blame] | 16 | source rsync-retry.sh |
| 17 | |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 18 | verboseFlag= |
| 19 | deleteOld= |
| 20 | doCopy= |
| 21 | projectname= |
david_williams | eaa47b4 | 2011-02-15 04:11:49 +0000 | [diff] [blame] | 22 | processArtifacts= |
| 23 | while getopts 'hvdcszp:' OPTION |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 24 | do |
| 25 | case $OPTION in |
david_williams | f1521c1 | 2008-05-30 20:20:25 +0000 | [diff] [blame] | 26 | h) usage |
| 27 | exit 1 |
| 28 | ;; |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 29 | v) verboseFlag=1 |
| 30 | ;; |
| 31 | d) deleteOld=1 |
| 32 | ;; |
| 33 | c) doCopy=1 |
| 34 | ;; |
david_williams | 4e4949d | 2008-12-13 18:17:17 +0000 | [diff] [blame] | 35 | s) sendmail=1 |
| 36 | ;; |
david_williams | eaa47b4 | 2011-02-15 04:11:49 +0000 | [diff] [blame] | 37 | z) processArtifacts=1 |
| 38 | ;; |
david_williams | 4e4949d | 2008-12-13 18:17:17 +0000 | [diff] [blame] | 39 | p) projectname=$OPTARG |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 40 | ;; |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 41 | ?) usage |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 42 | exit 2 |
| 43 | ;; |
| 44 | esac |
| 45 | done |
| 46 | |
| 47 | shift $(($OPTIND - 1)) |
| 48 | |
| 49 | |
| 50 | |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 51 | # check we have at least the project name |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 52 | if [ -z $projectname ] |
| 53 | then |
| 54 | printf "\n\t%s\n" "Error: project name is required." >&2 |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 55 | usage |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 56 | exit 1 |
| 57 | fi |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 58 | |
david_williams | a3b6560 | 2010-08-01 17:50:32 +0000 | [diff] [blame] | 59 | if [[ "$projectname" =~ (.*)-(.*)-(.*) ]] |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 60 | then |
| 61 | distribution=${BASH_REMATCH[1]} |
| 62 | buildBranch=${BASH_REMATCH[2]} |
| 63 | buildType=${BASH_REMATCH[3]} |
| 64 | printf "\n\t%s\n\n" "Promoting latest build from ${1} ..." |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 65 | if [ $verboseFlag ] |
| 66 | then |
| 67 | echo "distribution: $distribution" |
| 68 | echo "buildBranch: $buildBranch" |
| 69 | echo "buildType: $buildType" |
| 70 | fi |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 71 | else |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 72 | printf "\n\t%s\n" "Error: projectname doesn't match <distribution>-<buildbranch>-<buildtype> pattern." >&2 |
| 73 | usage |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 74 | exit 3 |
| 75 | fi |
| 76 | |
| 77 | # remember to leave no slashes on filename in source command, |
| 78 | # (the commonVariations.shsource file, that is) |
| 79 | # so that users path is used to find it (first) |
| 80 | if [ -z $BUILD_INITIALIZED ] |
| 81 | then |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 82 | source commonVariations.shsource |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 83 | source ${BUILD_HOME}/releng.control/commonComputedVariables.shsource |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 84 | fi |
| 85 | |
| 86 | artifactsDir=${PROJECT_ARTIFACTS} |
| 87 | promoteProjectDir=${artifactsDir}'/'${projectname} |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 88 | if [ $verboseFlag ] |
| 89 | then |
| 90 | echo "Project directory to promote: ${promoteProjectDir} " |
| 91 | fi |
| 92 | |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 93 | if [ ! \( -d ${promoteProjectDir} \) ] |
| 94 | then |
| 95 | printf "\n\t%s\n" "Error: directory ${promoteProjectDir} does not exist." >&2 |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 96 | usage |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 97 | exit 4 |
| 98 | fi |
| 99 | |
| 100 | i=0 |
| 101 | for FN in ${promoteProjectDir}/* |
| 102 | do |
| 103 | dirName=$(basename ${FN}) |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 104 | if [ $verboseFlag ] |
| 105 | then |
| 106 | echo -n "${i}: " |
| 107 | echo ${dirName} |
| 108 | fi |
| 109 | # todo: could check that the name follows the expected date pattern |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 110 | dirList[${i}]=${dirName} |
| 111 | i=$(($i + 1)) |
| 112 | done |
| 113 | |
| 114 | nDir=${#dirList[*]} |
| 115 | |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 116 | if [ $verboseFlag ] |
| 117 | then |
| 118 | echo "Number of directories: ${nDir}" |
| 119 | fi |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 120 | |
| 121 | # echo "Least recent: ${dirList[0]}" |
| 122 | # echo "Most recent: ${dirList[$(($nDir - 1))]}" |
| 123 | |
| 124 | mostRecent=${dirList[$(($nDir - 1))]} |
| 125 | |
| 126 | mostRecentDir=${promoteProjectDir}/${mostRecent} |
| 127 | |
| 128 | |
| 129 | i=0 |
| 130 | for FN in ${mostRecentDir}/* |
| 131 | do |
| 132 | dropDirName=$(basename ${FN}) |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 133 | if [ $verboseFlag ] |
| 134 | then |
| 135 | echo -n "${i}: " |
| 136 | echo ${dropDirName} |
| 137 | fi |
| 138 | # todo: could check that the name follows the expected drop directory pattern |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 139 | dropDirList[${i}]=${dropDirName} |
| 140 | i=$(($i + 1)) |
| 141 | done |
| 142 | |
david_williams | 4cbceb7 | 2008-01-22 03:41:40 +0000 | [diff] [blame] | 143 | ndropDir=${#dropDirList[*]} |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 144 | |
| 145 | # there should be exactly one drop directory |
david_williams | 4cbceb7 | 2008-01-22 03:41:40 +0000 | [diff] [blame] | 146 | if [ $ndropDir != 1 ] |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 147 | then |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 148 | 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] | 149 | usage |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 150 | exit 5 |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 151 | fi |
| 152 | |
| 153 | # knowing there is exactly one, the value of dropDirName is still valid |
| 154 | |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 155 | echo "Drop directory: ${dropDirName}" |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 156 | |
| 157 | FROMDIR=${mostRecentDir}/${dropDirName} |
| 158 | |
david_williams | eaa47b4 | 2011-02-15 04:11:49 +0000 | [diff] [blame] | 159 | if [[ processArtifacts ]] |
| 160 | then |
david_williams | a2b87ed | 2011-02-15 04:01:30 +0000 | [diff] [blame] | 161 | #run pack200 (and, recompute checksums) before literally promoting |
| 162 | |
| 163 | repoDirLocation=$FROMDIR/repository |
| 164 | if [[ -d "${repoDirLocation}" ]] |
| 165 | then |
david_williams | eaa47b4 | 2011-02-15 04:11:49 +0000 | [diff] [blame] | 166 | echo "INFO: processing artifacts in code repo: $repoDirLocation"; |
david_williams | a2b87ed | 2011-02-15 04:01:30 +0000 | [diff] [blame] | 167 | ${RELENG_CONTROL}/runAntRunner.sh process-artifacts.xml -DrepoDirLocation="${repoDirLocation}" |
| 168 | else |
| 169 | echo "WARNING: expected code repo directory does not exist: $repoDirLocation"; |
| 170 | fi |
| 171 | |
| 172 | repoDirLocation=$FROMDIR/repositoryunittests |
| 173 | if [[ -d "${repoDirLocation}" ]] |
| 174 | then |
david_williams | eaa47b4 | 2011-02-15 04:11:49 +0000 | [diff] [blame] | 175 | echo "INFO: calling processing artifacts in test repo: $repoDirLocation"; |
david_williams | a2b87ed | 2011-02-15 04:01:30 +0000 | [diff] [blame] | 176 | ${RELENG_CONTROL}/runAntRunner.sh process-artifacts.xml -DrepoDirLocation="${repoDirLocation}" |
| 177 | else |
david_williams | eaa47b4 | 2011-02-15 04:11:49 +0000 | [diff] [blame] | 178 | echo "WARNING: expected test repo directory does not exist: $repoDirLocation"; |
david_williams | a2b87ed | 2011-02-15 04:01:30 +0000 | [diff] [blame] | 179 | fi |
david_williams | eaa47b4 | 2011-02-15 04:11:49 +0000 | [diff] [blame] | 180 | fi |
david_williams | a2b87ed | 2011-02-15 04:01:30 +0000 | [diff] [blame] | 181 | |
david_williams | 34f3f91 | 2008-07-08 01:36:22 +0000 | [diff] [blame] | 182 | if [ "patches" == $distribution ] |
| 183 | then |
| 184 | TODIR=${DOWNLOAD_ROOT}/webtools/patches/drops/${buildBranch}/ |
| 185 | else |
| 186 | TODIR=${DOWNLOAD_ROOT}/webtools/downloads/drops/${buildBranch}/ |
| 187 | fi |
david_williams | f696389 | 2008-01-20 05:38:13 +0000 | [diff] [blame] | 188 | |
| 189 | printf "\t%s\n" "declaring build ${dropDirName} on buildstream ${buildBranch}" |
| 190 | printf "\t\t%s\n" "into ${TODIR}" |
| 191 | printf "\t\t%s\n\n" "using the build from ${FROMDIR}" |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 192 | |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 193 | if [ $doCopy ] |
david_williams | 2684007 | 2008-01-22 03:32:43 +0000 | [diff] [blame] | 194 | then |
david_williams | 3344549 | 2008-02-23 02:30:34 +0000 | [diff] [blame] | 195 | rsync-retry ${FROMDIR} ${TODIR} $verboseFlag |
| 196 | exitCode=$? |
| 197 | if [ $exitCode -ne 0 ] |
| 198 | then |
| 199 | exit $exitCode |
| 200 | fi |
david_williams | 2684007 | 2008-01-22 03:32:43 +0000 | [diff] [blame] | 201 | |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 202 | fromString="webtools/committers" |
david_williams | 9db6fa4 | 2008-08-25 17:03:10 +0000 | [diff] [blame] | 203 | if [ "patches" == $distribution ] |
| 204 | then |
| 205 | toString="webtools/patches" |
| 206 | else |
| 207 | toString="webtools/downloads" |
david_williams | 55ecb6d | 2008-08-26 03:52:18 +0000 | [diff] [blame] | 208 | fi |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 209 | replaceCommand="s!${fromString}!${toString}!g" |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 210 | |
david_williams | 0be0d97 | 2008-02-16 05:38:57 +0000 | [diff] [blame] | 211 | # remember TODIR already has a slash |
| 212 | ${REMOTE_SSH_COMMAND} perl -w -pi -e ${replaceCommand} ${TODIR}${dropDirName}/*.php |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 213 | |
david_williams | 2006750 | 2011-01-22 07:00:56 +0000 | [diff] [blame] | 214 | # now do the composite reference site update |
| 215 | |
| 216 | case $buildType in |
| 217 | I ) |
david_williams | daf6fdf | 2011-01-22 07:41:28 +0000 | [diff] [blame] | 218 | referenceCompositeDir=${BUILD_HOME}/integration;; |
david_williams | 2006750 | 2011-01-22 07:00:56 +0000 | [diff] [blame] | 219 | M ) |
david_williams | daf6fdf | 2011-01-22 07:41:28 +0000 | [diff] [blame] | 220 | referenceCompositeDir=${BUILD_HOME}/maintenance;; |
david_williams | 2006750 | 2011-01-22 07:00:56 +0000 | [diff] [blame] | 221 | * ) |
| 222 | print "error: 'buildType' ($buildType) was not an expected value." |
david_williams | 744330a | 2011-01-22 07:04:08 +0000 | [diff] [blame] | 223 | print " composite reference not updated." ;; |
david_williams | 2006750 | 2011-01-22 07:00:56 +0000 | [diff] [blame] | 224 | esac |
david_williams | daf6fdf | 2011-01-22 07:41:28 +0000 | [diff] [blame] | 225 | if [ ! -z referenceCompositeDir ] |
david_williams | 2006750 | 2011-01-22 07:00:56 +0000 | [diff] [blame] | 226 | then |
| 227 | dropDirectory=${TODIR}${dropDirName} |
david_williams | d69c3c4 | 2011-01-22 07:51:48 +0000 | [diff] [blame] | 228 | ./runAntRunner.sh "${PWD}/updateReferenceComposite.xml" "-DreferenceCompositeDir=$referenceCompositeDir" "-DdropDirectory=$dropDirectory" |
david_williams | 2006750 | 2011-01-22 07:00:56 +0000 | [diff] [blame] | 229 | fi |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 230 | else |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 231 | 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] | 232 | fi |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 233 | |
david_williams | 4e4949d | 2008-12-13 18:17:17 +0000 | [diff] [blame] | 234 | if [ $sendmail ] |
| 235 | then |
| 236 | ./sendPromoteMail.sh "$projectname" "$TODIR" "$dropDirName" |
| 237 | echo "mail sent" |
| 238 | else |
| 239 | echo "no mail sent. Specify -s if desired" |
| 240 | fi |
| 241 | |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 242 | |
| 243 | if [ $deleteOld ] |
| 244 | then |
| 245 | |
| 246 | maxToDelete=$(($nDir - 1)) |
| 247 | if [ $verboseFlag ] |
| 248 | then |
| 249 | echo "maxToDelete: $maxToDelete" |
| 250 | fi |
| 251 | for (( i=0; i < $maxToDelete; i++)) |
| 252 | do |
| 253 | dirbasename=${dirList[$i]} |
| 254 | dropDirName=${promoteProjectDir}/${dirbasename} |
| 255 | if [ $verboseFlag ] |
| 256 | then |
| 257 | echo -n "${i}: " |
| 258 | echo ${dropDirName} |
| 259 | fi |
| 260 | rm -fr ${dropDirName} |
| 261 | done |
| 262 | |
| 263 | fi |