diff --git a/contrib/dokku_client.sh b/contrib/dokku_client.sh index 2e2f6ae78..85c1c1480 100755 --- a/contrib/dokku_client.sh +++ b/contrib/dokku_client.sh @@ -125,7 +125,7 @@ main() { else APP="$APP_ARG" fi - if git remote add $DOKKU_GIT_REMOTE "dokku@$DOKKU_REMOTE_HOST:$APP"; then + if git remote add "$DOKKU_GIT_REMOTE" "dokku@$DOKKU_REMOTE_HOST:$APP"; then echo "-----> Dokku remote added at ${DOKKU_REMOTE_HOST} called ${DOKKU_GIT_REMOTE}" echo "-----> Application name is ${APP}" else diff --git a/plugins/20_events/install b/plugins/20_events/install index e6991005f..cdc5cb497 100755 --- a/plugins/20_events/install +++ b/plugins/20_events/install @@ -10,6 +10,7 @@ flag_rsyslog_needs_restart=n # This can be done unconditionally as mkdir -p # exits gracefully if the path already exists +# shellcheck disable=SC2174 mkdir -m 775 -p "$DOKKU_LOGS_DIR" case "$DOKKU_DISTRO" in arch|debian|centos) diff --git a/plugins/checks/check-deploy b/plugins/checks/check-deploy index 7652331e4..7afe7a56b 100755 --- a/plugins/checks/check-deploy +++ b/plugins/checks/check-deploy @@ -74,7 +74,7 @@ checks_check_deploy() { # after successfully copying the file. Thus, we suppress stderr. # ref: https://github.com/dotcloud/docker/issues/3986 local CHECK_DEPLOY_TMP_WORK_DIR=$(mktemp -d /tmp/dokku_CHECKS.XXXXX) - docker cp $DOKKU_APP_CONTAINER_ID:/app/CHECKS "$CHECK_DEPLOY_TMP_WORK_DIR" 2> /dev/null || true + docker cp "$DOKKU_APP_CONTAINER_ID:/app/CHECKS" "$CHECK_DEPLOY_TMP_WORK_DIR" 2> /dev/null || true local FILENAME=${CHECK_DEPLOY_TMP_WORK_DIR}/CHECKS @@ -107,8 +107,8 @@ checks_check_deploy() { dokku_log_info1 "Waiting for $DOKKU_DEFAULT_CHECKS_WAIT seconds ..." sleep "$DOKKU_DEFAULT_CHECKS_WAIT" - ! (is_container_running $DOKKU_APP_CONTAINER_ID) && dokku_log_fail "App container failed to start!!" - local container_restarts=$(docker inspect -f "{{ .RestartCount }}" $DOKKU_APP_CONTAINER_ID) + ! (is_container_running "$DOKKU_APP_CONTAINER_ID") && dokku_log_fail "App container failed to start!!" + local container_restarts="$(docker inspect -f "{{ .RestartCount }}" "$DOKKU_APP_CONTAINER_ID")" if [[ $container_restarts -ne 0 ]]; then docker stop "$DOKKU_APP_CONTAINER_ID" || true dokku_log_fail "App container failed to start!!" diff --git a/plugins/common/functions b/plugins/common/functions index e2843bf69..543c454a8 100755 --- a/plugins/common/functions +++ b/plugins/common/functions @@ -142,7 +142,7 @@ verify_app_name() { local APP="$1" [[ ! -n "$APP" ]] && dokku_log_fail "(verify_app_name) APP must not be null" if [[ ! "$APP" =~ ^[a-z].* && ! "$APP" =~ ^[0-9].* ]]; then - [[ -d "$DOKKU_ROOT/$APP" ]] && rm -rf "$DOKKU_ROOT/$APP" + [[ -d "$DOKKU_ROOT/$APP" ]] && rm -rf "${DOKKU_ROOT:?}/$APP" dokku_log_fail "App name must begin with lowercase alphanumeric character" fi [[ ! -d "$DOKKU_ROOT/$APP" ]] && dokku_log_fail "App $APP does not exist" @@ -211,7 +211,7 @@ get_running_image_tag() { verify_app_name "$APP" local CIDS=( $(get_app_container_ids "$APP") ) - local RUNNING_IMAGE_TAG=$(docker inspect -f '{{ .Config.Image }}' ${CIDS[0]} 2>/dev/null | awk -F: '{ print $2 }' || echo '') + local RUNNING_IMAGE_TAG=$(docker inspect -f '{{ .Config.Image }}' "${CIDS[0]}" 2>/dev/null | awk -F: '{ print $2 }' || echo '') echo "$RUNNING_IMAGE_TAG" } @@ -331,10 +331,11 @@ get_app_container_ids() { get_app_running_container_ids() { declare desc="return list of running docker container ids for given app and optional container_type" local APP="$1" CONTAINER_TYPE="$2" + local CIDS verify_app_name "$APP" ! (is_deployed "$APP") && dokku_log_fail "App $APP has not been deployed" - local CIDS=$(get_app_container_ids "$APP" "$CONTAINER_TYPE") + CIDS=$(get_app_container_ids "$APP" "$CONTAINER_TYPE") for CID in $CIDS; do local APP_CONTAINER_STATUS=$(docker inspect -f '{{.State.Running}}' "$CID" 2>/dev/null || true) @@ -367,7 +368,7 @@ get_cmd_from_procfile() { if [[ -f $DOKKU_PROCFILE ]]; then local line; local name; local command - while read line || [[ -n "$line" ]]; do + while read -r line || [[ -n "$line" ]]; do if [[ -z "$line" ]] || [[ "$line" == "#"* ]]; then continue fi @@ -702,6 +703,8 @@ release_and_deploy() { source "$PLUGIN_AVAILABLE_PATH/config/functions" local APP="$1"; local IMAGE_TAG="$2"; local IMAGE=$(get_app_image_name "$APP" "$IMAGE_TAG") + local DOKKU_DOCKERFILE_PORTS + verify_app_name "$APP" if verify_image "$IMAGE"; then @@ -709,7 +712,7 @@ release_and_deploy() { local IMAGE_SOURCE_TYPE="herokuish" else local IMAGE_SOURCE_TYPE="dockerfile" - local DOKKU_DOCKERFILE_PORTS=$(config_get "$APP" DOKKU_DOCKERFILE_PORTS || true) + DOKKU_DOCKERFILE_PORTS=$(config_get "$APP" DOKKU_DOCKERFILE_PORTS || true) if [[ -z "$DOKKU_DOCKERFILE_PORTS" ]]; then local DOCKER_IMAGE_PORTS=$(get_exposed_ports_from_image "$IMAGE") [[ -n "$DOCKER_IMAGE_PORTS" ]] && config_set --no-restart "$APP" DOKKU_DOCKERFILE_PORTS="$DOCKER_IMAGE_PORTS" diff --git a/plugins/docker-options/subcommands/remove b/plugins/docker-options/subcommands/remove index 6a0b651bf..8677039ed 100755 --- a/plugins/docker-options/subcommands/remove +++ b/plugins/docker-options/subcommands/remove @@ -10,6 +10,7 @@ docker_options_remove_cmd() { verify_app_name "$2" && local APP="$2" read -ra passed_phases <<< "$(get_phases "$3")" shift 3 # everything else passed is the docker option + # shellcheck disable=SC2154 [[ -z ${passed_docker_option="$@"} ]] && dokku_log_fail "Please specify docker options to add to the phase" remove_passed_docker_option passed_phases[@] "${passed_docker_option[@]}" } diff --git a/plugins/enter/subcommands/default b/plugins/enter/subcommands/default index 9d2a23da1..b53ea0a71 100755 --- a/plugins/enter/subcommands/default +++ b/plugins/enter/subcommands/default @@ -12,7 +12,7 @@ enter_default_cmd() { if [[ -z "$3" ]]; then if [[ ${#AVAILABLE_CONTAINER_TYPES[@]} -gt 1 ]]; then dokku_log_warn "No container type specified." - dokku_log_fail "Available types for app ($APP): ${AVAILABLE_CONTAINER_TYPES[@]}" + dokku_log_fail "Available types for app ($APP): ${AVAILABLE_CONTAINER_TYPES[*]}" else CONTAINER_TYPE="${AVAILABLE_CONTAINER_TYPES[0]}" fi @@ -22,11 +22,11 @@ enter_default_cmd() { local DOKKU_APP_CIDS=( $(get_app_container_ids "$APP") ) if [[ ! -n "$4" ]]; then dokku_log_warn "No container id specified." - dokku_log_fail "Available ids for app ($APP): ${DOKKU_APP_CIDS[@]}" + dokku_log_fail "Available ids for app ($APP): ${DOKKU_APP_CIDS[*]}" fi if ! (printf -- '%s\n' "${DOKKU_APP_CIDS[@]}" | grep -q -e "^$4"); then dokku_log_warn "Invalid container id for app" - dokku_log_fail "Available ids for app ($APP): ${DOKKU_APP_CIDS[@]}" + dokku_log_fail "Available ids for app ($APP): ${DOKKU_APP_CIDS[*]}" fi local ID=$(printf -- '%s\n' "${DOKKU_APP_CIDS[@]}" | grep -e "^$4") shift 4 @@ -35,7 +35,7 @@ enter_default_cmd() { local ID=${DOKKU_APP_CIDS[0]} if [[ ! -n $ID ]]; then dokku_log_warn "No containers found for type '$CONTAINER_TYPE'" - dokku_log_fail "Available types for app ($APP): ${AVAILABLE_CONTAINER_TYPES[@]}" + dokku_log_fail "Available types for app ($APP): ${AVAILABLE_CONTAINER_TYPES[*]}" fi if [[ $3 ]]; then shift 3 diff --git a/plugins/git/functions b/plugins/git/functions index 4c6a4a62c..ceebfb5b1 100755 --- a/plugins/git/functions +++ b/plugins/git/functions @@ -30,7 +30,7 @@ git_build_app_repo() { git reset --hard FETCH_HEAD &> /dev/null suppress_output git submodule update --init --recursive GIT_DIR="$DOKKU_ROOT/$APP" git tag -d "$TMP_TAG" &> /dev/null || true - find -name .git -prune -exec rm -rf {} \; > /dev/null + find . -name .git -prune -exec rm -rf {} \; > /dev/null plugn trigger post-extract "$APP" "$GIT_BUILD_APP_REPO_TMP_WORK_DIR" "$REV" diff --git a/plugins/logs/subcommands/default b/plugins/logs/subcommands/default index e97480c6a..14532f31d 100755 --- a/plugins/logs/subcommands/default +++ b/plugins/logs/subcommands/default @@ -17,7 +17,8 @@ logs_default_cmd() { shift 2; local TEMP=$(getopt -o htqn:p: --long help,tail,quiet,num:,ps: -n 'dokku logs' -- "$@") - if [[ $? != 0 ]]; then usage >&2 ; exit 1 ; fi + local EXIT_CODE="$?" + if [[ "$EXIT_CODE" != 0 ]]; then usage >&2 ; exit 1 ; fi eval set -- "$TEMP" local DOKKU_LOGS_LINE_NUMBERS="100" diff --git a/plugins/ps/functions b/plugins/ps/functions index 3191f88ef..f9f094df8 100755 --- a/plugins/ps/functions +++ b/plugins/ps/functions @@ -77,9 +77,9 @@ set_scale() { for procscale in "${SCALE_SETTINGS[@]}"; do local PROC_NAME=${procscale%%=*} local PROC_COUNT=${procscale#*=} - is_number $PROC_COUNT || dokku_log_fail "ps:scale $PROC_COUNT is not a number" + is_number "$PROC_COUNT" || dokku_log_fail "ps:scale $PROC_COUNT is not a number" dokku_log_info1_quiet "Scaling $APP:$PROC_NAME to $PROC_COUNT" - if (egrep -q ^${PROC_NAME}= "$DOKKU_SCALE_FILE" > /dev/null 2>&1); then + if (egrep -q "^${PROC_NAME}=" "$DOKKU_SCALE_FILE" > /dev/null 2>&1); then sed --in-place "s:^${PROC_NAME}=.*:$PROC_NAME=$PROC_COUNT:g" "$DOKKU_SCALE_FILE" else echo "$PROC_NAME=$PROC_COUNT" >> "$DOKKU_SCALE_FILE" diff --git a/plugins/ssh-keys/functions b/plugins/ssh-keys/functions index f45dce1ff..2d5d1ebf0 100755 --- a/plugins/ssh-keys/functions +++ b/plugins/ssh-keys/functions @@ -13,7 +13,7 @@ verify_ssh_key_file() { declare desc="Test that public key is valid" [[ -s ${DOKKU_ROOT}/.ssh/authorized_keys ]] || dokku_log_fail "No public keys found." local key line=0 - while read key ; do + while read -r key; do line=$((line + 1)) ssh-keygen -l -f /dev/stdin <<< "$key" &> /dev/null || dokku_log_fail "${DOKKU_ROOT}/.ssh/authorized_keys line $line failed ssh-keygen check." done <"${DOKKU_ROOT}/.ssh/authorized_keys"