diff --git a/docs/development/plugin-triggers.md b/docs/development/plugin-triggers.md index c70074fe2..04014609a 100644 --- a/docs/development/plugin-triggers.md +++ b/docs/development/plugin-triggers.md @@ -177,6 +177,23 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x echo 'not-latest' ``` +### `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` +- Invoked by: `internal function dokku_deploy_cmd() (deploy phase)` +- Arguments: `$APP` +- Example: + +```shell +#!/usr/bin/env bash + +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +APP="$1" +# change the repo from dokku/APP to dokkupaas/APP +echo "dokkupaas/$APP" +``` + ### `deployed-app-repository` - Description: Used to manage the remote repository of the image being deployed. @@ -211,7 +228,7 @@ cache-bust-build-arg() { local APP="$1" IMAGE_SOURCE_TYPE="$2" local output="" - if [[ "$IMAGE_SOURCE_TYPE" == "dockerfile" ]]; then + if [[ "$IMAGE_SOURCE_TYPE" == "dockerfile" ]]; then output=" --build-arg CACHEBUST=$(date +%s)" fi echo -n "$STDIN$output" diff --git a/plugins/20_events/deployed-app-image-repo b/plugins/20_events/deployed-app-image-repo new file mode 120000 index 000000000..5178a749f --- /dev/null +++ b/plugins/20_events/deployed-app-image-repo @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/common/functions b/plugins/common/functions index 764fd9c15..09543e77e 100755 --- a/plugins/common/functions +++ b/plugins/common/functions @@ -172,14 +172,20 @@ get_deploying_app_image_name() { local APP="$1"; local IMAGE_TAG="$2"; [[ -z "$APP" ]] && dokku_log_fail "(get_app_image_name) APP must not be null" + local IMAGE_REPO="" local IMAGE_REMOTE_REPOSITORY=$(plugn trigger deployed-app-repository "$APP") local NEW_IMAGE_TAG=$(plugn trigger deployed-app-image-tag "$APP") + local NEW_IMAGE_REPO=$(plugn trigger deployed-app-image-repo "$APP") if [[ -n "$NEW_IMAGE_TAG" ]]; then IMAGE_TAG="$NEW_IMAGE_TAG" fi - local IMAGE=$(get_app_image_name "$APP" "$IMAGE_TAG") + if [[ -n "$NEW_IMAGE_REPO" ]]; then + IMAGE_REPO="$NEW_IMAGE_REPO" + fi + + local IMAGE=$(get_app_image_name "$APP" "$IMAGE_TAG" "$IMAGE_REPO") if [[ -n "$IMAGE_REMOTE_REPOSITORY" ]]; then IMAGE="${IMAGE_REMOTE_REPOSITORY}${IMAGE}" fi @@ -188,9 +194,13 @@ get_deploying_app_image_name() { get_app_image_name() { declare desc="return image identifier for a given app, tag tuple. validate if tag is presented" - local APP="$1"; local IMAGE_TAG="$2"; local IMAGE_REPO=$(get_app_image_repo "$APP") + local APP="$1"; local IMAGE_TAG="$2"; IMAGE_REPO="$3" [[ -z "$APP" ]] && dokku_log_fail "(get_app_image_name) APP must not be null" + if [[ -z "$IMAGE_REPO" ]]; then + IMAGE_REPO=$(get_app_image_repo "$APP") + fi + if [[ -n "$IMAGE_TAG" ]]; then local IMAGE="$IMAGE_REPO:$IMAGE_TAG" verify_image "$IMAGE" || dokku_log_fail "app image ($IMAGE) not found"