From 099bbdf1acd6e541e29bc62c5e89e64b00b64fe7 Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Mon, 8 Feb 2016 09:40:27 +0000 Subject: [PATCH] refactor b9 to be more like d9 so we can share code --- b9/b9 | 24 +++++++++++++++++++++ b9/lib/_check_save_deploy.sh | 26 +++++++--------------- b9/lib/_init.sh | 30 ++++++++++++++++++++++++++ b9/lib/check.sh | 2 -- b9/lib/deploy.sh | 37 +++++++++++--------------------- b9/lib/package.sh | 20 +++++++---------- b9/lib/package_storage_docker.sh | 2 +- 7 files changed, 84 insertions(+), 57 deletions(-) diff --git a/b9/b9 b/b9/b9 index ee5c6143..6ef7bed6 100755 --- a/b9/b9 +++ b/b9/b9 @@ -16,6 +16,7 @@ B9=$B9_DIR/b9 source ./lib/_init.sh +MODE=$(_b9_init_mode) NODEJS="$(_b9_init_nodejs)" NPM="$(_b9_init_npm)" @@ -30,6 +31,10 @@ for MODULE in ./lib/*.sh; do source $MODULE done +source $C9_DIR/plugins/c9.docker/d9/_testing.sh +source $C9_DIR/plugins/c9.docker/d9/_redis.sh +source $C9_DIR/plugins/c9.docker/d9/_settings.sh + usage() { echo "Usage: $B9 [global options ...] COMMAND [commands options...]" echo @@ -38,6 +43,9 @@ usage() { echo "Global options:" echo " --help show this help message" echo " --debug trace bash commands" + echo " --settings=MODE, -s=MODE which settings file to use" + echo " --deploy shortcut for '-settings=deploy'; use prod database" + echo " --devel shortcut for '-settings=devel'; use devel database" echo echo "Commands:" echo @@ -65,6 +73,22 @@ for ARG in "$@"; do B9="$B9 --debug" shift ;; + -s=*|--settings=*) + MODE="${ARG#*=}" + shift + ;; + --deploy) + MODE=deploy + shift + ;; + --devel) + MODE=devel + shift + ;; + --odev|--onlinedev) + MODE=onlinedev + shift + ;; *) break ;; diff --git a/b9/lib/_check_save_deploy.sh b/b9/lib/_check_save_deploy.sh index 2e26140a..940f7aa4 100644 --- a/b9/lib/_check_save_deploy.sh +++ b/b9/lib/_check_save_deploy.sh @@ -1,8 +1,12 @@ +_b9_check_save_deploy_usage() { + echo "Use: check-deploy.sh --service=SERVICE [--server=SERVER] [--wait=WAIT_SECONDS] [--port=PORT]" + exit 1 +} + _b9_check_save_deploy() { local SERVICE local PORT local WAIT=default - local MODE=deploy local SERVER=${SERVER:-localhost} local P @@ -11,15 +15,12 @@ _b9_check_save_deploy() { --wait=*) WAIT=${P#*=} ;; - --mode=*) - MODE=${P#*=} - ;; --server=*) SERVER=${P#*=} ;; --service=*) SERVICE=${P#*=} - PORT=$(_b9_setting $MODE $SERVICE.port) + PORT=$(_do_get_setting $SERVICE.port) ;; --port=*) PORT=${P#*=} @@ -56,9 +57,9 @@ _b9_check_save_deploy() { echo "Recent errors in service log that might help debug this:" >&2 if [ "$SERVICE" ] && [ "$(type -t ssh)" != "function" ]; then echo "Warning: ssh function not defined, trying gssh instead" - gssh $SERVER ${SERVICE//_/-}/scripts/tail-log.sh $(_b9_setting $MODE $SERVICE.logFile) >&2 + gssh $SERVER ${SERVICE//_/-}/scripts/tail-log.sh $(_do_get_setting $SERVICE.logFile) >&2 elif [ "$SERVICE" ]; then - ssh $SERVER ${SERVICE//_/-}/scripts/tail-log.sh $(_b9_setting $MODE $SERVICE.logFile) >&2 + ssh $SERVER ${SERVICE//_/-}/scripts/tail-log.sh $(_do_get_setting $SERVICE.logFile) >&2 fi echo >&2 @@ -66,15 +67,4 @@ _b9_check_save_deploy() { fi echo "Confirmed successful deploy to $SERVER!" -} - -_b9_check_save_deploy_usage() { - echo "Use: check-deploy.sh --service=SERVICE [--server=SERVER] [--wait=WAIT_SECONDS] [--port=PORT]" - exit 1 -} - -_b9_setting() { - local MODE=$1 - local SETTING="['"${2//./"']['"}"']" - $NODEJS -e "console.log(require('$B9_DIR/../settings/$MODE')()$SETTING)" } \ No newline at end of file diff --git a/b9/lib/_init.sh b/b9/lib/_init.sh index 726ad082..2a15604c 100644 --- a/b9/lib/_init.sh +++ b/b9/lib/_init.sh @@ -1,3 +1,33 @@ +_b9_init_mode() { + local SUFFIX + SUFFIX=$(hostname | sed 's/.*-//') + local MODE + + case $SUFFIX in + prod) + MODE=deploy + ;; + dev) + MODE=devel + shift + ;; + test) + MODE=test + ;; + onlinedev) + MODE=$SUFFIX + ;; + *) + MODE=devel + ;; + esac + + if [ ! "$MODE" ]; then + MODE=devel + fi + echo $MODE +} + _b9_init_temp() { local TMPDIR local UNAME=$(id -n -u) diff --git a/b9/lib/check.sh b/b9/lib/check.sh index e8da5afc..7a56f037 100644 --- a/b9/lib/check.sh +++ b/b9/lib/check.sh @@ -1,5 +1,3 @@ -source $C9_DIR/plugins/c9.docker/d9/_testing.sh - b9_check() { echo "Running B9 tests" _do_check_package diff --git a/b9/lib/deploy.sh b/b9/lib/deploy.sh index d558a932..ebf6b83a 100644 --- a/b9/lib/deploy.sh +++ b/b9/lib/deploy.sh @@ -4,7 +4,6 @@ b9_deploy_usage() { echo "Deploy a Cloud9 version" echo echo "Options:" - echo " --settings=[all|beta|deploy|onlinedev] (default: all)" echo " --strategy=[slow_start|parallel|serial] Deploy strategy to use (default: slow_start)" echo " --regex Interpret server patter as regular expression" echo " --no-check skip the health check" @@ -18,7 +17,6 @@ b9_deploy() { local TREEISH=$1 && shift local SERVER_PATTERN=$1 && shift - local SETTINGS=devel local DRY_RUN="" local ASSET="gcs" local USE_REGEX="" @@ -33,10 +31,6 @@ b9_deploy() { local ARG for ARG in "$@"; do case $ARG in - --settings=*) - SETTINGS="${ARG#*=}" - shift - ;; --strategy=*) STRATEGY="${ARG#*=}" shift @@ -72,18 +66,18 @@ b9_deploy() { local SERVER_LIST local VERSION - local TMPFILE=$(tempfile) - b9_package $TREEISH --settings=$SETTINGS --type=$TYPE | tee $TMPFILE + local TMPFILE=$(mktemp --tmpdir=$TMPDIR) + b9_package $TREEISH --type=$TYPE | tee $TMPFILE VERSION=$(cat $TMPFILE | tail -n1) rm $TMPFILE SERVER_LIST="$(_b9_deploy_server_list $SERVER_PATTERN $USE_REGEX)" - local CMD="$B9 exec _b9_deploy_one_from_${ASSET} $NO_CHECK $VERSION $SERVICES $SETTINGS" + local CMD="$B9 --settings=$MODE exec _b9_deploy_one_from_${ASSET} $NO_CHECK $VERSION $SERVICES" if [ "$DRY_RUN" == "1" ]; then CMD="echo $CMD" fi - _b9_deploy_release_event "$SERVICES" $SETTINGS $VERSION $SERVER_PATTERN + _b9_deploy_release_event "$SERVICES" $VERSION $SERVER_PATTERN _b9_deploy_strategy_${STRATEGY} "$SERVER_LIST" "$CMD" } @@ -135,14 +129,13 @@ _b9_deploy_one_from_gcs() { local VERSION=$1 local SERVICES=$2 - local SETTINGS=$3 local SERVER=$4 echo Deploying $VERSION \($SERVICES\) to $SERVER ... >&2 _b9_deploy_upload_from_gcs $VERSION $SERVER - _b9_deploy_update_services $VERSION $SERVICES $SERVER $SETTINGS - [ -z "$NO_CHECK" ] && _b9_deploy_check $SERVER $SERVICES $SETTINGS + _b9_deploy_update_services $VERSION $SERVICES $SERVER + [ -z "$NO_CHECK" ] && _b9_deploy_check $SERVER $SERVICES echo Deployed $VERSION to $SERVER >&2 } @@ -168,9 +161,8 @@ _b9_deploy_update_services() { local VERSION=$1 local SERVICES=$2 local SERVER=$3 - local SETTINGS=$4 - local TOTAL_VERSIONS_TO_KEEP=5 + local TOTAL_VERSIONS_TO_KEEP=7 local VERSIONS_DIR="/home/ubuntu/versions" local TARGET_DIR=${VERSIONS_DIR}/$VERSION @@ -189,15 +181,13 @@ _b9_deploy_update_services() { _b9_deploy_check() { local SERVER=$1 local SERVICES=$2 - local SETTINGS=$3 - echo $SERVICES | sed 's/,/\n/g' | parallel --halt 1 -j 0 $B9 exec _b9_deploy_check_one $SERVER $SETTINGS + echo $SERVICES | sed 's/,/\n/g' | parallel --halt 1 -j 0 $B9 exec _b9_deploy_check_one $SERVER } _b9_deploy_check_one() { local SERVER=$1 - local SETTINGS=$2 - local SERVICE=$3 + local SERVICE=$2 local HOST local PORT @@ -216,7 +206,7 @@ _b9_deploy_check_one() { SERVICE=${SERVICE//-/_} fi - if ! _b9_check_save_deploy --wait=$WAIT $PORT --server=$HOST --mode=$SETTINGS --service=$SERVICE; then + if ! _b9_check_save_deploy --wait=$WAIT $PORT --server=$HOST --service=$SERVICE; then echo "One or more safe deploy checks failed :(" >&2 exit 1 fi @@ -224,12 +214,11 @@ _b9_deploy_check_one() { _b9_deploy_release_event() { local SERVICES=$1 - local SETTINGS=$2 - local VERSION=$3 - local SERVER_PATTERN=$4 + local VERSION=$2 + local SERVER_PATTERN=$3 _b9_init_node_helper - echo $SERVICES | sed 's/,/\n/g' | xargs -I '{}' -n1 $NODEJS $B9_DIR/lib/js/release_event.js '{}' $SETTINGS $VERSION $SERVER_PATTERN + echo $SERVICES | sed 's/,/\n/g' | xargs -I '{}' -n1 $NODEJS $B9_DIR/lib/js/release_event.js '{}' $MODE $VERSION $SERVER_PATTERN } _b9_deploy_ssh() { diff --git a/b9/lib/package.sh b/b9/lib/package.sh index 78d79e0c..c6f45da9 100644 --- a/b9/lib/package.sh +++ b/b9/lib/package.sh @@ -6,7 +6,6 @@ b9_package_usage() { echo "Package and upload a version of Cloud 9" echo echo "Options:" - echo " --settings=[all|beta|deploy|onlinedev] (default: all)" echo " --type=[newclient|docker] (default: newclient)" echo " --no-cache" exit 1 @@ -17,7 +16,7 @@ b9_package() { local TREEISH=$1 local TYPE=newclient - local SETTINGS=all + local SETTINGS=$MODE local STORAGE=gcs local USE_CACHE=1 @@ -27,10 +26,6 @@ b9_package() { local ARG for ARG in "$@"; do case $ARG in - --settings=*) - SETTINGS="${ARG#*=}" - shift - ;; --type=*) TYPE="${ARG#*=}" shift @@ -53,11 +48,7 @@ b9_package() { local WORKDIR [ "$TYPE" == "newclient" ] && SETTINGS=all - if [ "$TYPE" == "docker" ] && [ "$SETTINGS" == "all" ]; then - echo "You must define settings when packaging the docker daemon" 1>&2 - exit 1 - fi - + _b9_package_init_git_cache VERSION=$(_b9_get_version $TREEISH $TYPE $SETTINGS) @@ -192,8 +183,13 @@ _d9_package_patch_package_json() { } _do_check_package() { + MODE=devel b9_package origin/master --type=newclient --no-cache b9_package origin/master --type=newclient - b9_package origin/master --type=docker --settings=deploy --no-cache + + MODE=deploy + b9_package origin/master --type=docker --no-cache + + MODE=devel b9_package origin/master --docker --no-cache } \ No newline at end of file diff --git a/b9/lib/package_storage_docker.sh b/b9/lib/package_storage_docker.sh index d9ba5129..445b6bff 100644 --- a/b9/lib/package_storage_docker.sh +++ b/b9/lib/package_storage_docker.sh @@ -8,7 +8,7 @@ _b9_dockerize_update_base() { local VERSION # build package - local TMPFILE=$(tempfile) + local TMPFILE=$(mktemp --tmpdir=$TMPDIR) b9_package $TREEISH --type=newclient | tee $TMPFILE VERSION=$(cat $TMPFILE | tail -n1) rm $TMPFILE