blob: 2fdb28742fbb9c7111ce5daf859d8a7b795d4a4d [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_williamsa4356922008-02-02 05:02:15 +00007 printf "\n\tUsage: %s [-v] [-d] [-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=
17while getopts 'vdcp:' OPTION
18do
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_williams03bdf892008-02-02 03:00:11 +000028 ?) usage
david_williams8bfa02a2008-01-22 05:34:52 +000029 exit 2
30 ;;
31 esac
32done
33
34shift $(($OPTIND - 1))
35
36
37
david_williams03bdf892008-02-02 03:00:11 +000038# check we have at least the project name
david_williams8bfa02a2008-01-22 05:34:52 +000039if [ -z $projectname ]
40then
41 printf "\n\t%s\n" "Error: project name is required." >&2
david_williams03bdf892008-02-02 03:00:11 +000042 usage
david_williams8bfa02a2008-01-22 05:34:52 +000043 exit 1
44fi
david_williamsbd17e9e2008-01-20 05:05:16 +000045
46if [[ "$projectname" =~ "(.*)-(.*)-(.*)" ]]
47then
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_williams8bfa02a2008-01-22 05:34:52 +000052 if [ $verboseFlag ]
53 then
54 echo "distribution: $distribution"
55 echo "buildBranch: $buildBranch"
56 echo "buildType: $buildType"
57 fi
david_williamsbd17e9e2008-01-20 05:05:16 +000058else
david_williams03bdf892008-02-02 03:00:11 +000059 printf "\n\t%s\n" "Error: projectname doesn't match <distribution>-<buildbranch>-<buildtype> pattern." >&2
60 usage
david_williamsbd17e9e2008-01-20 05:05:16 +000061 exit 3
62fi
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)
67if [ -z $BUILD_INITIALIZED ]
68then
david_williams8bfa02a2008-01-22 05:34:52 +000069 source commonVariations.shsource
70 MINIMIZE_SCRIPT_OUTPUT="true"
71 source ${BUILD_HOME}/releng.control/commonComputedVariables.shsource
david_williamsbd17e9e2008-01-20 05:05:16 +000072fi
73
74artifactsDir=${PROJECT_ARTIFACTS}
75promoteProjectDir=${artifactsDir}'/'${projectname}
david_williams8bfa02a2008-01-22 05:34:52 +000076if [ $verboseFlag ]
77then
78 echo "Project directory to promote: ${promoteProjectDir} "
79fi
80
david_williamsbd17e9e2008-01-20 05:05:16 +000081if [ ! \( -d ${promoteProjectDir} \) ]
82then
83 printf "\n\t%s\n" "Error: directory ${promoteProjectDir} does not exist." >&2
david_williams03bdf892008-02-02 03:00:11 +000084 usage
david_williamsbd17e9e2008-01-20 05:05:16 +000085 exit 4
86fi
87
88i=0
89for FN in ${promoteProjectDir}/*
90do
91 dirName=$(basename ${FN})
david_williams8bfa02a2008-01-22 05:34:52 +000092 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_williamsbd17e9e2008-01-20 05:05:16 +000098 dirList[${i}]=${dirName}
99 i=$(($i + 1))
100done
101
102nDir=${#dirList[*]}
103
david_williams8bfa02a2008-01-22 05:34:52 +0000104if [ $verboseFlag ]
105then
106 echo "Number of directories: ${nDir}"
107fi
david_williamsbd17e9e2008-01-20 05:05:16 +0000108
109# echo "Least recent: ${dirList[0]}"
110# echo "Most recent: ${dirList[$(($nDir - 1))]}"
111
112mostRecent=${dirList[$(($nDir - 1))]}
113
114mostRecentDir=${promoteProjectDir}/${mostRecent}
115
116
117i=0
118for FN in ${mostRecentDir}/*
119do
120 dropDirName=$(basename ${FN})
david_williams8bfa02a2008-01-22 05:34:52 +0000121 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_williamsbd17e9e2008-01-20 05:05:16 +0000127 dropDirList[${i}]=${dropDirName}
128 i=$(($i + 1))
129done
130
david_williams4cbceb72008-01-22 03:41:40 +0000131ndropDir=${#dropDirList[*]}
david_williamsbd17e9e2008-01-20 05:05:16 +0000132
133# there should be exactly one drop directory
david_williams4cbceb72008-01-22 03:41:40 +0000134if [ $ndropDir != 1 ]
david_williamsbd17e9e2008-01-20 05:05:16 +0000135then
david_williams8bfa02a2008-01-22 05:34:52 +0000136 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 +0000137 usage
david_williamsbd17e9e2008-01-20 05:05:16 +0000138 exit 5
david_williamsbd17e9e2008-01-20 05:05:16 +0000139fi
140
141# knowing there is exactly one, the value of dropDirName is still valid
142
david_williams8bfa02a2008-01-22 05:34:52 +0000143echo "Drop directory: ${dropDirName}"
david_williamsbd17e9e2008-01-20 05:05:16 +0000144
145FROMDIR=${mostRecentDir}/${dropDirName}
146
147TODIR=${DOWNLOAD_ROOT}/webtools/downloads/drops/${buildBranch}/
david_williamsf6963892008-01-20 05:38:13 +0000148
149printf "\t%s\n" "declaring build ${dropDirName} on buildstream ${buildBranch}"
150printf "\t\t%s\n" "into ${TODIR}"
151printf "\t\t%s\n\n" "using the build from ${FROMDIR}"
david_williamsbd17e9e2008-01-20 05:05:16 +0000152
david_williams8bfa02a2008-01-22 05:34:52 +0000153if [ $doCopy ]
david_williams26840072008-01-22 03:32:43 +0000154then
david_williams33445492008-02-23 02:30:34 +0000155 rsync-retry ${FROMDIR} ${TODIR} $verboseFlag
156 exitCode=$?
157 if [ $exitCode -ne 0 ]
158 then
159 exit $exitCode
160 fi
david_williams26840072008-01-22 03:32:43 +0000161
david_williams8bfa02a2008-01-22 05:34:52 +0000162 fromString="webtools/committers"
163 toString="webtools/downloads"
164 replaceCommand="s!${fromString}!${toString}!g"
david_williamsbd17e9e2008-01-20 05:05:16 +0000165
david_williams0be0d972008-02-16 05:38:57 +0000166 # remember TODIR already has a slash
167 ${REMOTE_SSH_COMMAND} perl -w -pi -e ${replaceCommand} ${TODIR}${dropDirName}/*.php
david_williamsbd17e9e2008-01-20 05:05:16 +0000168
david_williams8bfa02a2008-01-22 05:34:52 +0000169 # 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_williamsbd17e9e2008-01-20 05:05:16 +0000172
david_williams8bfa02a2008-01-22 05:34:52 +0000173else
david_williams03bdf892008-02-02 03:00:11 +0000174 printf "\n\t%s\n\n" "Nothing copied: specify -c to actually do the copy"
david_williams26840072008-01-22 03:32:43 +0000175fi
david_williamsbd17e9e2008-01-20 05:05:16 +0000176
david_williams03bdf892008-02-02 03:00:11 +0000177
178if [ $deleteOld ]
179then
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
198fi