#!/usr/bin/env bash set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x release_and_deploy() { local APP="$1"; if [[ -f "$DOKKU_ROOT/$APP/CONTAINER" ]]; then echo "-----> Releasing $APP ..." dokku release $APP echo "-----> Release complete!" echo "-----> Deploying $APP ..." dokku deploy $APP echo "=====> Application deployed:" dokku urls $APP | sed "s/^/ /" echo fi } case "$1" in ps) [[ -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 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 docker exec -ti "$CONTAINER_ID" /bin/bash -c "ps auxwww" ;; ps:start) [[ -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 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 if [[ "$(docker ps -q --no-trunc| grep -q $CONTAINER_ID; echo $?)" != "0" ]]; then release_and_deploy $APP else echo "App $APP already running" fi ;; ps:stop) [[ -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 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 if [[ "$(docker ps -q --no-trunc| grep -q $CONTAINER_ID; echo $?)" = "0" ]]; then echo "Stopping $APP ..." docker stop $CONTAINER_ID > /dev/null else echo "App $APP already stopped" fi ;; ps:restart) [[ -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 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 release_and_deploy $APP ;; ps:restartall) for app in $DOKKU_ROOT/*/CONTAINER; do APP=$(basename "$(dirname $app)"); dokku ps:restart $APP done ;; help | ps:help) cat && cat< List processes running in app container(s) ps:start Start app container(s) ps:stop Stop app container(s) ps:restart Restart app container(s) ps:restartall Restart all deployed app containers EOF ;; *) exit $DOKKU_NOT_IMPLEMENTED_EXIT ;; esac