From 10f6d00e04c9bf972a5093b509e4734865f64d23 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Thu, 12 Aug 2021 16:16:08 -0400 Subject: [PATCH 01/12] tests: add test to ensure herokuish respects the env vars during the release process --- tests/unit/app-json.bats | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/unit/app-json.bats b/tests/unit/app-json.bats index 39f406bd9..37ce23bec 100644 --- a/tests/unit/app-json.bats +++ b/tests/unit/app-json.bats @@ -66,6 +66,26 @@ teardown() { assert_success } +@test "(app-json) app.json herokuish release" { + run /bin/bash -c "dokku config:set --no-restart $TEST_APP SECRET_KEY=fjdkslafjdk" + echo "output: $output" + echo "status: $status" + assert_success + + run deploy_app python dokku@dokku.me:$TEST_APP add_requirements_txt + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "Executing release task from Procfile" + assert_output_contains "SECRET_KEY: fjdkslafjdk" + + run /bin/bash -c "curl $(dokku url $TEST_APP)/env" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains '"SECRET_KEY": "fjdkslafjdk"' +} + @test "(app-json) app.json cnb release" { run /bin/bash -c "dokku config:set --no-restart $TEST_APP DOKKU_CNB_EXPERIMENTAL=1 SECRET_KEY=fjdkslafjdk" echo "output: $output" From 7bf61b401fc4d8b49f01a920e1459e3a1015964b Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Thu, 12 Aug 2021 17:34:57 -0400 Subject: [PATCH 02/12] fix: call pre-deploy before deploy but after release The dokku_release command adds more "stuff" by virtue of calling builder-release (the herokuish builder injects env vars). This more closely matches previous order of operations. Closes #4737 --- plugins/common/functions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/common/functions b/plugins/common/functions index b7fe733cf..bb6bd1d7f 100755 --- a/plugins/common/functions +++ b/plugins/common/functions @@ -657,6 +657,7 @@ cmd-deploy() { verify_app_name "$APP" local DOKKU_SCHEDULER=$(get_app_scheduler "$APP") + plugn trigger pre-deploy "$APP" "$IMAGE_TAG" plugn trigger scheduler-deploy "$DOKKU_SCHEDULER" "$APP" "$IMAGE_TAG" } @@ -687,7 +688,6 @@ release_and_deploy() { local DOKKU_SKIP_DEPLOY=${DOKKU_APP_SKIP_DEPLOY:="$DOKKU_GLOBAL_SKIP_DEPLOY"} dokku_log_info1 "Releasing $APP..." - plugn trigger pre-deploy "$APP" "$IMAGE_TAG" dokku_release "$APP" "$IMAGE_SOURCE_TYPE" "$IMAGE_TAG" if [[ "$DOKKU_SKIP_DEPLOY" != "true" ]]; then From 620a36be821aa9522feb714b4aac221f21954900 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Thu, 12 Aug 2021 17:35:21 -0400 Subject: [PATCH 03/12] tests: enhance release tests to check global secrets --- tests/apps/python/release.py | 1 + tests/unit/app-json.bats | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/tests/apps/python/release.py b/tests/apps/python/release.py index afa731b5f..0d3a37e58 100644 --- a/tests/apps/python/release.py +++ b/tests/apps/python/release.py @@ -3,6 +3,7 @@ import os def main(): + print("GLOBAL_SECRET: {0}".format(os.getenv('GLOBAL_SECRET'))) print("SECRET_KEY: {0}".format(os.getenv('SECRET_KEY'))) diff --git a/tests/unit/app-json.bats b/tests/unit/app-json.bats index 37ce23bec..6d56d90e8 100644 --- a/tests/unit/app-json.bats +++ b/tests/unit/app-json.bats @@ -67,6 +67,7 @@ teardown() { } @test "(app-json) app.json herokuish release" { + run /bin/bash -c "dokku config:set --no-restart --global GLOBAL_SECRET=fjdkslafjdk" run /bin/bash -c "dokku config:set --no-restart $TEST_APP SECRET_KEY=fjdkslafjdk" echo "output: $output" echo "status: $status" @@ -83,10 +84,12 @@ teardown() { echo "output: $output" echo "status: $status" assert_success + assert_output_contains '"GLOBAL_SECRET": "fjdkslafjdk"' assert_output_contains '"SECRET_KEY": "fjdkslafjdk"' } @test "(app-json) app.json cnb release" { + run /bin/bash -c "dokku config:set --no-restart --global GLOBAL_SECRET=fjdkslafjdk" run /bin/bash -c "dokku config:set --no-restart $TEST_APP DOKKU_CNB_EXPERIMENTAL=1 SECRET_KEY=fjdkslafjdk" echo "output: $output" echo "status: $status" @@ -103,6 +106,7 @@ teardown() { echo "output: $output" echo "status: $status" assert_success + assert_output_contains '"GLOBAL_SECRET": "fjdkslafjdk"' assert_output_contains '"SECRET_KEY": "fjdkslafjdk"' } From c4985bca67e75b3b0e249a987af31427fa7a62bd Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Thu, 12 Aug 2021 19:44:49 -0400 Subject: [PATCH 04/12] fix: inject global env vars into cnb containers --- plugins/scheduler-docker-local/scheduler-deploy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scheduler-docker-local/scheduler-deploy b/plugins/scheduler-docker-local/scheduler-deploy index 3605794a6..1a878faad 100755 --- a/plugins/scheduler-docker-local/scheduler-deploy +++ b/plugins/scheduler-docker-local/scheduler-deploy @@ -228,7 +228,7 @@ fn-start-app-container() { declare -a __DOKKU_DOCKER_ARG_ARRAY eval "__DOKKU_DOCKER_ARG_ARRAY=($DOCKER_ARGS)" - eval "$(config_export app "$APP")" + eval "$(config_export app "$APP" --merged)" "$DOCKER_BIN" container create "${__DOKKU_DOCKER_ARG_ARRAY[@]}" } From 6c6e26712d7e58e52ef6d660d9f664cbd7895f7f Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Thu, 12 Aug 2021 21:11:11 -0400 Subject: [PATCH 05/12] refactor: move helper function to internal-functions --- plugins/scheduler-docker-local/internal-functions | 10 ++++++++++ plugins/scheduler-docker-local/scheduler-deploy | 12 +----------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/plugins/scheduler-docker-local/internal-functions b/plugins/scheduler-docker-local/internal-functions index d8355137a..889509c05 100755 --- a/plugins/scheduler-docker-local/internal-functions +++ b/plugins/scheduler-docker-local/internal-functions @@ -235,3 +235,13 @@ fn-scheduler-docker-local-register-retired() { echo "${APP} ${DOCKER_ID} ${DEAD_TIME}" >>"${DEAD_FILE}" fi } + +fn-scheduler-docker-local-start-app-container() { + declare desc="starts a single app container" + declare APP="$1" DOCKER_ARGS="$2" + + declare -a __DOKKU_DOCKER_ARG_ARRAY + eval "__DOKKU_DOCKER_ARG_ARRAY=($DOCKER_ARGS)" + eval "$(config_export app "$APP" --merged)" + "$DOCKER_BIN" container create "${__DOKKU_DOCKER_ARG_ARRAY[@]}" +} diff --git a/plugins/scheduler-docker-local/scheduler-deploy b/plugins/scheduler-docker-local/scheduler-deploy index 1a878faad..50c51f04d 100755 --- a/plugins/scheduler-docker-local/scheduler-deploy +++ b/plugins/scheduler-docker-local/scheduler-deploy @@ -115,7 +115,7 @@ trigger-scheduler-docker-local-scheduler-deploy() { DOCKER_ARGS+=" $IMAGE " DOCKER_ARGS+=" $START_CMD " - cid=$(fn-start-app-container "$DOCKER_ARGS") + cid=$(fn-scheduler-docker-local-start-app-container "$APP" "$DOCKER_ARGS") plugn trigger post-container-create "app" "$cid" "$APP" "deploy" "$PROC_TYPE" "$DOCKER_BIN" container start "$cid" >/dev/null || true @@ -222,14 +222,4 @@ fn-scheduler-docker-local-extract-start-cmd() { echo "$START_CMD" } -fn-start-app-container() { - declare desc="starts a single app container" - declare DOCKER_ARGS="$1" - - declare -a __DOKKU_DOCKER_ARG_ARRAY - eval "__DOKKU_DOCKER_ARG_ARRAY=($DOCKER_ARGS)" - eval "$(config_export app "$APP" --merged)" - "$DOCKER_BIN" container create "${__DOKKU_DOCKER_ARG_ARRAY[@]}" -} - trigger-scheduler-docker-local-scheduler-deploy "$@" From a825e2678c7ca4f484e0c360ea344338c572b90b Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Thu, 12 Aug 2021 21:12:01 -0400 Subject: [PATCH 06/12] fix: ensure env vars are injected for all run containers CNB containers would otherwise not have them injected. --- plugins/scheduler-docker-local/scheduler-run | 17 ++++--- tests/unit/run_1.bats | 51 +++++++++++++++++++- 2 files changed, 59 insertions(+), 9 deletions(-) diff --git a/plugins/scheduler-docker-local/scheduler-run b/plugins/scheduler-docker-local/scheduler-run index 2cbbb872c..27b99d9d3 100755 --- a/plugins/scheduler-docker-local/scheduler-run +++ b/plugins/scheduler-docker-local/scheduler-run @@ -3,6 +3,7 @@ set -eo pipefail [[ $DOKKU_TRACE ]] && set -x source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" source "$PLUGIN_AVAILABLE_PATH/config/functions" +source "$PLUGIN_AVAILABLE_PATH/scheduler-docker-local/internal-functions" trigger-scheduler-docker-local-scheduler-run() { declare desc="runs command in container based on app image" @@ -50,23 +51,21 @@ trigger-scheduler-docker-local-scheduler-run() { DOCKER_ARGS+=" --rm" fi has_tty && DOCKER_ARGS+=" --interactive --tty" - # the output of docker-args-run is possibly quoted/escaped so eval to normalize - declare -a DOCKER_ARGS_ARRAY - eval "DOCKER_ARGS_ARRAY=($DOCKER_ARGS)" for env_pair in "${RUN_ENV[@]}"; do - DOCKER_ARGS_ARRAY+=("--env=$env_pair") + DOCKER_ARGS+=" --env=$env_pair" done if [[ -n "$DOKKU_GLOBAL_FLAGS" ]]; then read -ra flags <<<"$DOKKU_GLOBAL_FLAGS" for flag in "${flags[@]}"; do if [[ "$flag" =~ ^--label.* ]]; then - DOCKER_ARGS_ARRAY+=("$flag") + DOCKER_ARGS+=" $flag" fi done fi [[ "$IMAGE_SOURCE_TYPE" == "herokuish" ]] && local EXEC_CMD="/exec" + is_image_cnb_based "$IMAGE" && EXEC_CMD="" POTENTIAL_PROCFILE_KEY="$1" PROC_CMD=$(plugn trigger procfile-get-command "$APP" "$POTENTIAL_PROCFILE_KEY" "5000" 2>/dev/null || echo '') @@ -76,8 +75,12 @@ trigger-scheduler-docker-local-scheduler-run() { set -- "$PROC_CMD" "${@:2}" fi - # shellcheck disable=SC2086 - CONTAINER_ID="$("$DOCKER_BIN" container create --label=com.dokku.container-type=$PROCESS_TYPE "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS "${DOCKER_ARGS_ARRAY[@]}" $IMAGE $EXEC_CMD "$@")" + DOCKER_ARGS+=" --label=com.dokku.container-type=$PROCESS_TYPE ${DOCKER_RUN_LABEL_ARGS[@]} $DOKKU_GLOBAL_RUN_ARGS" + DOCKER_ARGS+=" $IMAGE " + DOCKER_ARGS+=" $EXEC_CMD " + DOCKER_ARGS+=" $@" + + CONTAINER_ID=$(fn-scheduler-docker-local-start-app-container "$APP" "$DOCKER_ARGS") plugn trigger post-container-create "app" "$CONTAINER_ID" "$APP" "run" declare -a DOCKER_START_ARGS_ARRAY diff --git a/tests/unit/run_1.bats b/tests/unit/run_1.bats index 2b16b4943..9491c064e 100644 --- a/tests/unit/run_1.bats +++ b/tests/unit/run_1.bats @@ -27,11 +27,58 @@ teardown() { assert_success } -@test "(run) run (with --env / -e)" { - deploy_app +@test "(run) run herokuish (with --env / -e)" { + run /bin/bash -c "dokku config:set --no-restart --global GLOBAL_SECRET=fjdkslafjdk" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku config:set --no-restart $TEST_APP SECRET_KEY=fjdkslafjdk" + echo "output: $output" + echo "status: $status" + assert_success + + run deploy_app python dokku@dokku.me:$TEST_APP add_requirements_txt + echo "output: $output" + echo "status: $status" + assert_success + run /bin/bash -c "dokku run --env TEST=testvalue -e TEST2=testvalue2 $TEST_APP env | grep -E '^TEST=testvalue'" echo "output: $output" echo "status: $status" + assert_success + + run /bin/bash -c "dokku run --env TEST=testvalue -e TEST2=testvalue2 $TEST_APP env | grep -E '^TEST2=testvalue2'" + echo "output: $output" + echo "status: $status" + assert_success +} + +@test "(run) run cnb (with --env / -e)" { + run /bin/bash -c "dokku config:set --no-restart --global GLOBAL_SECRET=fjdkslafjdk" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku config:set --no-restart $TEST_APP DOKKU_CNB_EXPERIMENTAL=1 SECRET_KEY=fjdkslafjdk" + echo "output: $output" + echo "status: $status" + assert_success + + run deploy_app python dokku@dokku.me:$TEST_APP add_requirements_txt + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku run --env TEST=testvalue -e TEST2=testvalue2 $TEST_APP env" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku run --env TEST=testvalue -e TEST2=testvalue2 $TEST_APP env | grep -E '^TEST=testvalue'" + echo "output: $output" + echo "status: $status" + assert_success run /bin/bash -c "dokku run --env TEST=testvalue -e TEST2=testvalue2 $TEST_APP env | grep -E '^TEST2=testvalue2'" echo "output: $output" From 997cc4f46646467451387bd0a3e3b288406d7517 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Thu, 12 Aug 2021 21:12:15 -0400 Subject: [PATCH 07/12] tests: shore up test checks --- tests/unit/app-json.bats | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/unit/app-json.bats b/tests/unit/app-json.bats index 6d56d90e8..412fbe020 100644 --- a/tests/unit/app-json.bats +++ b/tests/unit/app-json.bats @@ -68,6 +68,10 @@ teardown() { @test "(app-json) app.json herokuish release" { run /bin/bash -c "dokku config:set --no-restart --global GLOBAL_SECRET=fjdkslafjdk" + echo "output: $output" + echo "status: $status" + assert_success + run /bin/bash -c "dokku config:set --no-restart $TEST_APP SECRET_KEY=fjdkslafjdk" echo "output: $output" echo "status: $status" @@ -90,6 +94,10 @@ teardown() { @test "(app-json) app.json cnb release" { run /bin/bash -c "dokku config:set --no-restart --global GLOBAL_SECRET=fjdkslafjdk" + echo "output: $output" + echo "status: $status" + assert_success + run /bin/bash -c "dokku config:set --no-restart $TEST_APP DOKKU_CNB_EXPERIMENTAL=1 SECRET_KEY=fjdkslafjdk" echo "output: $output" echo "status: $status" From 775e78bd0855a6fa14d262b8bee35e15949199d4 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Thu, 12 Aug 2021 21:15:15 -0400 Subject: [PATCH 08/12] fix: disable some shellcheck rules --- plugins/scheduler-docker-local/scheduler-run | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/scheduler-docker-local/scheduler-run b/plugins/scheduler-docker-local/scheduler-run index 27b99d9d3..eb0239834 100755 --- a/plugins/scheduler-docker-local/scheduler-run +++ b/plugins/scheduler-docker-local/scheduler-run @@ -75,9 +75,11 @@ trigger-scheduler-docker-local-scheduler-run() { set -- "$PROC_CMD" "${@:2}" fi + # shellcheck disable=SC2124 DOCKER_ARGS+=" --label=com.dokku.container-type=$PROCESS_TYPE ${DOCKER_RUN_LABEL_ARGS[@]} $DOKKU_GLOBAL_RUN_ARGS" DOCKER_ARGS+=" $IMAGE " DOCKER_ARGS+=" $EXEC_CMD " + # shellcheck disable=SC2124 DOCKER_ARGS+=" $@" CONTAINER_ID=$(fn-scheduler-docker-local-start-app-container "$APP" "$DOCKER_ARGS") From d9204083f7c8653777e25e866511f07f4e171335 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Thu, 12 Aug 2021 22:07:53 -0400 Subject: [PATCH 09/12] fix: install pack Also move the installation into a helper method. --- tests/unit/app-json.bats | 6 +----- tests/unit/builder-pack.bats | 6 +----- tests/unit/ps-cnb.bats | 6 +----- tests/unit/test_helper.bash | 8 ++++++++ 4 files changed, 11 insertions(+), 15 deletions(-) diff --git a/tests/unit/app-json.bats b/tests/unit/app-json.bats index 412fbe020..210b8bde0 100644 --- a/tests/unit/app-json.bats +++ b/tests/unit/app-json.bats @@ -2,11 +2,7 @@ load test_helper setup_file() { - if ! command -v "pack" &>/dev/null; then - add-apt-repository --yes ppa:cncf-buildpacks/pack-cli - apt-get update - apt-get --yes install pack-cli - fi + install_pack } setup() { diff --git a/tests/unit/builder-pack.bats b/tests/unit/builder-pack.bats index 3835fcd03..46e13eeb5 100644 --- a/tests/unit/builder-pack.bats +++ b/tests/unit/builder-pack.bats @@ -3,11 +3,7 @@ load test_helper setup_file() { - if ! command -v "pack" &>/dev/null; then - add-apt-repository --yes ppa:cncf-buildpacks/pack-cli - apt-get update - apt-get --yes install pack-cli - fi + install_pack } setup() { diff --git a/tests/unit/ps-cnb.bats b/tests/unit/ps-cnb.bats index 7d98ba0a6..5abbbb1bd 100644 --- a/tests/unit/ps-cnb.bats +++ b/tests/unit/ps-cnb.bats @@ -3,11 +3,7 @@ load test_helper setup_file() { - if ! command -v "pack" &>/dev/null; then - add-apt-repository --yes ppa:cncf-buildpacks/pack-cli - apt-get update - apt-get --yes install pack-cli - fi + install_pack } setup() { diff --git a/tests/unit/test_helper.bash b/tests/unit/test_helper.bash index 69ac92f55..254c2d0c0 100644 --- a/tests/unit/test_helper.bash +++ b/tests/unit/test_helper.bash @@ -577,3 +577,11 @@ detach_delete_network() { detach_network "$NETWORK_NAME" delete_network "$NETWORK_NAME" } + +install_pack() { + if ! command -v "pack" &>/dev/null; then + add-apt-repository --yes ppa:cncf-buildpacks/pack-cli + apt-get update + apt-get --yes install pack-cli + fi +} From faf53aa479429c3529442d14d2e5ef4efbabd06f Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Thu, 12 Aug 2021 22:59:33 -0400 Subject: [PATCH 10/12] fix: install pack for run tests --- tests/unit/run_1.bats | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/unit/run_1.bats b/tests/unit/run_1.bats index 9491c064e..d157ef4f0 100644 --- a/tests/unit/run_1.bats +++ b/tests/unit/run_1.bats @@ -2,6 +2,10 @@ load test_helper +setup_file() { + install_pack +} + setup() { global_setup create_app From 257abfaee8965dc129602b4ecf8e6c0d6fcbd153 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Fri, 13 Aug 2021 01:42:11 -0400 Subject: [PATCH 11/12] refactor: move pre-deploy call to post-release-builder Some of the hooks should happen before we push images out... --- plugins/common/functions | 1 - plugins/registry/triggers.go | 10 ++++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/plugins/common/functions b/plugins/common/functions index bb6bd1d7f..a4e354fb3 100755 --- a/plugins/common/functions +++ b/plugins/common/functions @@ -657,7 +657,6 @@ cmd-deploy() { verify_app_name "$APP" local DOKKU_SCHEDULER=$(get_app_scheduler "$APP") - plugn trigger pre-deploy "$APP" "$IMAGE_TAG" plugn trigger scheduler-deploy "$DOKKU_SCHEDULER" "$APP" "$IMAGE_TAG" } diff --git a/plugins/registry/triggers.go b/plugins/registry/triggers.go index 547955150..4699d04ee 100644 --- a/plugins/registry/triggers.go +++ b/plugins/registry/triggers.go @@ -61,6 +61,12 @@ func TriggerPostReleaseBuilder(appName string, image string) error { computedImageRepo := reportComputedImageRepo(appName) newImage := strings.Replace(image, imageRepo+":", computedImageRepo+":", 1) + parts := strings.Split(newImage, ":") + imageTag := parts[len(parts)-1] + if err := common.PlugnTrigger("pre-deploy", []string{appName, imageTag}...); err != nil { + return err + } + if computedImageRepo != imageRepo { if !dockerTag(imageID, newImage) { // TODO: better error @@ -73,10 +79,10 @@ func TriggerPostReleaseBuilder(appName string, image string) error { } common.LogInfo1("Pushing image to registry") - imageTag, err := incrementTagVersion(appName) + newTag, err := incrementTagVersion(appName) if err != nil { return err } - return pushToRegistry(appName, imageTag, imageID, computedImageRepo) + return pushToRegistry(appName, newTag, imageID, computedImageRepo) } From 8c42e85fccb5711267d03166b3fd3c4208fd6efe Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Sat, 14 Aug 2021 01:23:30 -0400 Subject: [PATCH 12/12] fix: move pre-deploy trigger to before image retagging --- plugins/registry/triggers.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/registry/triggers.go b/plugins/registry/triggers.go index 4699d04ee..7167c8421 100644 --- a/plugins/registry/triggers.go +++ b/plugins/registry/triggers.go @@ -56,17 +56,17 @@ func TriggerPostDelete(appName string) error { // TriggerPostReleaseBuilder pushes the image to the remote registry func TriggerPostReleaseBuilder(appName string, image string) error { - imageID, _ := common.DockerInspect(image, "{{ .Id }}") - imageRepo := common.GetAppImageRepo(appName) - computedImageRepo := reportComputedImageRepo(appName) - newImage := strings.Replace(image, imageRepo+":", computedImageRepo+":", 1) - - parts := strings.Split(newImage, ":") + parts := strings.Split(image, ":") imageTag := parts[len(parts)-1] if err := common.PlugnTrigger("pre-deploy", []string{appName, imageTag}...); err != nil { return err } + imageID, _ := common.DockerInspect(image, "{{ .Id }}") + imageRepo := common.GetAppImageRepo(appName) + computedImageRepo := reportComputedImageRepo(appName) + newImage := strings.Replace(image, imageRepo+":", computedImageRepo+":", 1) + if computedImageRepo != imageRepo { if !dockerTag(imageID, newImage) { // TODO: better error