From c9d9750afef590ef26cc090c22f0f568b6879cc0 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Sat, 3 Mar 2018 18:16:50 -0500 Subject: [PATCH] feat: add a new plugin trigger for detecting what the current deployment method is This is currently used solely for reporting. Closes #3047 --- docs/deployment/application-management.md | 4 ++- docs/development/plugin-triggers.md | 31 +++++++++++++++++++++-- plugins/20_events/bind-external-ip | 5 ---- plugins/20_events/deploy-method | 1 + plugins/apps/subcommands/report | 1 + plugins/git/deploy-method | 21 +++++++++++++++ plugins/tar/deploy-method | 21 +++++++++++++++ 7 files changed, 76 insertions(+), 8 deletions(-) delete mode 100755 plugins/20_events/bind-external-ip create mode 120000 plugins/20_events/deploy-method create mode 100755 plugins/git/deploy-method create mode 100755 plugins/tar/deploy-method diff --git a/docs/deployment/application-management.md b/docs/deployment/application-management.md index 6caa19a58..bfbacd755 100644 --- a/docs/deployment/application-management.md +++ b/docs/deployment/application-management.md @@ -169,12 +169,14 @@ dokku apps:report ``` =====> node-js-app App dir: /home/dokku/node-js-app - Git sha: dbddc3f + Git sha: dbddc3f + Deploy method: git =====> python-sample not deployed =====> ruby-sample App dir: /home/dokku/ruby-sample Git sha: a2d477c + Deploy method: git ``` You can run the command for a specific app also. diff --git a/docs/development/plugin-triggers.md b/docs/development/plugin-triggers.md index 6bcc83697..ef24f68e6 100644 --- a/docs/development/plugin-triggers.md +++ b/docs/development/plugin-triggers.md @@ -122,7 +122,7 @@ curl "http://httpstat.us/200" ### `dependencies` -- Description: Used to install system-level dependencies. Invoked by `plugin:install-dependencies`. +- Description: Used to install system-level dependencies. - Invoked by: `dokku plugin:install-dependencies` - Arguments: None - Example: @@ -147,6 +147,33 @@ case "$DOKKU_DISTRO" in esac ``` +### `deploy-method` + +- Description: Used for reporting what the current detected deployment method is. The first detected method should always win. +- Invoked by: `dokku apps:report` +- Arguments: `$APP` +- Example: + +```shell +#!/usr/bin/env bash +# Checks if the app should be deployed via git + +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +APP="$1" +STDIN=$(cat) + +# bail if another method is detected +if [[ -n "$STDIN" ]]; then + echo "$STDIN" + return +fi + +if [[ -d "$DOKKU_ROOT/$APP/refs" ]]; then + echo "git" +fi +``` + ### `deployed-app-image-repo` - Description: Used to manage the full repo of the image being deployed. Useful for deploying from an external registry where the repository name is not `dokku/$APP` @@ -1155,7 +1182,7 @@ sshcommand acl-add dokku NAME < $PATH_TO_SSH_KEY Note that the `NAME` value is set at the first ssh key match. If an ssh key is set in the `/home/dokku/.ssh/authorized_keys` multiple times, the first match will decide the value. - Description: Allows you to deny access to a Dokku command by either ssh user or associated ssh-command NAME user. -- Invoked by `dokku` +- Invoked by: `dokku` - Arguments: `$SSH_USER $SSH_NAME $DOKKU_COMMAND` - Example: diff --git a/plugins/20_events/bind-external-ip b/plugins/20_events/bind-external-ip deleted file mode 100755 index 3c099ee21..000000000 --- a/plugins/20_events/bind-external-ip +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash -set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x -source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" - -[[ ! "$DOKKU_EVENTS" ]] || dokku_log_plugn_trigger_call "$(basename "$0")" "$@" diff --git a/plugins/20_events/deploy-method b/plugins/20_events/deploy-method new file mode 120000 index 000000000..5178a749f --- /dev/null +++ b/plugins/20_events/deploy-method @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/apps/subcommands/report b/plugins/apps/subcommands/report index ce47d7666..7bf3b0d54 100755 --- a/plugins/apps/subcommands/report +++ b/plugins/apps/subcommands/report @@ -15,6 +15,7 @@ report_single_app() { local flag_map=( "--app-dir: $APP_DIR" "--git-sha: $(GIT_DIR="$APP_DIR" git rev-parse --short HEAD 2> /dev/null || false)" + "--deploy-method: $(plugn trigger deploy-method "$APP")" ) if [[ -z "$INFO_FLAG" ]]; then diff --git a/plugins/git/deploy-method b/plugins/git/deploy-method new file mode 100755 index 000000000..ffac0e48c --- /dev/null +++ b/plugins/git/deploy-method @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +git_deploy_method() { + declare desc="git deploy-method plugin trigger" + declare trigger="git_deploy_method" + declare APP="$1" + local STDIN=$(cat) + + # bail if another method is detected + if [[ -n "$STDIN" ]]; then + echo "$STDIN" + return + fi + + if [[ -d "$DOKKU_ROOT/$APP/refs" ]]; then + echo "git" + fi +} + +git_deploy_method "$@" diff --git a/plugins/tar/deploy-method b/plugins/tar/deploy-method new file mode 100755 index 000000000..a48e6a2be --- /dev/null +++ b/plugins/tar/deploy-method @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +tar_deploy_method() { + declare desc="tar deploy-method plugin trigger" + declare trigger="tar_deploy_method" + declare APP="$1" + local STDIN=$(cat) + + # bail if another method is detected + if [[ -n "$STDIN" ]]; then + echo "$STDIN" + return + fi + + if [[ -f "$DOKKU_ROOT/$APP/src.tar" ]]; then + echo "tar" + fi +} + +tar_deploy_method "$@"