diff --git a/docs/development/plugin-triggers.md b/docs/development/plugin-triggers.md index 5b583b68c..e63fff4ef 100644 --- a/docs/development/plugin-triggers.md +++ b/docs/development/plugin-triggers.md @@ -68,6 +68,66 @@ case "$URL_TYPE" in esac ``` +### `builder-build` + +- Description: Triggers the artifact build process +- Invoked by: `dokku deploy` +- Arguments: `$BUILDER_TYPE` `$APP` `$SOURCECODE_WORK_DIR` +- Example: + +```shell +#!/usr/bin/env bash + +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +# TODO +``` + +### `builder-create-dokku-image` + +- Description: Allows modification of the configured dokku-image +- Invoked by: `dokku deploy` +- Arguments: `$BUILDER_TYPE` `$APP` `$SOURCECODE_WORK_DIR` `$DOKKU_IMAGE` +- Example: + +```shell +#!/usr/bin/env bash + +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +# TODO +``` + +### `builder-dokku-image` + +- Description: Allows modification of the used dokku-image. +- Invoked by: `dokku deploy` +- Arguments: `$BUILDER_TYPE` `$APP` `$SOURCECODE_WORK_DIR` `$DOKKU_IMAGE` +- Example: + +```shell +#!/usr/bin/env bash + +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +# TODO +``` + +### `builder-release` + +- Description: Triggers the artifact release process +- Invoked by: `dokku deploy` +- Arguments: `$BUILDER_TYPE` `$APP` `$IMAGE_TAG` +- Example: + +```shell +#!/usr/bin/env bash + +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +# TODO +``` + ### `check-deploy` - Description: Allows you to run checks on a deploy before Dokku allows the container to handle requests. diff --git a/plugins/20_events/builder-build b/plugins/20_events/builder-build new file mode 120000 index 000000000..5178a749f --- /dev/null +++ b/plugins/20_events/builder-build @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/20_events/builder-release b/plugins/20_events/builder-release new file mode 120000 index 000000000..5178a749f --- /dev/null +++ b/plugins/20_events/builder-release @@ -0,0 +1 @@ +hook \ No newline at end of file diff --git a/plugins/build-env/plugin.toml b/plugins/build-env/plugin.toml deleted file mode 100644 index 2513dd959..000000000 --- a/plugins/build-env/plugin.toml +++ /dev/null @@ -1,4 +0,0 @@ -[plugin] -description = "dokku core build-env plugin" -version = "0.17.9" -[plugin.config] diff --git a/plugins/builder-dockerfile/builder-build b/plugins/builder-dockerfile/builder-build new file mode 100755 index 000000000..79563ac31 --- /dev/null +++ b/plugins/builder-dockerfile/builder-build @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_AVAILABLE_PATH/config/functions" + +trigger-builder-build-builder-dockerfile() { + declare desc="builder-dockerfile builder-build plugin trigger" + declare trigger="trigger-builder-build-builder-dockerfile" + declare BUILDER_TYPE="$1" APP="$2" SOURCECODE_WORK_DIR="$3" + + if [[ "$BUILDER_TYPE" != "dockerfile" ]]; then + return + fi + + local IMAGE=$(get_app_image_name "$APP") + local DOCKER_BUILD_LABEL_ARGS="--label=org.label-schema.schema-version=1.0 --label=org.label-schema.vendor=dokku --label=com.dokku.app-name=$APP" + + pushd "$SOURCECODE_WORK_DIR" &>/dev/null + + # extract first port from Dockerfile + local DOCKERFILE_PORTS=$(get_dockerfile_exposed_ports Dockerfile) + [[ -n "$DOCKERFILE_PORTS" ]] && config_set --no-restart "$APP" DOKKU_DOCKERFILE_PORTS="$DOCKERFILE_PORTS" + + # extract ENTRYPOINT/CMD from Dockerfile + local DOCKERFILE_ENTRYPOINT=$(extract_directive_from_dockerfile Dockerfile ENTRYPOINT) + [[ -n "$DOCKERFILE_ENTRYPOINT" ]] && config_set --no-restart "$APP" DOKKU_DOCKERFILE_ENTRYPOINT="$DOCKERFILE_ENTRYPOINT" + local DOCKERFILE_CMD=$(extract_directive_from_dockerfile Dockerfile CMD) + [[ -n "$DOCKERFILE_CMD" ]] && config_set --no-restart "$APP" DOKKU_DOCKERFILE_CMD="$DOCKERFILE_CMD" + plugn trigger pre-build-dockerfile "$APP" + + [[ "$DOKKU_DOCKERFILE_CACHE_BUILD" == "false" ]] && DOKKU_DOCKER_BUILD_OPTS="$DOKKU_DOCKER_BUILD_OPTS --no-cache" + local DOCKER_ARGS=$(: | plugn trigger docker-args-build "$APP" "$BUILDER_TYPE") + DOCKER_ARGS+=$(: | plugn trigger docker-args-process-build "$APP" "$IMAGE_TAG" "$BUILDER_TYPE") + + # strip --volume and -v args from DOCKER_ARGS + local DOCKER_ARGS=$(sed -e "s/--volume=[[:graph:]]\+[[:blank:]]\?//g" -e "s/-v[[:blank:]]\?[[:graph:]]\+[[:blank:]]\?//g" <<<"$DOCKER_ARGS") + declare -a ARG_ARRAY + eval "ARG_ARRAY=($DOCKER_ARGS)" + + "$DOCKER_BIN" build "${DOCKER_BUILD_LABEL_ARGS[@]}" $DOKKU_GLOBAL_BUILD_ARGS "${ARG_ARRAY[@]}" "${DOKKU_DOCKER_BUILD_OPTS[@]}" -t $IMAGE . + + plugn trigger post-build-dockerfile "$APP" +} + +trigger-builder-build-builder-dockerfile "$@" diff --git a/plugins/builder-dockerfile/builder-release b/plugins/builder-dockerfile/builder-release new file mode 100755 index 000000000..0d83ce05a --- /dev/null +++ b/plugins/builder-dockerfile/builder-release @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x + +trigger-builder-release-builder-dockerfile() { + declare desc="builder-dockerfile builder-release plugin trigger" + declare trigger="trigger-builder-release-builder-dockerfile" + declare BUILDER_TYPE="$1" APP="$2" IMAGE_TAG="$3" + + if [[ "$BUILDER_TYPE" != "herokuish" ]]; then + return + fi + + # buildstep plugins don't necessarily make sense for dockerfiles. call the new breed!!! + plugn trigger pre-release-dockerfile "$APP" "$IMAGE_TAG" + plugn trigger post-release-dockerfile "$APP" "$IMAGE_TAG" +} + +trigger-builder-release-builder-dockerfile "$@" diff --git a/plugins/builder-dockerfile/plugin.toml b/plugins/builder-dockerfile/plugin.toml new file mode 100644 index 000000000..ebc97c6b2 --- /dev/null +++ b/plugins/builder-dockerfile/plugin.toml @@ -0,0 +1,4 @@ +[plugin] +description = "dokku core builder-dockerfile plugin" +version = "0.17.9" +[plugin.config] diff --git a/plugins/builder-herokuish/builder-build b/plugins/builder-herokuish/builder-build new file mode 100755 index 000000000..61194b8a6 --- /dev/null +++ b/plugins/builder-herokuish/builder-build @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_AVAILABLE_PATH/config/functions" + +trigger-builder-build-builder-herokuish() { + declare desc="builder-herokuish builder-build plugin trigger" + declare trigger="trigger-builder-build-builder-herokuish" + declare BUILDER_TYPE="$1" APP="$2" SOURCECODE_WORK_DIR="$3" + + if [[ "$BUILDER_TYPE" != "herokuish" ]]; then + return + fi + + local IMAGE=$(get_app_image_name "$APP") + local DOKKU_APP_CACHE_DIR="$DOKKU_ROOT/$APP/cache" + local DOKKU_APP_HOST_CACHE_DIR="$DOKKU_HOST_ROOT/$APP/cache" + local DOCKER_COMMIT_LABEL_ARGS=("--change" "LABEL org.label-schema.schema-version=1.0" "--change" "LABEL org.label-schema.vendor=dokku" "--change" "LABEL com.dokku.app-name=$APP") + local DOCKER_RUN_LABEL_ARGS="--label=com.dokku.app-name=$APP" + local CID + + pushd "$SOURCECODE_WORK_DIR" &>/dev/null + + eval "$(config_export app "$APP")" + + DOKKU_IMAGE="$(config_get "$APP" DOKKU_IMAGE || echo "$DOKKU_IMAGE")" + plugn trigger builder-create-dokku-image "$BUILDER_TYPE" "$APP" "$SOURCECODE_WORK_DIR" "$DOKKU_IMAGE" + NEW_DOKKU_IMAGE=$(plugn trigger builder-dokku-image "$BUILDER_TYPE" "$APP" "$SOURCECODE_WORK_DIR" "$DOKKU_IMAGE") + [[ -n "$NEW_DOKKU_IMAGE" ]] && DOKKU_IMAGE="$NEW_DOKKU_IMAGE" + + CID=$(tar -c . | "$DOCKER_BIN" run "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS -i -a stdin "$DOKKU_IMAGE" /bin/bash -c "mkdir -p /app && tar -xC /app") + test "$("$DOCKER_BIN" wait "$CID")" -eq 0 + + "$DOCKER_BIN" commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" "$CID" "$IMAGE" >/dev/null + [[ -d $DOKKU_APP_CACHE_DIR ]] || mkdir -p "$DOKKU_APP_CACHE_DIR" + plugn trigger pre-build-buildpack "$APP" + + local DOCKER_ARGS=$(: | plugn trigger docker-args-build "$APP" "$BUILDER_TYPE") + [[ "$DOKKU_TRACE" ]] && DOCKER_ARGS+=" -e TRACE=true " + DOCKER_ARGS+=$(: | plugn trigger docker-args-process-build "$APP" "$IMAGE_TAG" "$BUILDER_TYPE") + + declare -a ARG_ARRAY + eval "ARG_ARRAY=($DOCKER_ARGS)" + # shellcheck disable=SC2086 + CID=$("$DOCKER_BIN" run "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS -d -v $DOKKU_APP_HOST_CACHE_DIR:/cache -e CACHE_PATH=/cache "${ARG_ARRAY[@]}" $IMAGE /build) + "$DOCKER_BIN" attach "$CID" + test "$("$DOCKER_BIN" wait "$CID")" -eq 0 + + "$DOCKER_BIN" commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" "$CID" "$IMAGE" >/dev/null + + plugn trigger post-build-buildpack "$APP" +} + +trigger-builder-build-builder-herokuish "$@" diff --git a/plugins/builder-herokuish/builder-release b/plugins/builder-herokuish/builder-release new file mode 100755 index 000000000..555359e97 --- /dev/null +++ b/plugins/builder-herokuish/builder-release @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_AVAILABLE_PATH/config/functions" + +trigger-builder-release-builder-herokuish() { + declare desc="builder-herokuish builder-release plugin trigger" + declare trigger="trigger-builder-release-builder-herokuish" + declare BUILDER_TYPE="$1" APP="$2" IMAGE_TAG="$3" + + if [[ "$BUILDER_TYPE" != "herokuish" ]]; then + return + fi + + local CID + local IMAGE=$(get_app_image_name "$APP" "$IMAGE_TAG") + local DOCKER_COMMIT_LABEL_ARGS=("--change" "LABEL org.label-schema.schema-version=1.0" "--change" "LABEL org.label-schema.vendor=dokku" "--change" "LABEL com.dokku.app-name=$APP") + local DOCKER_RUN_LABEL_ARGS="--label=com.dokku.app-name=$APP" + + plugn trigger pre-release-buildpack "$APP" "$IMAGE_TAG" + if [[ -n $(config_export global) ]]; then + CID=$(config_export global | "$DOCKER_BIN" run "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS -i -a stdin "$IMAGE" /bin/bash -c "mkdir -p /app/.profile.d && cat > /app/.profile.d/00-global-env.sh") + test "$("$DOCKER_BIN" wait "$CID")" -eq 0 + + "$DOCKER_BIN" commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" "$CID" "$IMAGE" >/dev/null + fi + if [[ -n $(config_export app "$APP") ]]; then + CID=$(config_export app "$APP" | "$DOCKER_BIN" run "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS -i -a stdin "$IMAGE" /bin/bash -c "mkdir -p /app/.profile.d && cat > /app/.profile.d/01-app-env.sh") + test "$("$DOCKER_BIN" wait "$CID")" -eq 0 + + "$DOCKER_BIN" commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" "$CID" "$IMAGE" >/dev/null + fi + plugn trigger post-release-buildpack "$APP" "$IMAGE_TAG" +} + +trigger-builder-release-builder-herokuish "$@" diff --git a/plugins/00_dokku-standard/docker-args-build b/plugins/builder-herokuish/docker-args-build similarity index 73% rename from plugins/00_dokku-standard/docker-args-build rename to plugins/builder-herokuish/docker-args-build index 5d2a59924..e207d266a 100755 --- a/plugins/00_dokku-standard/docker-args-build +++ b/plugins/builder-herokuish/docker-args-build @@ -3,7 +3,9 @@ set -eo pipefail [[ $DOKKU_TRACE ]] && set -x source "$PLUGIN_AVAILABLE_PATH/config/functions" -app_user_docker_args() { +trigger-docker-args-builder-herokuish() { + declare desc="builder-herokuish docker-args plugin trigger" + declare trigger="trigger-docker-args-builder-herokuish" local APP="$1" local STDIN local DOKKU_APP_TYPE @@ -23,4 +25,4 @@ app_user_docker_args() { echo -n "$docker_args" } -app_user_docker_args "$@" +trigger-docker-args-builder-herokuish "$@" diff --git a/plugins/00_dokku-standard/docker-args-deploy b/plugins/builder-herokuish/docker-args-deploy similarity index 100% rename from plugins/00_dokku-standard/docker-args-deploy rename to plugins/builder-herokuish/docker-args-deploy diff --git a/plugins/00_dokku-standard/docker-args-run b/plugins/builder-herokuish/docker-args-run similarity index 100% rename from plugins/00_dokku-standard/docker-args-run rename to plugins/builder-herokuish/docker-args-run diff --git a/plugins/builder-herokuish/plugin.toml b/plugins/builder-herokuish/plugin.toml new file mode 100644 index 000000000..3c5314d64 --- /dev/null +++ b/plugins/builder-herokuish/plugin.toml @@ -0,0 +1,4 @@ +[plugin] +description = "dokku core builder-herokuish plugin" +version = "0.17.9" +[plugin.config] diff --git a/plugins/build-env/pre-build-buildpack b/plugins/builder-herokuish/pre-build-buildpack similarity index 52% rename from plugins/build-env/pre-build-buildpack rename to plugins/builder-herokuish/pre-build-buildpack index 8ca2ed9d7..2bce0e273 100755 --- a/plugins/build-env/pre-build-buildpack +++ b/plugins/builder-herokuish/pre-build-buildpack @@ -4,11 +4,11 @@ set -eo pipefail source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" source "$PLUGIN_AVAILABLE_PATH/config/functions" -build_env_pre_build_buildpack() { - declare desc="build-env pre-build-buildpack plugin trigger" - local trigger="build_env_pre_build_buildpack" - local APP="$1" - local IMAGE id +trigger-pre-build-buildpack-builder-herokuish() { + declare desc="builder-herokuish pre-build-buildpack plugin trigger" + declare trigger="trigger-pre-build-buildpack-builder-herokuish" + declare APP="$1" + local IMAGE CID local DOCKER_COMMIT_LABEL_ARGS=("--change" "LABEL org.label-schema.schema-version=1.0" "--change" "LABEL org.label-schema.vendor=dokku" "--change" "LABEL com.dokku.app-name=$APP") local DOCKER_RUN_LABEL_ARGS="--label=com.dokku.app-name=$APP" @@ -22,16 +22,16 @@ build_env_pre_build_buildpack() { dokku_log_info1 "Adding BUILD_ENV to build environment..." # create build env files for use in buildpacks like this: # https://github.com/niteoweb/heroku-buildpack-buildout/blob/5879fa3418f7d8e079f1aa5816ba1adde73f4948/bin/compile#L34 - id=$(config_bundle --merged "$APP" | "$DOCKER_BIN" run "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS -i -a stdin "$IMAGE" /bin/bash -c "mkdir -p /tmp/env; cat | tar -x -C /tmp/env") - test "$("$DOCKER_BIN" wait "$id")" -eq 0 + CID=$(config_bundle --merged "$APP" | "$DOCKER_BIN" run "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS -i -a stdin "$IMAGE" /bin/bash -c "mkdir -p /tmp/env; cat | tar -x -C /tmp/env") + test "$("$DOCKER_BIN" wait "$CID")" -eq 0 - "$DOCKER_BIN" commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" "$id" "$IMAGE" >/dev/null + "$DOCKER_BIN" commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" "$CID" "$IMAGE" >/dev/null # create build env for 'old style' buildpacks and dokku plugins - id=$(config_export app "$APP" --format envfile --merged | "$DOCKER_BIN" run "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS -i -a stdin "$IMAGE" /bin/bash -c "cat >> /app/.env") - test "$("$DOCKER_BIN" wait "$id")" -eq 0 + CID=$(config_export app "$APP" --format envfile --merged | "$DOCKER_BIN" run "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS -i -a stdin "$IMAGE" /bin/bash -c "cat >> /app/.env") + test "$("$DOCKER_BIN" wait "$CID")" -eq 0 - "$DOCKER_BIN" commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" "$id" "$IMAGE" >/dev/null + "$DOCKER_BIN" commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" "$CID" "$IMAGE" >/dev/null } -build_env_pre_build_buildpack "$@" +trigger-pre-build-buildpack-builder-herokuish "$@" diff --git a/plugins/common/functions b/plugins/common/functions index d3bfc8960..ab317ca51 100755 --- a/plugins/common/functions +++ b/plugins/common/functions @@ -517,120 +517,17 @@ is_app_running() { dokku_build() { declare desc="build phase" - declare APP="$1" IMAGE_SOURCE_TYPE="$2" TMP_WORK_DIR="$3" - source "$PLUGIN_AVAILABLE_PATH/config/functions" + declare APP="$1" IMAGE_SOURCE_TYPE="$2" SOURCECODE_WORK_DIR="$3" verify_app_name "$APP" - - local cid IMAGE=$(get_app_image_name "$APP") - local DOKKU_APP_CACHE_DIR="$DOKKU_ROOT/$APP/cache" - local DOKKU_APP_HOST_CACHE_DIR="$DOKKU_HOST_ROOT/$APP/cache" - - local DOCKER_COMMIT_LABEL_ARGS=("--change" "LABEL org.label-schema.schema-version=1.0" "--change" "LABEL org.label-schema.vendor=dokku" "--change" "LABEL com.dokku.app-name=$APP") - local DOCKER_BUILD_LABEL_ARGS="--label=org.label-schema.schema-version=1.0 --label=org.label-schema.vendor=dokku --label=com.dokku.app-name=$APP" - local DOCKER_RUN_LABEL_ARGS="--label=com.dokku.app-name=$APP" - - eval "$(config_export app "$APP")" - pushd "$TMP_WORK_DIR" &>/dev/null - - case "$IMAGE_SOURCE_TYPE" in - herokuish) - DOKKU_IMAGE="$(config_get "$APP" DOKKU_IMAGE || echo "$DOKKU_IMAGE")" - cid=$(tar -c . | "$DOCKER_BIN" run "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS -i -a stdin "$DOKKU_IMAGE" /bin/bash -c "mkdir -p /app && tar -xC /app") - test "$("$DOCKER_BIN" wait "$cid")" -eq 0 - - "$DOCKER_BIN" commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" "$cid" "$IMAGE" >/dev/null - [[ -d $DOKKU_APP_CACHE_DIR ]] || mkdir -p "$DOKKU_APP_CACHE_DIR" - plugn trigger pre-build-buildpack "$APP" - - local DOCKER_ARGS=$(: | plugn trigger docker-args-build "$APP" "$IMAGE_SOURCE_TYPE") - [[ "$DOKKU_TRACE" ]] && DOCKER_ARGS+=" -e TRACE=true " - local IMAGE_SOURCE_TYPE="herokuish" - DOCKER_ARGS+=$(: | plugn trigger docker-args-process-build "$APP" "$IMAGE_TAG" "$IMAGE_SOURCE_TYPE") - - declare -a ARG_ARRAY - eval "ARG_ARRAY=($DOCKER_ARGS)" - # shellcheck disable=SC2086 - cid=$("$DOCKER_BIN" run "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS -d -v $DOKKU_APP_HOST_CACHE_DIR:/cache -e CACHE_PATH=/cache "${ARG_ARRAY[@]}" $IMAGE /build) - "$DOCKER_BIN" attach "$cid" - test "$("$DOCKER_BIN" wait "$cid")" -eq 0 - - "$DOCKER_BIN" commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" "$cid" "$IMAGE" >/dev/null - - plugn trigger post-build-buildpack "$APP" - ;; - - dockerfile) - # extract first port from Dockerfile - local DOCKERFILE_PORTS=$(get_dockerfile_exposed_ports Dockerfile) - [[ -n "$DOCKERFILE_PORTS" ]] && config_set --no-restart "$APP" DOKKU_DOCKERFILE_PORTS="$DOCKERFILE_PORTS" - - # extract ENTRYPOINT/CMD from Dockerfile - local DOCKERFILE_ENTRYPOINT=$(extract_directive_from_dockerfile Dockerfile ENTRYPOINT) - [[ -n "$DOCKERFILE_ENTRYPOINT" ]] && config_set --no-restart "$APP" DOKKU_DOCKERFILE_ENTRYPOINT="$DOCKERFILE_ENTRYPOINT" - local DOCKERFILE_CMD=$(extract_directive_from_dockerfile Dockerfile CMD) - [[ -n "$DOCKERFILE_CMD" ]] && config_set --no-restart "$APP" DOKKU_DOCKERFILE_CMD="$DOCKERFILE_CMD" - plugn trigger pre-build-dockerfile "$APP" - - [[ "$DOKKU_DOCKERFILE_CACHE_BUILD" == "false" ]] && DOKKU_DOCKER_BUILD_OPTS="$DOKKU_DOCKER_BUILD_OPTS --no-cache" - local DOCKER_ARGS=$(: | plugn trigger docker-args-build "$APP" "$IMAGE_SOURCE_TYPE") - local IMAGE_SOURCE_TYPE="dockerfile" - DOCKER_ARGS+=$(: | plugn trigger docker-args-process-build "$APP" "$IMAGE_TAG" "$IMAGE_SOURCE_TYPE") - - # strip --volume and -v args from DOCKER_ARGS - local DOCKER_ARGS=$(sed -e "s/--volume=[[:graph:]]\+[[:blank:]]\?//g" -e "s/-v[[:blank:]]\?[[:graph:]]\+[[:blank:]]\?//g" <<<"$DOCKER_ARGS") - declare -a ARG_ARRAY - eval "ARG_ARRAY=($DOCKER_ARGS)" - - "$DOCKER_BIN" build "${DOCKER_BUILD_LABEL_ARGS[@]}" $DOKKU_GLOBAL_BUILD_ARGS "${ARG_ARRAY[@]}" "${DOKKU_DOCKER_BUILD_OPTS[@]}" -t $IMAGE . - - plugn trigger post-build-dockerfile "$APP" - ;; - - *) - dokku_log_fail "Building image source type $IMAGE_SOURCE_TYPE not supported!" - ;; - esac + plugn trigger builder-build "$IMAGE_SOURCE_TYPE" "$APP" "$SOURCECODE_WORK_DIR" } dokku_release() { declare desc="release phase" declare APP="$1" IMAGE_SOURCE_TYPE="$2" IMAGE_TAG="$3" - source "$PLUGIN_AVAILABLE_PATH/config/functions" - local cid IMAGE=$(get_app_image_name "$APP" "$IMAGE_TAG") - - local DOCKER_COMMIT_LABEL_ARGS=("--change" "LABEL org.label-schema.schema-version=1.0" "--change" "LABEL org.label-schema.vendor=dokku" "--change" "LABEL com.dokku.app-name=$APP") - local DOCKER_RUN_LABEL_ARGS="--label=com.dokku.app-name=$APP" - - case "$IMAGE_SOURCE_TYPE" in - herokuish) - plugn trigger pre-release-buildpack "$APP" "$IMAGE_TAG" - if [[ -n $(config_export global) ]]; then - cid=$(config_export global | "$DOCKER_BIN" run "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS -i -a stdin "$IMAGE" /bin/bash -c "mkdir -p /app/.profile.d && cat > /app/.profile.d/00-global-env.sh") - test "$("$DOCKER_BIN" wait "$cid")" -eq 0 - - "$DOCKER_BIN" commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" "$cid" "$IMAGE" >/dev/null - fi - if [[ -n $(config_export app "$APP") ]]; then - cid=$(config_export app "$APP" | "$DOCKER_BIN" run "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS -i -a stdin "$IMAGE" /bin/bash -c "mkdir -p /app/.profile.d && cat > /app/.profile.d/01-app-env.sh") - test "$("$DOCKER_BIN" wait "$cid")" -eq 0 - - "$DOCKER_BIN" commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" "$cid" "$IMAGE" >/dev/null - fi - plugn trigger post-release-buildpack "$APP" "$IMAGE_TAG" - ;; - - dockerfile) - # buildstep plugins don't necessarily make sense for dockerfiles. call the new breed!!! - plugn trigger pre-release-dockerfile "$APP" "$IMAGE_TAG" - plugn trigger post-release-dockerfile "$APP" "$IMAGE_TAG" - ;; - - *) - dokku_log_fail "Releasing image source type $IMAGE_SOURCE_TYPE not supported!" - ;; - esac + plugn trigger builder-release "$IMAGE_SOURCE_TYPE" "$APP" "$IMAGE_TAG" } dokku_deploy_cmd() {