first stab at a common functions library. include argument parsing and a few definitions wired up. closes #932. closes #945

This commit is contained in:
Michael Hobbs
2015-02-05 11:32:46 -08:00
parent 72a58bbda3
commit 6ad65dd9b4
13 changed files with 140 additions and 62 deletions

View File

@@ -35,11 +35,12 @@ The below plugin is a dummy `dokku hello` plugin. If your plugin exposes command
```shell ```shell
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
case "$1" in case "$1" in
hello) hello)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
APP="$2"; APP="$2";
echo "Hello $APP" echo "Hello $APP"

30
dokku
View File

@@ -10,11 +10,19 @@ export PLUGIN_PATH=${PLUGIN_PATH:="/var/lib/dokku/plugins"}
export DOKKU_NOT_IMPLEMENTED_EXIT=10 export DOKKU_NOT_IMPLEMENTED_EXIT=10
export DOKKU_VALID_EXIT=0 export DOKKU_VALID_EXIT=0
source "$PLUGIN_PATH/common/functions"
[[ -f $DOKKU_ROOT/dokkurc ]] && source $DOKKU_ROOT/dokkurc [[ -f $DOKKU_ROOT/dokkurc ]] && source $DOKKU_ROOT/dokkurc
[[ -d $DOKKU_ROOT/.dokkurc ]] && for f in $DOKKU_ROOT/.dokkurc/*; do source $f; done [[ -d $DOKKU_ROOT/.dokkurc ]] && for f in $DOKKU_ROOT/.dokkurc/*; do source $f; done
[[ $DOKKU_TRACE ]] && set -x [[ $DOKKU_TRACE ]] && set -x
parse_args "$@"
for arg in "$@"; do
[[ "$arg" =~ ^-.* ]] && shift 1
done
! has_tty && DOKKU_QUIET_OUTPUT=1
if [[ $(id -un) != "dokku" && $1 != plugins-install* && $1 != "plugins-update" ]]; then if [[ $(id -un) != "dokku" && $1 != plugins-install* && $1 != "plugins-update" ]]; then
sudo -u dokku -E -H $0 "$@" sudo -u dokku -E -H $0 "$@"
exit exit
@@ -34,15 +42,15 @@ fi
case "$1" in case "$1" in
receive) receive)
APP="$2"; IMAGE="dokku/$APP" APP="$2"; IMAGE="dokku/$APP"
echo "-----> Cleaning up ..." info1 "Cleaning up ..."
dokku cleanup dokku cleanup
echo "-----> Building $APP ..." info1 "Building $APP ..."
cat | dokku build $APP cat | dokku build $APP
echo "-----> Releasing $APP ..." info1 "Releasing $APP ..."
dokku release $APP dokku release $APP
echo "-----> Deploying $APP ..." info1 "Deploying $APP ..."
dokku deploy $APP dokku deploy $APP
echo "=====> Application deployed:" info2 "Application deployed:"
dokku urls $APP | sed "s/^/ /" dokku urls $APP | sed "s/^/ /"
echo echo
;; ;;
@@ -116,7 +124,7 @@ case "$1" in
# run checks first, then post-deploy hooks, which switches Nginx traffic # run checks first, then post-deploy hooks, which switches Nginx traffic
trap kill_new INT TERM EXIT trap kill_new INT TERM EXIT
echo "-----> Running pre-flight checks" info1 "Running pre-flight checks"
pluginhook check-deploy $id $APP $port ${ipaddr:-localhost} pluginhook check-deploy $id $APP $port ${ipaddr:-localhost}
# now using the new container # now using the new container
@@ -124,7 +132,7 @@ case "$1" in
echo $port > "$DOKKU_ROOT/$APP/PORT" echo $port > "$DOKKU_ROOT/$APP/PORT"
echo "http://$(< "$DOKKU_ROOT/HOSTNAME"):$port" > "$DOKKU_ROOT/$APP/URL" echo "http://$(< "$DOKKU_ROOT/HOSTNAME"):$port" > "$DOKKU_ROOT/$APP/URL"
echo "-----> Running post-deploy" info1 "Running post-deploy"
pluginhook post-deploy $APP $port $ipaddr pluginhook post-deploy $APP $port $ipaddr
trap - INT TERM EXIT trap - INT TERM EXIT
@@ -132,7 +140,7 @@ case "$1" in
if [[ -n "$oldid" ]]; then if [[ -n "$oldid" ]]; then
# Let the old container finish processing requests, before terminating it # Let the old container finish processing requests, before terminating it
WAIT="${DOKKU_WAIT_TO_RETIRE:-60}" WAIT="${DOKKU_WAIT_TO_RETIRE:-60}"
echo "-----> Shutting down old container in $WAIT seconds" info1 "Shutting down old container in $WAIT seconds"
( (
exec >/dev/null 2>/dev/null </dev/null exec >/dev/null 2>/dev/null </dev/null
trap '' INT HUP trap '' INT HUP
@@ -176,7 +184,7 @@ case "$1" in
;; ;;
help|'') help|'')
echo "Usage: dokku COMMAND <app> [command-specific-options]" echo "Usage: dokku [-q|--quiet|-t|--trace|--rm-container|-rm] COMMAND <app> [command-specific-options]"
echo "" echo ""
echo "Options:" echo "Options:"
@@ -203,8 +211,8 @@ EOF
done done
if [ "$implemented" -eq 0 ]; then if [ "$implemented" -eq 0 ]; then
echo " ! \`$*\` is not a dokku command." warn "\`$*\` is not a dokku command."
echo " ! See \`dokku help\` for a list of available commands." warn "See \`dokku help\` for a list of available commands."
exit 1 exit 1
fi fi
;; ;;

View File

@@ -1,5 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
case "$1" in case "$1" in
trace) trace)
@@ -26,7 +27,7 @@ case "$1" in
logs) logs)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
APP="$2"; APP="$2";
if [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]]; then if [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]]; then
@@ -43,21 +44,22 @@ case "$1" in
run) run)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
APP="$2"; IMAGE="dokku/$APP" APP="$2"; IMAGE="dokku/$APP"
shift 2 shift 2
DOCKER_ARGS=$(: | pluginhook docker-args $APP run) DOCKER_ARGS=$(: | pluginhook docker-args $APP run)
DOCKER_ARGS+=$(: | pluginhook docker-args-run $APP) DOCKER_ARGS+=$(: | pluginhook docker-args-run $APP)
[[ "$(/usr/bin/tty || true)" != "not a tty" ]] && DOKKU_RUN_OPTS="-i -t" [[ $DOKKU_RM_CONTAINER ]] && DOKKU_RUN_OPTS="--rm"
has_tty && DOKKU_RUN_OPTS+=" -i -t"
docker run $DOKKU_RUN_OPTS $DOCKER_ARGS $IMAGE /exec "$@" docker run $DOKKU_RUN_OPTS $DOCKER_ARGS $IMAGE /exec "$@"
;; ;;
url | urls) url | urls)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
APP="$2"; SCHEME="http"; SSL="$DOKKU_ROOT/$APP/tls"; WILDCARD_SSL="$DOKKU_ROOT/tls" APP="$2"; SCHEME="http"; SSL="$DOKKU_ROOT/$APP/tls"; WILDCARD_SSL="$DOKKU_ROOT/tls"
if [[ -e "$SSL/server.crt" && -e "$SSL/server.key" ]] || [[ -e "$WILDCARD_SSL/server.crt" && -e "$WILDCARD_SSL/server.key" ]]; then if [[ -e "$SSL/server.crt" && -e "$SSL/server.key" ]] || [[ -e "$WILDCARD_SSL/server.crt" && -e "$WILDCARD_SSL/server.key" ]]; then

View File

@@ -1,15 +1,16 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
case "$1" in case "$1" in
apps) apps)
echo "=== My Apps" [[ -z "$DOKKU_QUIET_OUTPUT" ]] && info2 "My Apps"
find $DOKKU_ROOT -follow -maxdepth 1 -type d \( ! -iname ".*" \) -not -path $DOKKU_ROOT/tls | sed 's|^\./||g' | sed 's|'$DOKKU_ROOT'\/||' | tail -n +2 | sort find $DOKKU_ROOT -follow -maxdepth 1 -type d \( ! -iname ".*" \) -not -path $DOKKU_ROOT/tls | sed 's|^\./||g' | sed 's|'$DOKKU_ROOT'\/||' | tail -n +2 | sort
;; ;;
apps:create) apps:create)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ -d "$DOKKU_ROOT/$2" ]] && echo " ! Name is already taken" && exit 1 [[ -d "$DOKKU_ROOT/$2" ]] && warn "Name is already taken" && exit 1
APP="$2" APP="$2"
mkdir -p "$DOKKU_ROOT/$APP" mkdir -p "$DOKKU_ROOT/$APP"
@@ -18,19 +19,20 @@ case "$1" in
apps:destroy) apps:destroy)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
[[ "$2" == "tls" ]] && echo "Unable to destroy tls directory" && exit 1 [[ "$2" == "tls" ]] && echo "Unable to destroy tls directory" && exit 1
APP="$2"; IMAGE="dokku/$APP"; FORCE="$3" APP="$2"; IMAGE="dokku/$APP"
if [[ "$FORCE" != "force" ]]; then [[ "$3" == "force" ]] && DOKKU_APPS_FORCE_DELETE=1
echo " ! WARNING: Potentially Destructive Action" if [[ -z "$DOKKU_APPS_FORCE_DELETE" ]]; then
echo " ! This command will destroy $APP (including all add-ons)." warn "WARNING: Potentially Destructive Action"
echo " ! To proceed, type \"$APP\"" warn "This command will destroy $APP (including all add-ons)."
warn "To proceed, type \"$APP\""
echo "" echo ""
read -p "> " app_name read -p "> " app_name
if [[ "$app_name" != "$APP" ]]; then if [[ "$app_name" != "$APP" ]]; then
echo " ! Confirmation did not match $APP. Aborted." warn "Confirmation did not match $APP. Aborted."
exit 1 exit 1
fi fi
fi fi

View File

@@ -1,5 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
APP="$1"; IMAGE="dokku/$APP"; BUILD_ENV="" APP="$1"; IMAGE="dokku/$APP"; BUILD_ENV=""
@@ -17,7 +18,7 @@ if [[ -f "$DOKKU_ROOT/$APP/ENV" ]]; then
fi fi
if [[ ! -z "$BUILD_ENV" ]]; then if [[ ! -z "$BUILD_ENV" ]]; then
echo "-----> Adding BUILD_ENV to build environment..." info1 "Adding BUILD_ENV to build environment..."
# create build env files for use in buildpacks like this: # create build env files for use in buildpacks like this:
# https://github.com/niteoweb/heroku-buildpack-buildout/blob/5879fa3418f7d8e079f1aa5816ba1adde73f4948/bin/compile#L34 # https://github.com/niteoweb/heroku-buildpack-buildout/blob/5879fa3418f7d8e079f1aa5816ba1adde73f4948/bin/compile#L34
id=$(echo $BUILD_ENV |sed 's@export @@g'| docker run -i -a stdin $IMAGE /bin/bash -c "for ENV_VAR in $(cat); do echo \$ENV_VAR |sed 's@^\([^=]*\)=\(.*\)\$@echo \\\"\2\\\" >/tmp/env/\1@g' >>/tmp/set_env.sh; done && mkdir -p /tmp/env && /bin/bash /tmp/set_env.sh") id=$(echo $BUILD_ENV |sed 's@export @@g'| docker run -i -a stdin $IMAGE /bin/bash -c "for ENV_VAR in $(cat); do echo \$ENV_VAR |sed 's@^\([^=]*\)=\(.*\)\$@echo \\\"\2\\\" >/tmp/env/\1@g' >>/tmp/set_env.sh; done && mkdir -p /tmp/env && /bin/bash /tmp/set_env.sh")

57
plugins/common/functions Normal file
View File

@@ -0,0 +1,57 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
function has_tty() {
if [[ "$(/usr/bin/tty || true)" == "not a tty" ]]; then
return 1
else
return 0
fi
}
function info1() {
echo "-----> $@"
}
function info2() {
echo "=====> $@"
}
function verbose() {
echo " $@"
}
function warn() {
echo " ! $@"
}
function fail() {
echo "$@" 1>&2
exit 1
}
function verify_app_name() {
local APP="$1"
[[ ! -d "$DOKKU_ROOT/$APP" ]] && fail "App $APP does not exist"
return 0
}
function parse_args() {
for arg in "$@"; do
case "$arg" in
--quiet|-q)
export DOKKU_QUIET_OUTPUT=1
;;
--trace|-t)
export DOKKU_TRACE=1
;;
--rm-container|-rm)
export DOKKU_RM_CONTAINER=1
;;
--force|-f)
export DOKKU_APPS_FORCE_DELETE=1
;;
esac
done
return 0
}

View File

@@ -1,5 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
ENV_FILE="$DOKKU_ROOT/$2/ENV" ENV_FILE="$DOKKU_ROOT/$2/ENV"
ENV_FILE_TEMP="$DOKKU_ROOT/$2/ENV.tmp" ENV_FILE_TEMP="$DOKKU_ROOT/$2/ENV.tmp"
@@ -49,7 +50,7 @@ config_write() {
case "$1" in case "$1" in
config) config)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
APP="$2" APP="$2"
config_create config_create
@@ -64,13 +65,13 @@ case "$1" in
fi fi
done done
echo "=== $APP config vars ===" [[ -z "$DOKKU_QUIET_OUTPUT" ]] && info2 "$APP config vars"
config_styled_hash "$VARS" config_styled_hash "$VARS"
;; ;;
config:get) config:get)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
APP="$2" APP="$2"
if [[ -z $3 ]]; then if [[ -z $3 ]]; then
@@ -91,7 +92,7 @@ case "$1" in
config:set) config:set)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
APP="$2" APP="$2"
if [[ -z "${*:3}" ]]; then if [[ -z "${*:3}" ]]; then
@@ -130,7 +131,7 @@ ${var}"
ENV_ADD=$(echo "$ENV_ADD" | tail -n +2) #remove first empty line ENV_ADD=$(echo "$ENV_ADD" | tail -n +2) #remove first empty line
if [ $RESTART_APP ]; then if [ $RESTART_APP ]; then
echo "-----> Setting config vars and restarting $APP" info1 "Setting config vars and restarting $APP"
config_styled_hash "$ENV_ADD" " " config_styled_hash "$ENV_ADD" " "
config_write "$ENV_TEMP" config_write "$ENV_TEMP"
@@ -139,7 +140,7 @@ ${var}"
config:unset) config:unset)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
APP="$2" APP="$2"
if [[ -z $3 ]]; then if [[ -z $3 ]]; then
@@ -153,7 +154,7 @@ ${var}"
VARS="${*:3}" VARS="${*:3}"
for var in $VARS; do for var in $VARS; do
echo "-----> Unsetting $var and restarting $APP" info1 "Unsetting $var and restarting $APP"
ENV_TEMP=$(echo -e "${ENV_TEMP}" | sed "/^export $var=/ d") ENV_TEMP=$(echo -e "${ENV_TEMP}" | sed "/^export $var=/ d")
config_write "$ENV_TEMP" config_write "$ENV_TEMP"

View File

@@ -1,5 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
RE_IPV4="([0-9]{1,3}[\.]){3}[0-9]{1,3}" RE_IPV4="([0-9]{1,3}[\.]){3}[0-9]{1,3}"
@@ -19,17 +20,17 @@ RE_IPV6="${RE_IPV6}([0-9a-fA-F]{1,4}:){1,4}:${RE_IPV4}" # TEST: 2
case "$1" in case "$1" in
domains) domains)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
APP="$2" APP="$2"
dokku domains:setup $APP dokku domains:setup $APP
echo "=== $APP Domain Names" [[ -z "$DOKKU_QUIET_OUTPUT" ]] && info2 "$APP Domain Names"
cat "$DOKKU_ROOT/$APP/VHOST" cat "$DOKKU_ROOT/$APP/VHOST"
;; ;;
domains:setup) domains:setup)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
APP="$2"; VHOST_PATH="$DOKKU_ROOT/$APP/VHOST" APP="$2"; VHOST_PATH="$DOKKU_ROOT/$APP/VHOST"
if [[ ! -f $VHOST_PATH ]]; then if [[ ! -f $VHOST_PATH ]]; then
@@ -43,7 +44,7 @@ case "$1" in
[[ ! $(grep -q NO_VHOST "$DOKKU_ROOT/$APP/ENV") ]] && echo "export NO_VHOST='1'" >> "$DOKKU_ROOT/$APP/ENV" [[ ! $(grep -q NO_VHOST "$DOKKU_ROOT/$APP/ENV") ]] && echo "export NO_VHOST='1'" >> "$DOKKU_ROOT/$APP/ENV"
else else
if [[ -f "$DOKKU_ROOT/VHOST" ]]; then if [[ -f "$DOKKU_ROOT/VHOST" ]]; then
echo "-----> Creating new $VHOST_PATH..." info1 "Creating new $VHOST_PATH..."
SUBDOMAIN=${APP/%\.${VHOST}/} SUBDOMAIN=${APP/%\.${VHOST}/}
hostname=$(: | pluginhook nginx-hostname $APP $SUBDOMAIN $VHOST) hostname=$(: | pluginhook nginx-hostname $APP $SUBDOMAIN $VHOST)
if [[ ! -n $hostname ]]; then if [[ ! -n $hostname ]]; then
@@ -62,7 +63,7 @@ case "$1" in
domains:add) domains:add)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
APP="$2" APP="$2"
if [[ -z $3 ]]; then if [[ -z $3 ]]; then
@@ -81,25 +82,25 @@ case "$1" in
# we need to restart the app to make sure we're binding to the appropriate network interface # we need to restart the app to make sure we're binding to the appropriate network interface
dokku ps:restart $APP dokku ps:restart $APP
pluginhook post-domains-update $APP pluginhook post-domains-update $APP
echo "-----> Added $3 to $APP" info1 "Added $3 to $APP"
;; ;;
domains:clear) domains:clear)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
APP="$2" APP="$2"
rm -f "$DOKKU_ROOT/$APP/VHOST" rm -f "$DOKKU_ROOT/$APP/VHOST"
dokku domains:setup $APP dokku domains:setup $APP
pluginhook post-domains-update $APP pluginhook post-domains-update $APP
echo "-----> Cleared domains in $APP" info1 "Cleared domains in $APP"
;; ;;
domains:remove) domains:remove)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
APP="$2" APP="$2"
if [[ -z $3 ]]; then if [[ -z $3 ]]; then
@@ -111,7 +112,7 @@ case "$1" in
dokku domains:setup $APP dokku domains:setup $APP
sed -i "/^$3$/d" "$DOKKU_ROOT/$APP/VHOST" sed -i "/^$3$/d" "$DOKKU_ROOT/$APP/VHOST"
pluginhook post-domains-update $APP pluginhook post-domains-update $APP
echo "-----> Removed $3 from $APP" info1 "Removed $3 from $APP"
;; ;;

View File

@@ -1,5 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
restart_nginx () { restart_nginx () {
case "$DOKKU_DISTRO" in case "$DOKKU_DISTRO" in
@@ -62,7 +63,7 @@ EOF
NONSSL_VHOSTS=$(egrep -v "^${SSL_HOSTNAME}$|^${SSL_HOSTNAME_ALT}$" $VHOST_PATH || exit 0) NONSSL_VHOSTS=$(egrep -v "^${SSL_HOSTNAME}$|^${SSL_HOSTNAME_ALT}$" $VHOST_PATH || exit 0)
while read line; do while read line; do
echo "-----> Configuring SSL for $line..." info1 "Configuring SSL for $line..."
SSL_SERVER_NAME=$line SSL_SERVER_NAME=$line
eval "cat <<< \"$(< $NGINX_CONF)\" >> $DOKKU_ROOT/$APP/nginx.conf" eval "cat <<< \"$(< $NGINX_CONF)\" >> $DOKKU_ROOT/$APP/nginx.conf"
done <<< "$SSL_VHOSTS" done <<< "$SSL_VHOSTS"
@@ -70,7 +71,7 @@ EOF
APP_NGINX_TEMPLATE="$DOKKU_ROOT/$APP/nginx.conf.template" APP_NGINX_TEMPLATE="$DOKKU_ROOT/$APP/nginx.conf.template"
if [[ -f $APP_NGINX_TEMPLATE ]]; then if [[ -f $APP_NGINX_TEMPLATE ]]; then
echo "-----> Overriding default nginx.conf with detected nginx.conf.template" info1 "Overriding default nginx.conf with detected nginx.conf.template"
NGINX_CONF=$APP_NGINX_TEMPLATE NGINX_CONF=$APP_NGINX_TEMPLATE
fi fi
@@ -79,11 +80,11 @@ EOF
NOSSL_SERVER_NAME=$(echo $NONSSL_VHOSTS $SSL_VHOSTS| tr '\n' ' ') NOSSL_SERVER_NAME=$(echo $NONSSL_VHOSTS $SSL_VHOSTS| tr '\n' ' ')
if [[ -n "$DOKKU_APP_LISTEN_PORT" ]] && [[ -n "$DOKKU_APP_LISTEN_IP" ]]; then if [[ -n "$DOKKU_APP_LISTEN_PORT" ]] && [[ -n "$DOKKU_APP_LISTEN_IP" ]]; then
echo "-----> Creating $SCHEME nginx.conf" info1 "Creating $SCHEME nginx.conf"
echo "upstream $APP { server $DOKKU_APP_LISTEN_IP:$DOKKU_APP_LISTEN_PORT; }" > $DOKKU_ROOT/$APP/nginx.conf echo "upstream $APP { server $DOKKU_APP_LISTEN_IP:$DOKKU_APP_LISTEN_PORT; }" > $DOKKU_ROOT/$APP/nginx.conf
eval "cat <<< \"$(< $NGINX_CONF)\" >> $DOKKU_ROOT/$APP/nginx.conf" eval "cat <<< \"$(< $NGINX_CONF)\" >> $DOKKU_ROOT/$APP/nginx.conf"
echo "-----> Running nginx-pre-reload" info1 "Running nginx-pre-reload"
pluginhook nginx-pre-reload $APP $DOKKU_APP_LISTEN_PORT $DOKKU_APP_LISTEN_IP pluginhook nginx-pre-reload $APP $DOKKU_APP_LISTEN_PORT $DOKKU_APP_LISTEN_IP
echo " Reloading nginx" echo " Reloading nginx"
@@ -91,14 +92,14 @@ EOF
fi fi
else else
if [[ -f "$DOKKU_ROOT/$APP/VHOST" ]]; then if [[ -f "$DOKKU_ROOT/$APP/VHOST" ]]; then
echo "-----> VHOST support disabled, deleting $APP/VHOST" info1 "VHOST support disabled, deleting $APP/VHOST"
rm "$DOKKU_ROOT/$APP/VHOST" rm "$DOKKU_ROOT/$APP/VHOST"
fi fi
if [[ -f "$DOKKU_ROOT/$APP/nginx.conf" ]]; then if [[ -f "$DOKKU_ROOT/$APP/nginx.conf" ]]; then
echo "-----> VHOST support disabled, deleting nginx.conf" info1 "VHOST support disabled, deleting nginx.conf"
rm "$DOKKU_ROOT/$APP/nginx.conf" rm "$DOKKU_ROOT/$APP/nginx.conf"
echo "-----> VHOST support disabled, reloading nginx after nginx.conf deletion" info1 "VHOST support disabled, reloading nginx after nginx.conf deletion"
restart_nginx restart_nginx
fi fi
fi fi
@@ -106,7 +107,7 @@ EOF
nginx:import-ssl) nginx:import-ssl)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
[[ -t 0 ]] && echo "Tar archive containing server.crt and server.key expected on stdin" && exit 1 [[ -t 0 ]] && echo "Tar archive containing server.crt and server.key expected on stdin" && exit 1
APP="$2" APP="$2"

View File

@@ -1,12 +1,13 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
APP="$1"; PORT="$2"; IP="$3" APP="$1"; PORT="$2"; IP="$3"
set +e; NO_VHOST=$(dokku config:get $APP NO_VHOST); set -e set +e; NO_VHOST=$(dokku config:get $APP NO_VHOST); set -e
if [[ -n "$NO_VHOST" ]]; then if [[ -n "$NO_VHOST" ]]; then
echo "-----> NO_VHOST config detected" info1 "NO_VHOST config detected"
elif [[ ! -f "$DOKKU_ROOT/$APP/VHOST" ]]; then elif [[ ! -f "$DOKKU_ROOT/$APP/VHOST" ]]; then
dokku domains:setup $APP dokku domains:setup $APP
fi fi

View File

@@ -1,5 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
APP="$1" APP="$1"

View File

@@ -1,16 +1,18 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname $0)/../common/functions"
release_and_deploy() { release_and_deploy() {
source "$(dirname $0)/../common/functions"
local APP="$1"; local APP="$1";
if [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]]; then if [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]]; then
echo "-----> Releasing $APP ..." info1 "Releasing $APP ..."
dokku release $APP dokku release $APP
echo "-----> Release complete!" info1 "Release complete!"
echo "-----> Deploying $APP ..." info1 "Deploying $APP ..."
dokku deploy $APP dokku deploy $APP
echo "=====> Application deployed:" info2 "Application deployed:"
dokku urls $APP | sed "s/^/ /" dokku urls $APP | sed "s/^/ /"
echo echo
fi fi
@@ -19,7 +21,7 @@ release_and_deploy() {
case "$1" in case "$1" in
ps) ps)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER") APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER")
[[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0 [[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0
@@ -29,7 +31,7 @@ case "$1" in
ps:start) ps:start)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER") APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER")
[[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0 [[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0
@@ -43,7 +45,7 @@ case "$1" in
ps:stop) ps:stop)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER") APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER")
[[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0 [[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0
@@ -58,7 +60,7 @@ case "$1" in
ps:rebuild) ps:rebuild)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
APP="$2" APP="$2"
dokku git-build $APP dokku git-build $APP
@@ -74,7 +76,7 @@ case "$1" in
ps:restart) ps:restart)
[[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1
[[ ! -d "$DOKKU_ROOT/$2" ]] && echo "App $2 does not exist" && exit 1 verify_app_name "$2"
APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER") APP="$2"; [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]] && CONTAINER_ID=$(< "$DOKKU_ROOT/$APP/CONTAINER")
[[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0 [[ -z "$CONTAINER_ID" ]] && echo "App $APP has not been deployed" && exit 0

View File

@@ -21,7 +21,7 @@ teardown() {
} }
@test "dokku client (no args should print help)" { @test "dokku client (no args should print help)" {
run /bin/bash -c "./contrib/dokku_client.sh | head -1 | grep -q 'dokku COMMAND <app>'" run /bin/bash -c "./contrib/dokku_client.sh | head -1 | egrep -q '^Usage: dokku \[.+\] COMMAND <app>.*'"
echo "output: "$output echo "output: "$output
echo "status: "$status echo "status: "$status
assert_success assert_success