diff --git a/.travis.yml b/.travis.yml index 451fe6f..81181d5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,10 +2,9 @@ sudo: required dist: trusty language: bash env: - - DOKKU_VERSION=master - - DOKKU_VERSION=v0.7.0 - - DOKKU_VERSION=v0.6.0 - - DOKKU_VERSION=v0.5.0 - - DOKKU_VERSION=v0.4.0 -before_install: make setup + - DOKKU_VERSION=master DOKKU_SYSTEM_GROUP=travis DOKKU_SYSTEM_USER=travis + - DOKKU_VERSION=v0.7.0 DOKKU_SYSTEM_GROUP=travis DOKKU_SYSTEM_USER=travis + - DOKKU_VERSION=v0.6.0 DOKKU_SYSTEM_GROUP=travis DOKKU_SYSTEM_USER=travis + - DOKKU_VERSION=v0.5.0 DOKKU_SYSTEM_GROUP=travis DOKKU_SYSTEM_USER=travis + - DOKKU_VERSION=v0.4.0 DOKKU_SYSTEM_GROUP=travis DOKKU_SYSTEM_USER=travis script: make test diff --git a/README.md b/README.md index 6dd0a26..bf4b08e 100644 --- a/README.md +++ b/README.md @@ -30,11 +30,13 @@ mongo:connect-admin Connect via telnet to a mongo service as admin us mongo:create Create a mongo service with environment variables mongo:destroy Delete the service, delete the data and stop its container if there are no links left mongo:enter [command] Enter or run a command in a running mongo service container +mongo:exists Check if the mongo service exists mongo:export > Export a dump of the mongo service database mongo:expose [port] Expose a mongo service on custom port if provided (random port otherwise) mongo:import < Import a dump into the mongo service database mongo:info Print the connection information mongo:link Link the mongo service to the app +mongo:linked Check if the mongo service is linked to an app mongo:list List all mongo services mongo:logs [-t] Print the most recent log(s) for this service mongo:promote Promote service as MONGO_URL in diff --git a/common-functions b/common-functions index 413c050..7450339 100755 --- a/common-functions +++ b/common-functions @@ -1,5 +1,6 @@ #!/usr/bin/env bash set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_AVAILABLE_PATH/config/functions" docker_ports_options() { declare desc="Exports a list of exposed ports" @@ -288,6 +289,20 @@ service_info() { fi } +service_is_linked() { + declare desc="Links a service to an application" + declare SERVICE="$1" APP="$2" + update_plugin_scheme_for_app "$APP" + local SERVICE_URL=$(service_url "$SERVICE") + local EXISTING_CONFIG=$(config_all "$APP") + local LINK=$(echo "$EXISTING_CONFIG" | grep "$SERVICE_URL" | cut -d: -f1) || true + if [[ -z $LINK ]]; then + dokku_log_warn "Service $SERVICE is not linked to $APP" + exit 1 + fi + dokku_log_info1 "Service $SERVICE is linked to $APP" +} + service_link() { declare desc="Links a service to an application" declare SERVICE="$1" APP="$2" diff --git a/subcommands/exists b/subcommands/exists new file mode 100755 index 0000000..93b6a99 --- /dev/null +++ b/subcommands/exists @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config" +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_BASE_PATH/common/functions" +source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" + +service-exists-cmd() { + #E here we check if the lolipop $PLUGIN_COMMAND_PREFIX service exists. + #E dokku $PLUGIN_COMMAND_PREFIX:exists lolipop + #A service, service to run command against + declare desc="check if the $PLUGIN_SERVICE service exists" + local cmd="$PLUGIN_COMMAND_PREFIX:exists" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" + + [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$SERVICE" + dokku_log_info1 "Service $SERVICE exists" +} + +service-exists-cmd "$@" diff --git a/subcommands/linked b/subcommands/linked new file mode 100755 index 0000000..f5a1789 --- /dev/null +++ b/subcommands/linked @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config" +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_BASE_PATH/common/functions" +source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" + +service-linked-cmd() { + #E here we check if the lolipop $PLUGIN_COMMAND_PREFIX service is linked to the 'playground' app. + #E dokku $PLUGIN_COMMAND_PREFIX:linked lolipop playground + #A service, service to run command against + #A app, app to run command against + declare desc="check if the $PLUGIN_SERVICE service is linked to an app" + local cmd="$PLUGIN_COMMAND_PREFIX:linked" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" APP="$2" + APP=${APP:="$DOKKU_APP_NAME"} + + [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" + [[ -z "$APP" ]] && dokku_log_fail "Please specify an app to run the command on" + verify_app_name "$APP" + verify_service_name "$SERVICE" + service_is_linked "$SERVICE" "$APP" +} + +service-linked-cmd "$@" diff --git a/tests/service_unlink.bats b/tests/service_unlink.bats index a20a187..50a5c2b 100755 --- a/tests/service_unlink.bats +++ b/tests/service_unlink.bats @@ -39,10 +39,20 @@ teardown() { @test "($PLUGIN_COMMAND_PREFIX:unlink) removes link from docker-options" { dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app >&2 dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app - options=$(dokku docker-options my_app | xargs) + check_value="" - [[ "$(dokku version)" == "master" ]] && check_value="Deploy options: --restart=on-failure:10" - [[ "$(at-least-version 0.7.0 "$(dokku version)")" == "true" ]] && check_value="Deploy options: --restart=on-failure:10" + report_action="docker-options" + if [[ "$(dokku version)" == "master" ]]; then + check_value="Docker options build: Docker options deploy: --restart=on-failure:10 Docker options run:" + report_action="docker-options:report" + elif [[ "$(at-least-version 0.8.1 "$(dokku version)")" == "true" ]]; then + check_value="Docker options build: Docker options deploy: --restart=on-failure:10 Docker options run:" + report_action="docker-options:report" + elif [[ "$(at-least-version 0.7.0 "$(dokku version)")" == "true" ]]; then + check_value="Deploy options: --restart=on-failure:10" + fi + + options=$(dokku $report_action my_app | xargs) assert_equal "$options" "$check_value" } diff --git a/tests/setup.sh b/tests/setup.sh index 5703c57..9f78440 100644 --- a/tests/setup.sh +++ b/tests/setup.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/test_helper.bash" BIN_STUBS="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/bin" @@ -10,6 +11,11 @@ fi cd $DOKKU_ROOT echo "Dokku version $DOKKU_VERSION" git checkout $DOKKU_VERSION > /dev/null +if grep go-build Makefile > /dev/null; then + mv "$BIN_STUBS/docker" "$BIN_STUBS/docker-stub" + make go-build + mv "$BIN_STUBS/docker-stub" "$BIN_STUBS/docker" +fi cd - source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config" diff --git a/tests/test_helper.bash b/tests/test_helper.bash index f2e0b2e..d5ec338 100644 --- a/tests/test_helper.bash +++ b/tests/test_helper.bash @@ -11,6 +11,7 @@ export PLUGIN_CORE_AVAILABLE_PATH="$PLUGIN_PATH" export MONGO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/fixtures" export PLUGIN_DATA_ROOT="$MONGO_ROOT" export PLUGIN_CONFIG_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/config" +export DOKKU_LIB_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/lib-root" if [[ "$(uname)" == "Darwin" ]]; then export PLUGN_URL="https://github.com/dokku/plugn/releases/download/v0.3.0/plugn_0.3.0_darwin_x86_64.tgz" else