While this will require future updates if railpacks supports new build arguments, it also ensures builds safely consume arguments from other plugins.
158 lines
4.7 KiB
Bash
Executable File
158 lines
4.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
|
source "$PLUGIN_AVAILABLE_PATH/builder-railpack/internal-functions"
|
|
source "$PLUGIN_AVAILABLE_PATH/config/functions"
|
|
set -eo pipefail
|
|
[[ $DOKKU_TRACE ]] && set -x
|
|
|
|
trigger-builder-railpack-builder-build() {
|
|
declare desc="builder-railpack builder-build plugin trigger"
|
|
declare trigger="builder-build"
|
|
declare BUILDER_TYPE="$1" APP="$2" SOURCECODE_WORK_DIR="$3"
|
|
|
|
if [[ "$BUILDER_TYPE" != "railpack" ]]; then
|
|
return
|
|
fi
|
|
|
|
dokku_log_info1 "Building $APP from railpack"
|
|
|
|
if ! command -v "railpack" &>/dev/null; then
|
|
dokku_log_fail "Missing railpack, install it"
|
|
fi
|
|
|
|
local IMAGE=$(get_app_image_name "$APP")
|
|
local DOCKER_BUILD_LABEL_ARGS=("--label=dokku" "--label=org.label-schema.schema-version=1.0" "--label=org.label-schema.vendor=dokku" "--label=com.dokku.image-stage=build" "--label=com.dokku.builder-type=railpack" "--label=com.dokku.app-name=$APP")
|
|
|
|
pushd "$SOURCECODE_WORK_DIR" &>/dev/null
|
|
|
|
plugn trigger pre-build "$BUILDER_TYPE" "$APP" "$SOURCECODE_WORK_DIR"
|
|
|
|
if [[ -f "$SOURCECODE_WORK_DIR/Procfile" ]]; then
|
|
if procfile-util exists --process-type release; then
|
|
procfile-util delete --process-type release
|
|
fi
|
|
fi
|
|
|
|
local DOCKER_ARGS=$(: | plugn trigger docker-args-build "$APP" "$BUILDER_TYPE")
|
|
DOCKER_ARGS+=$(: | plugn trigger docker-args-process-build "$APP" "$BUILDER_TYPE")
|
|
[[ "$(fn-builder-railpack-computed-no-cache "$APP")" == "true" ]] && DOCKER_ARGS+=" --no-cache"
|
|
|
|
DOCKER_ARGS=" $DOCKER_ARGS "
|
|
eval set -- "$DOCKER_ARGS"
|
|
|
|
declare -a RAILPACK_ARGS
|
|
while true; do
|
|
case "$1" in
|
|
--platform)
|
|
RAILPACK_ARGS+=("--platform")
|
|
RAILPACK_ARGS+=("$2")
|
|
shift 2
|
|
;;
|
|
--platform=*)
|
|
if [[ "$1" == "--buildpack=*" ]]; then
|
|
RAILPACK_ARGS+=("--platform" "${1#--platform=}")
|
|
elif [[ "$1" == "--platform=*" ]]; then
|
|
RAILPACK_ARGS+=("--platform" "${1#--platform=}")
|
|
fi
|
|
shift 1
|
|
;;
|
|
--progress)
|
|
RAILPACK_ARGS+=("--progress")
|
|
RAILPACK_ARGS+=("$2")
|
|
shift 2
|
|
;;
|
|
--progress=*)
|
|
if [[ "$1" == "--progress=*" ]]; then
|
|
RAILPACK_ARGS+=("--progress" "${1#--progress=}")
|
|
fi
|
|
shift 1
|
|
;;
|
|
--cache-key)
|
|
RAILPACK_ARGS+=("--cache-key")
|
|
RAILPACK_ARGS+=("$2")
|
|
shift 2
|
|
;;
|
|
--cache-key=*)
|
|
if [[ "$1" == "--cache-key=*" ]]; then
|
|
RAILPACK_ARGS+=("--cache-key" "${1#--cache-key=}")
|
|
fi
|
|
shift 1
|
|
;;
|
|
-e | --env)
|
|
RAILPACK_ARGS+=("--env")
|
|
RAILPACK_ARGS+=("$2")
|
|
shift 2
|
|
;;
|
|
-e=* | --env=*)
|
|
if [[ "$1" == "--env=*" ]]; then
|
|
RAILPACK_ARGS+=("--env" "${1#--env=}")
|
|
elif [[ "$1" == "--env=*" ]]; then
|
|
RAILPACK_ARGS+=("--env" "${1#--env=}")
|
|
fi
|
|
shift 1
|
|
;;
|
|
--previous)
|
|
RAILPACK_ARGS+=("--previous")
|
|
RAILPACK_ARGS+=("$2")
|
|
shift 2
|
|
;;
|
|
--previous=*)
|
|
if [[ "$1" == "--previous=*" ]]; then
|
|
RAILPACK_ARGS+=("--previous" "${1#--previous=}")
|
|
fi
|
|
shift 1
|
|
;;
|
|
--build-cmd)
|
|
RAILPACK_ARGS+=("--build-cmd")
|
|
RAILPACK_ARGS+=("$2")
|
|
shift 2
|
|
;;
|
|
--build-cmd=*)
|
|
if [[ "$1" == "--build-cmd=*" ]]; then
|
|
RAILPACK_ARGS+=("--build-cmd" "${1#--build-cmd=}")
|
|
fi
|
|
shift 1
|
|
;;
|
|
--start-cmd)
|
|
RAILPACK_ARGS+=("--start-cmd")
|
|
RAILPACK_ARGS+=("$2")
|
|
shift 2
|
|
;;
|
|
--start-cmd=*)
|
|
if [[ "$1" == "--start-cmd=*" ]]; then
|
|
RAILPACK_ARGS+=("--start-cmd" "${1#--start-cmd=}")
|
|
fi
|
|
shift 1
|
|
;;
|
|
---show-plan | --error-missing-start)
|
|
RAILPACK_ARGS+=("$1")
|
|
shift 1
|
|
;;
|
|
*)
|
|
continue
|
|
;;
|
|
esac
|
|
done
|
|
|
|
eval "$(config_export app "$APP" --merged)"
|
|
|
|
# shellcheck disable=SC2086
|
|
if ! railpack build "${RAILPACK_ARGS[@]}" --name "$IMAGE-build" "$SOURCECODE_WORK_DIR"; then
|
|
dokku_log_warn "Failure building image"
|
|
return 1
|
|
fi
|
|
|
|
if ! suppress_output "$DOCKER_BIN" image build -f "$PLUGIN_AVAILABLE_PATH/builder-railpack/dockerfiles/builder-build.Dockerfile" --build-arg APP_IMAGE="$IMAGE-build" "${DOCKER_BUILD_LABEL_ARGS[@]}" $DOKKU_GLOBAL_BUILD_ARGS -t "$IMAGE" "$SOURCECODE_WORK_DIR"; then
|
|
"$DOCKER_BIN" image remove "$IMAGE-build"
|
|
dokku_log_warn "Failure injecting docker labels and custom entrypoint on image"
|
|
return 1
|
|
fi
|
|
|
|
"$DOCKER_BIN" image remove "$IMAGE-build"
|
|
|
|
plugn trigger post-build "$BUILDER_TYPE" "$APP" "$SOURCECODE_WORK_DIR"
|
|
popd &>/dev/null || pushd "/tmp" >/dev/null
|
|
}
|
|
|
|
trigger-builder-railpack-builder-build "$@"
|