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 | a435692 | 2008-02-02 05:02:15 +0000 | [diff] [blame] | 7 | printf "\n\tUsage: %s [-v] [-d] [-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= |
| 17 | while getopts 'vdcp:' OPTION |
| 18 | do |
| 19 | case $OPTION in |
| 20 | v) verboseFlag=1 |
| 21 | ;; |
| 22 | d) deleteOld=1 |
| 23 | ;; |
| 24 | c) doCopy=1 |
| 25 | ;; |
| 26 | p) projectname=$OPTARG |
| 27 | ;; |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 28 | ?) usage |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 29 | exit 2 |
| 30 | ;; |
| 31 | esac |
| 32 | done |
| 33 | |
| 34 | shift $(($OPTIND - 1)) |
| 35 | |
| 36 | |
| 37 | |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 38 | # check we have at least the project name |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 39 | if [ -z $projectname ] |
| 40 | then |
| 41 | printf "\n\t%s\n" "Error: project name is required." >&2 |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 42 | usage |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 43 | exit 1 |
| 44 | fi |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 45 | |
| 46 | if [[ "$projectname" =~ "(.*)-(.*)-(.*)" ]] |
| 47 | then |
| 48 | distribution=${BASH_REMATCH[1]} |
| 49 | buildBranch=${BASH_REMATCH[2]} |
| 50 | buildType=${BASH_REMATCH[3]} |
| 51 | printf "\n\t%s\n\n" "Promoting latest build from ${1} ..." |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 52 | if [ $verboseFlag ] |
| 53 | then |
| 54 | echo "distribution: $distribution" |
| 55 | echo "buildBranch: $buildBranch" |
| 56 | echo "buildType: $buildType" |
| 57 | fi |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 58 | else |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 59 | printf "\n\t%s\n" "Error: projectname doesn't match <distribution>-<buildbranch>-<buildtype> pattern." >&2 |
| 60 | usage |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 61 | exit 3 |
| 62 | fi |
| 63 | |
| 64 | # remember to leave no slashes on filename in source command, |
| 65 | # (the commonVariations.shsource file, that is) |
| 66 | # so that users path is used to find it (first) |
| 67 | if [ -z $BUILD_INITIALIZED ] |
| 68 | then |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 69 | source commonVariations.shsource |
| 70 | MINIMIZE_SCRIPT_OUTPUT="true" |
| 71 | source ${BUILD_HOME}/releng.control/commonComputedVariables.shsource |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 72 | fi |
| 73 | |
| 74 | artifactsDir=${PROJECT_ARTIFACTS} |
| 75 | promoteProjectDir=${artifactsDir}'/'${projectname} |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 76 | if [ $verboseFlag ] |
| 77 | then |
| 78 | echo "Project directory to promote: ${promoteProjectDir} " |
| 79 | fi |
| 80 | |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 81 | if [ ! \( -d ${promoteProjectDir} \) ] |
| 82 | then |
| 83 | printf "\n\t%s\n" "Error: directory ${promoteProjectDir} does not exist." >&2 |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 84 | usage |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 85 | exit 4 |
| 86 | fi |
| 87 | |
| 88 | i=0 |
| 89 | for FN in ${promoteProjectDir}/* |
| 90 | do |
| 91 | dirName=$(basename ${FN}) |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 92 | if [ $verboseFlag ] |
| 93 | then |
| 94 | echo -n "${i}: " |
| 95 | echo ${dirName} |
| 96 | fi |
| 97 | # todo: could check that the name follows the expected date pattern |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 98 | dirList[${i}]=${dirName} |
| 99 | i=$(($i + 1)) |
| 100 | done |
| 101 | |
| 102 | nDir=${#dirList[*]} |
| 103 | |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 104 | if [ $verboseFlag ] |
| 105 | then |
| 106 | echo "Number of directories: ${nDir}" |
| 107 | fi |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 108 | |
| 109 | # echo "Least recent: ${dirList[0]}" |
| 110 | # echo "Most recent: ${dirList[$(($nDir - 1))]}" |
| 111 | |
| 112 | mostRecent=${dirList[$(($nDir - 1))]} |
| 113 | |
| 114 | mostRecentDir=${promoteProjectDir}/${mostRecent} |
| 115 | |
| 116 | |
| 117 | i=0 |
| 118 | for FN in ${mostRecentDir}/* |
| 119 | do |
| 120 | dropDirName=$(basename ${FN}) |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 121 | if [ $verboseFlag ] |
| 122 | then |
| 123 | echo -n "${i}: " |
| 124 | echo ${dropDirName} |
| 125 | fi |
| 126 | # todo: could check that the name follows the expected drop directory pattern |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 127 | dropDirList[${i}]=${dropDirName} |
| 128 | i=$(($i + 1)) |
| 129 | done |
| 130 | |
david_williams | 4cbceb7 | 2008-01-22 03:41:40 +0000 | [diff] [blame] | 131 | ndropDir=${#dropDirList[*]} |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 132 | |
| 133 | # there should be exactly one drop directory |
david_williams | 4cbceb7 | 2008-01-22 03:41:40 +0000 | [diff] [blame] | 134 | if [ $ndropDir != 1 ] |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 135 | then |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 136 | 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] | 137 | usage |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 138 | exit 5 |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 139 | fi |
| 140 | |
| 141 | # knowing there is exactly one, the value of dropDirName is still valid |
| 142 | |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 143 | echo "Drop directory: ${dropDirName}" |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 144 | |
| 145 | FROMDIR=${mostRecentDir}/${dropDirName} |
| 146 | |
| 147 | TODIR=${DOWNLOAD_ROOT}/webtools/downloads/drops/${buildBranch}/ |
david_williams | f696389 | 2008-01-20 05:38:13 +0000 | [diff] [blame] | 148 | |
| 149 | printf "\t%s\n" "declaring build ${dropDirName} on buildstream ${buildBranch}" |
| 150 | printf "\t\t%s\n" "into ${TODIR}" |
| 151 | printf "\t\t%s\n\n" "using the build from ${FROMDIR}" |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 152 | |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 153 | if [ $doCopy ] |
david_williams | 2684007 | 2008-01-22 03:32:43 +0000 | [diff] [blame] | 154 | then |
david_williams | 3344549 | 2008-02-23 02:30:34 +0000 | [diff] [blame] | 155 | rsync-retry ${FROMDIR} ${TODIR} $verboseFlag |
| 156 | exitCode=$? |
| 157 | if [ $exitCode -ne 0 ] |
| 158 | then |
| 159 | exit $exitCode |
| 160 | fi |
david_williams | 2684007 | 2008-01-22 03:32:43 +0000 | [diff] [blame] | 161 | |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 162 | fromString="webtools/committers" |
| 163 | toString="webtools/downloads" |
| 164 | replaceCommand="s!${fromString}!${toString}!g" |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 165 | |
david_williams | 0be0d97 | 2008-02-16 05:38:57 +0000 | [diff] [blame] | 166 | # remember TODIR already has a slash |
| 167 | ${REMOTE_SSH_COMMAND} perl -w -pi -e ${replaceCommand} ${TODIR}${dropDirName}/*.php |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 168 | |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 169 | # update the update site |
| 170 | #cp -ruv $HOME/downloads/webtools/committers/drops/$1/updateSite/features/ $HOME/downloads/webtools/milestones/ |
| 171 | #cp -ruv $HOME/downloads/webtools/committers/drops/$1/updateSite/plugins/ $HOME/downloads/webtools/milestones/ |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 172 | |
david_williams | 8bfa02a | 2008-01-22 05:34:52 +0000 | [diff] [blame] | 173 | else |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 174 | 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] | 175 | fi |
david_williams | bd17e9e | 2008-01-20 05:05:16 +0000 | [diff] [blame] | 176 | |
david_williams | 03bdf89 | 2008-02-02 03:00:11 +0000 | [diff] [blame] | 177 | |
| 178 | if [ $deleteOld ] |
| 179 | then |
| 180 | |
| 181 | maxToDelete=$(($nDir - 1)) |
| 182 | if [ $verboseFlag ] |
| 183 | then |
| 184 | echo "maxToDelete: $maxToDelete" |
| 185 | fi |
| 186 | for (( i=0; i < $maxToDelete; i++)) |
| 187 | do |
| 188 | dirbasename=${dirList[$i]} |
| 189 | dropDirName=${promoteProjectDir}/${dirbasename} |
| 190 | if [ $verboseFlag ] |
| 191 | then |
| 192 | echo -n "${i}: " |
| 193 | echo ${dropDirName} |
| 194 | fi |
| 195 | rm -fr ${dropDirName} |
| 196 | done |
| 197 | |
| 198 | fi |