|
| 1 | +#!/bin/sh |
| 2 | + |
| 3 | +default() |
| 4 | +{ |
| 5 | + PATH=/usr/bin:/usr/sbin:${PATH} |
| 6 | + export PATH |
| 7 | + |
| 8 | + SCRIPT=`basename $0` |
| 9 | + SCRIPT_DIR=`dirname $0` |
| 10 | + SCRIPT_DIR=`cd $SCRIPT_DIR; pwd` |
| 11 | + TMP_DIR="/tmp/$SCRIPT.$$" |
| 12 | + |
| 13 | + GITLAB_USER=`whoami` |
| 14 | + MAIN_BRANCH="main" |
| 15 | + HCCM_STAGE_BRANCH="main" |
| 16 | + HCCM_PROD_BRANCH="prod-hccm" |
| 17 | + ROS_STAGE_BRANCH="stage-ros" |
| 18 | + ROS_PROD_BRANCH="prod-ros" |
| 19 | + TARGET_BRANCH="master" |
| 20 | + TARGET_PROJECT="service/app-interface" |
| 21 | + |
| 22 | + APP_INTERFACE_DIR="$TMP_DIR/app-interface" |
| 23 | + APP_INTERFACE_REPO= "[email protected]:service/app-interface.git" |
| 24 | + APP_INTERFACE_FORK= "[email protected]:$GITLAB_USER/app-interface.git" |
| 25 | + KOKU_UI_DIR="$TMP_DIR/koku-ui" |
| 26 | + KOKU_UI_REPO= "[email protected]:project-koku/koku-ui.git" |
| 27 | + |
| 28 | + KOKU_UI_HCCM=koku-ui-hccm |
| 29 | + KOKU_UI_ROS=koku-ui-ros |
| 30 | + |
| 31 | + PROD_FRONTENDS=/services/insights/frontend-operator/namespaces/prod-frontends.yml |
| 32 | + STAGE_FRONTENDS=/services/insights/frontend-operator/namespaces/stage-frontends.yml |
| 33 | + STAGE_MULTICLUSTER_FRONTENDS=/services/insights/frontend-operator/namespaces/stage-multicluster-frontends.yml |
| 34 | + |
| 35 | + DESC_FILE="$TMP_DIR/desc" |
| 36 | + DEPLOY_CLOWDER_FILE="$APP_INTERFACE_DIR/data/services/insights/hccm/deploy-clowder.yml" |
| 37 | +} |
| 38 | + |
| 39 | +usage() |
| 40 | +{ |
| 41 | +cat <<- EEOOFF |
| 42 | +
|
| 43 | + This script will update app-interface with the latest SHA refs from the koku-ui branches below |
| 44 | + and either create an MR (default) or push to the origin. |
| 45 | +
|
| 46 | + $HCCM_STAGE_BRANCH |
| 47 | + $HCCM_PROD_BRANCH |
| 48 | +
|
| 49 | + $ROS_PROD_BRANCH |
| 50 | + $ROS_STAGE_BRANCH |
| 51 | +
|
| 52 | + sh [-x] $SCRIPT [-h|u] -<a|p|r> |
| 53 | +
|
| 54 | + OPTIONS: |
| 55 | + h Display this message |
| 56 | + a Update SHA refs from $HCCM_PROD_BRANCH and $ROS_STAGE_BRANCH to $TARGET_BRANCH |
| 57 | + p Update SHA refs from $HCCM_PROD_BRANCH to $TARGET_BRANCH |
| 58 | + r Update SHA refs from $ROS_PROD_BRANCH to $TARGET_BRANCH |
| 59 | + u Push to upstream |
| 60 | +
|
| 61 | + Note: This script lacks permission to push directly upstream, so commits will be pushed to this fork: |
| 62 | + $APP_INTERFACE_FORK |
| 63 | +
|
| 64 | +EEOOFF |
| 65 | +} |
| 66 | + |
| 67 | +cloneAppInterface() |
| 68 | +{ |
| 69 | + mkdir -p $TMP_DIR |
| 70 | + cd $TMP_DIR |
| 71 | + |
| 72 | + if [ ! -d "$APP_INTERFACE_DIR" ]; then |
| 73 | + git clone $APP_INTERFACE_REPO |
| 74 | + fi |
| 75 | +} |
| 76 | + |
| 77 | +cloneKokuUI() |
| 78 | +{ |
| 79 | + mkdir -p $TMP_DIR |
| 80 | + cd $TMP_DIR |
| 81 | + |
| 82 | + if [ ! -d "$KOKU_UI_DIR" ]; then |
| 83 | + git clone $KOKU_UI_REPO |
| 84 | + fi |
| 85 | +} |
| 86 | + |
| 87 | +createPullRequestDesc() |
| 88 | +{ |
| 89 | +cat <<- EEOOFF > $DESC_FILE |
| 90 | +Update Cost Management UI deployments |
| 91 | +
|
| 92 | +#### What: |
| 93 | +Update Cost Management UI deployments to latest commit |
| 94 | +
|
| 95 | +#### Why: |
| 96 | +To promote new features, latest bug fixes, and dependency updates |
| 97 | +
|
| 98 | +#### Tickets: |
| 99 | +N/A |
| 100 | +
|
| 101 | +#### Validation: |
| 102 | +QE has verified all queued issues |
| 103 | +EEOOFF |
| 104 | +} |
| 105 | + |
| 106 | +# Use gh in a non-interactive way -- see https://github.com/cli/cli/issues/1718 |
| 107 | +mergeRequest() |
| 108 | +{ |
| 109 | + DESC=`sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/<br>/g' $DESC_FILE` |
| 110 | + SOURCE_BRANCH="cost-management_release.$$" |
| 111 | + TITLE="Update Cost Management UI deployments" |
| 112 | + |
| 113 | + cd $APP_INTERFACE_DIR |
| 114 | + git remote rename origin upstream |
| 115 | + git remote add origin $APP_INTERFACE_FORK |
| 116 | + |
| 117 | + git branch -m $SOURCE_BRANCH |
| 118 | + git commit -m "$TITLE" $DEPLOY_CLOWDER_FILE |
| 119 | + |
| 120 | + echo "\n*** Pushing $SOURCE_BRANCH..." |
| 121 | + git push \ |
| 122 | + -o merge_request.create \ |
| 123 | + -o merge_request.title="$TITLE" \ |
| 124 | + -o merge_request.description="$DESC" \ |
| 125 | + -o merge_request.target_project=$TARGET_PROJECT \ |
| 126 | + -o merge_request.target=$TARGET_BRANCH origin $SOURCE_BRANCH |
| 127 | +} |
| 128 | + |
| 129 | +push() |
| 130 | +{ |
| 131 | + echo "" |
| 132 | + read -p "*** You are pushing to the $TARGET_BRANCH branch. Continue?" YN |
| 133 | + |
| 134 | + case $YN in |
| 135 | + [Yy]* ) echo "\n*** Pushing $TARGET_BRANCH..."; git push -u origin $TARGET_BRANCH;; |
| 136 | + [Nn]* ) exit 0;; |
| 137 | + * ) echo "Please answer yes or no."; push;; |
| 138 | + esac |
| 139 | +} |
| 140 | + |
| 141 | +# Get SHA for given namespace ref |
| 142 | +# |
| 143 | +# Note that the deply-clowder.yml file may contain multiple namespace refs. However, koku-ui-hccm should be defined |
| 144 | +# before koku-ui-ros |
| 145 | +# |
| 146 | +# $1: Which SHA to return; koku-ui-hccm or koku-ui-ros |
| 147 | +# $2: The namespace ref |
| 148 | +# |
| 149 | +getAppInterfaceSHA() |
| 150 | +{ |
| 151 | + RESULT= |
| 152 | + SHA= |
| 153 | + NAMESPACE_REFS=`grep -n "\$ref: $2" $DEPLOY_CLOWDER_FILE | sed 's| ||g'` |
| 154 | + |
| 155 | + for NAMESPACE_REF in `echo "$NAMESPACE_REFS"` |
| 156 | + do |
| 157 | + NAMESPACE_LINE=`echo $NAMESPACE_REF | awk -F: '{print $1}'` |
| 158 | + COMMIT_LINE=`echo "$NAMESPACE_LINE + 1" | bc` |
| 159 | + COMMIT_REF=`head -n $COMMIT_LINE $DEPLOY_CLOWDER_FILE | tail -n 1 | sed 's| ||g'` |
| 160 | + SHA="$SHA `echo $COMMIT_REF | awk -F: '{print $2}'`" |
| 161 | + done |
| 162 | + |
| 163 | + if [ $1 = $KOKU_UI_HCCM ]; then |
| 164 | + RESULT=`echo "$SHA" | awk -F' ' '{print $1}' | sed 's| ||g'` |
| 165 | + elif [ $1 = $KOKU_UI_ROS ]; then |
| 166 | + RESULT=`echo "$SHA" | awk -F' ' '{print $2}' | sed 's| ||g'` |
| 167 | + fi |
| 168 | +} |
| 169 | + |
| 170 | +initAppInterfaceSHA() |
| 171 | +{ |
| 172 | + getAppInterfaceSHA $KOKU_UI_HCCM $STAGE_FRONTENDS |
| 173 | + HCCM_STAGE_FRONTENDS_SHA="$RESULT" |
| 174 | + |
| 175 | + getAppInterfaceSHA $KOKU_UI_HCCM $STAGE_MULTICLUSTER_FRONTENDS |
| 176 | + HCCM_STAGE_MULTICLUSTER_FRONTENDS_SHA="$RESULT" |
| 177 | + |
| 178 | + getAppInterfaceSHA $KOKU_UI_HCCM $PROD_FRONTENDS |
| 179 | + HCCM_PROD_FRONTENDS_SHA="$RESULT" |
| 180 | + |
| 181 | + getAppInterfaceSHA $KOKU_UI_ROS $STAGE_FRONTENDS |
| 182 | + ROS_STAGE_FRONTENDS_SHA="$RESULT" |
| 183 | + |
| 184 | + getAppInterfaceSHA $KOKU_UI_ROS $STAGE_MULTICLUSTER_FRONTENDS |
| 185 | + ROS_STAGE_MULTICLUSTER_FRONTENDS_SHA="$RESULT" |
| 186 | + |
| 187 | + getAppInterfaceSHA $KOKU_UI_ROS $PROD_FRONTENDS |
| 188 | + ROS_PROD_FRONTENDS_SHA="$RESULT" |
| 189 | + |
| 190 | + echo "Existing SHA refs..." |
| 191 | + echo "koku-ui-hccm stage: $HCCM_STAGE_FRONTENDS_SHA" |
| 192 | + echo "koku-ui-hccm stage multicluster: $HCCM_STAGE_MULTICLUSTER_FRONTENDS_SHA" |
| 193 | + echo "koku-ui-hccm prod: $HCCM_PROD_FRONTENDS_SHA" |
| 194 | + echo "koku-ui-ros stage: $ROS_STAGE_FRONTENDS_SHA" |
| 195 | + echo "koku-ui-ros stage multicluster: $ROS_STAGE_MULTICLUSTER_FRONTENDS_SHA" |
| 196 | + echo "koku-ui-ros prod: $ROS_PROD_FRONTENDS_SHA" |
| 197 | +} |
| 198 | + |
| 199 | +initKokuUISHA() |
| 200 | +{ |
| 201 | + cd $KOKU_UI_DIR |
| 202 | + |
| 203 | + HCCM_STAGE_SHA=`git rev-parse origin/$HCCM_STAGE_BRANCH` |
| 204 | + HCCM_PROD_SHA=`git rev-parse origin/$HCCM_PROD_BRANCH` |
| 205 | + ROS_STAGE_SHA=`git rev-parse origin/$ROS_STAGE_BRANCH` |
| 206 | + ROS_PROD_SHA=`git rev-parse origin/$ROS_PROD_BRANCH` |
| 207 | + |
| 208 | + echo "Latest SHA refs..." |
| 209 | + echo "koku-ui-hccm stage: $HCCM_STAGE_SHA" |
| 210 | + echo "koku-ui-hccm prod: $HCCM_PROD_SHA" |
| 211 | + echo "koku-ui-ros stage: $ROS_STAGE_SHA" |
| 212 | + echo "koku-ui-ros prod: $ROS_PROD_SHA" |
| 213 | +} |
| 214 | + |
| 215 | +updateDeploySHA() |
| 216 | +{ |
| 217 | + if [ "$UPDATE_SHA_HCCM" = true ]; then |
| 218 | + sed "s|$HCCM_PROD_FRONTENDS_SHA|$HCCM_PROD_SHA|" $DEPLOY_CLOWDER_FILE > ${DEPLOY_CLOWDER_FILE}.tmp |
| 219 | + mv ${DEPLOY_CLOWDER_FILE}.tmp $DEPLOY_CLOWDER_FILE |
| 220 | + |
| 221 | + if [ "$HCCM_STAGE_FRONTENDS_SHA" != "$MAIN_BRANCH" ]; then |
| 222 | + sed "s|$HCCM_STAGE_FRONTENDS_SHA|$HCCM_STAGE_SHA|" $DEPLOY_CLOWDER_FILE > ${DEPLOY_CLOWDER_FILE}.tmp |
| 223 | + mv ${DEPLOY_CLOWDER_FILE}.tmp $DEPLOY_CLOWDER_FILE |
| 224 | + fi |
| 225 | + if [ "$HCCM_STAGE_MULTICLUSTER_FRONTENDS_SHA" != "$MAIN_BRANCH" ]; then |
| 226 | + sed "s|$HCCM_STAGE_MULTICLUSTER_FRONTENDS_SHA|$HCCM_STAGE_SHA|" $DEPLOY_CLOWDER_FILE > ${DEPLOY_CLOWDER_FILE}.tmp |
| 227 | + mv ${DEPLOY_CLOWDER_FILE}.tmp $DEPLOY_CLOWDER_FILE |
| 228 | + fi |
| 229 | + fi |
| 230 | + |
| 231 | + if [ "$UPDATE_SHA_ROS" = true ]; then |
| 232 | + sed "s|$ROS_PROD_FRONTENDS_SHA|$ROS_PROD_SHA|" $DEPLOY_CLOWDER_FILE | |
| 233 | + sed "s|$ROS_STAGE_FRONTENDS_SHA|$ROS_STAGE_SHA|" | |
| 234 | + sed "s|$ROS_STAGE_MULTICLUSTER_FRONTENDS_SHA|$ROS_STAGE_SHA|" > ${DEPLOY_CLOWDER_FILE}.tmp |
| 235 | + mv ${DEPLOY_CLOWDER_FILE}.tmp $DEPLOY_CLOWDER_FILE |
| 236 | + fi |
| 237 | +} |
| 238 | + |
| 239 | +# main() |
| 240 | +{ |
| 241 | + default |
| 242 | + |
| 243 | + while getopts hapru c; do |
| 244 | + case $c in |
| 245 | + a) UPDATE_SHA_HCCM=true |
| 246 | + UPDATE_SHA_ROS=true;; |
| 247 | + p) UPDATE_SHA_HCCM=true;; |
| 248 | + r) UPDATE_SHA_ROS=true;; |
| 249 | + u) PUSH=true;; |
| 250 | + h) usage; exit 0;; |
| 251 | + \?) usage; exit 1;; |
| 252 | + esac |
| 253 | + done |
| 254 | + |
| 255 | + if [ -z "$UPDATE_SHA_HCCM" -a -z "$UPDATE_SHA_ROS" ]; then |
| 256 | + usage |
| 257 | + exit 1 |
| 258 | + fi |
| 259 | + |
| 260 | + echo "\n*** Releasing $TARGET_BRANCH...\n" |
| 261 | + |
| 262 | + cloneAppInterface |
| 263 | + cloneKokuUI |
| 264 | + |
| 265 | + initAppInterfaceSHA |
| 266 | + initKokuUISHA |
| 267 | + |
| 268 | + updateDeploySHA |
| 269 | + |
| 270 | + if [ "$?" -eq 0 ]; then |
| 271 | + if [ -n "$PUSH" ]; then |
| 272 | + push |
| 273 | + else |
| 274 | + createPullRequestDesc |
| 275 | + mergeRequest |
| 276 | + fi |
| 277 | + else |
| 278 | + echo "\n*** Cannot not push. No changes or check for conflicts" |
| 279 | + fi |
| 280 | + |
| 281 | + rm -rf $TMP_DIR |
| 282 | +} |
0 commit comments