From 92790b70e8cc6e9f2ff48eec1283fe1860364bf8 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Sun, 17 Apr 2022 02:08:48 -0400 Subject: [PATCH] feat: broken support for lambda-builder It's currently broken because there are flags in there that aren't actually implemented --- debian/control | 2 +- plugins/builder-lambda/builder-build | 24 ++++-------------- plugins/builder-lambda/builder-release | 4 +-- plugins/builder-lambda/core-post-extract | 30 +++++++++++++++++++++++ plugins/builder-lambda/internal-functions | 26 +++++++++++++++++--- plugins/builder-lambda/subcommands/set | 4 +-- 6 files changed, 63 insertions(+), 27 deletions(-) create mode 100755 plugins/builder-lambda/core-post-extract diff --git a/debian/control b/debian/control index b872c85c5..6f21771cf 100644 --- a/debian/control +++ b/debian/control @@ -3,7 +3,7 @@ Version: 0.27.10 Section: web Priority: optional Architecture: amd64 -Depends: locales, git, cpio, curl, man-db, netcat, sshcommand (>= 0.12.0), docker-engine-cs (>= 17.05.0) | docker-engine (>= 17.05.0) | docker-io (>= 17.05.0) | docker.io (>= 17.05.0) | docker-ce (>= 17.05.0) | docker-ee (>= 17.05.0) | moby-engine, docker-image-labeler (>= 0.2.2), net-tools, netrc, software-properties-common, parallel, procfile-util (>= 0.11.0), python-software-properties | python3-software-properties, rsync, rsyslog, dos2unix, jq, unzip +Depends: locales, git, cpio, curl, man-db, netcat, sshcommand (>= 0.12.0), docker-engine-cs (>= 17.05.0) | docker-engine (>= 17.05.0) | docker-io (>= 17.05.0) | docker.io (>= 17.05.0) | docker-ce (>= 17.05.0) | docker-ee (>= 17.05.0) | moby-engine, docker-image-labeler (>= 0.2.2), lambda-builder, net-tools, netrc, software-properties-common, parallel, procfile-util (>= 0.11.0), python-software-properties | python3-software-properties, rsync, rsyslog, dos2unix, jq, unzip Recommends: herokuish (>= 0.3.4), bash-completion, dokku-update, dokku-event-listener Pre-Depends: gliderlabs-sigil, nginx (>= 1.8.0) | openresty, dnsutils, cgroupfs-mount | cgroup-lite, plugn (>= 0.3.0), sudo, python3, debconf Maintainer: Jose Diaz-Gonzalez diff --git a/plugins/builder-lambda/builder-build b/plugins/builder-lambda/builder-build index 547556fb2..c564ba227 100755 --- a/plugins/builder-lambda/builder-build +++ b/plugins/builder-lambda/builder-build @@ -1,7 +1,5 @@ #!/usr/bin/env bash source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" -source "$PLUGIN_AVAILABLE_PATH/config/functions" -source "$PLUGIN_AVAILABLE_PATH/builder-lambda/internal-functions" set -eo pipefail [[ $DOKKU_TRACE ]] && set -x @@ -14,31 +12,19 @@ trigger-builder-lambda-builder-build() { return fi - # write lambda file out - - dokku_log_info1 "Building $APP from Dockerfile" + dokku_log_info1 "Building $APP from lambda" 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 - suppress_output dos2unix Dockerfile - local DOCKERFILE_PORTS=$(get_dockerfile_exposed_ports Dockerfile) - [[ -n "$DOCKERFILE_PORTS" ]] && config_set --no-restart "$APP" DOKKU_DOCKERFILE_PORTS="$DOCKERFILE_PORTS" plugn trigger pre-build-lambda "$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" "$BUILDER_TYPE") + # shellcheck disable=SC2086 + lambda-builder build --build-image --generate-procfile --label=org.label-schema.schema-version=1.0 --label=org.label-schema.vendor=dokku "--label=com.dokku.app-name=$APP" $DOKKU_GLOBAL_BUILD_ARGS --tag "$IMAGE" --working-directory "$SOURCECODE_WORK_DIR" - # strip --link, --volume and -v args from DOCKER_ARGS - local DOCKER_ARGS=$(sed -e "s/^--link=[[:graph:]]\+[[:blank:]]\?//g" -e "s/^--link[[:blank:]]\?[[:graph:]]\+[[:blank:]]\?//g" -e "s/^--volume=[[:graph:]]\+[[:blank:]]\?//g" -e "s/^--volume[[:blank:]]\?[[:graph:]]\+[[:blank:]]\?//g" -e "s/^-v[[:blank:]]\?[[:graph:]]\+[[:blank:]]\?//g" <<<"$DOCKER_ARGS") - declare -a ARG_ARRAY - eval "ARG_ARRAY=($DOCKER_ARGS)" - - "$DOCKER_BIN" image build $DOCKER_BUILD_LABEL_ARGS $DOKKU_GLOBAL_BUILD_ARGS "${ARG_ARRAY[@]}" "${DOKKU_DOCKER_BUILD_OPTS[@]}" -t $IMAGE . + # todo: extract lambda.zip and put it somewhere for safe-keeping + # todo: write procfile to shared procfile location? plugn trigger post-build-lambda "$APP" } diff --git a/plugins/builder-lambda/builder-release b/plugins/builder-lambda/builder-release index d77bd95a2..087cb8007 100755 --- a/plugins/builder-lambda/builder-release +++ b/plugins/builder-lambda/builder-release @@ -1,7 +1,7 @@ #!/usr/bin/env bash +source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" set -eo pipefail [[ $DOKKU_TRACE ]] && set -x -source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" trigger-builder-lambda-builder-release() { declare desc="builder-lambda builder-release plugin trigger" @@ -20,7 +20,7 @@ trigger-builder-lambda-builder-release() { trap "rm -rf '$TMP_WORK_DIR' >/dev/null" RETURN INT TERM EXIT local IMAGE=$(get_app_image_name "$APP" "$IMAGE_TAG") - if ! suppress_output "$DOCKER_BIN" image build "${DOCKER_BUILD_LABEL_ARGS[@]}" $DOKKU_GLOBAL_BUILD_ARGS -f "$PLUGIN_AVAILABLE_PATH/builder-lambda/dockerfiles/builder-release.Dockerfile" --build-arg APP_IMAGE="$IMAGE" -t $IMAGE "$TMP_WORK_DIR"; then + if ! suppress_output "$DOCKER_BIN" image build "${DOCKER_BUILD_LABEL_ARGS[@]}" $DOKKU_GLOBAL_BUILD_ARGS -f "$PLUGIN_AVAILABLE_PATH/builder-lambda/dockerfiles/builder-release.Dockerfile" --build-arg APP_IMAGE="$IMAGE" -t "$IMAGE" "$TMP_WORK_DIR"; then dokku_log_warn "Failure injecting docker labels on image" return 1 fi diff --git a/plugins/builder-lambda/core-post-extract b/plugins/builder-lambda/core-post-extract new file mode 100755 index 000000000..bc48c6230 --- /dev/null +++ b/plugins/builder-lambda/core-post-extract @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" +source "$PLUGIN_AVAILABLE_PATH/builder-pack/internal-functions" +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x + +trigger-builder-lambda-core-post-extract() { + declare desc="builder-lambda post-extract plugin trigger" + declare trigger="post-extract" + declare APP="$1" SOURCECODE_WORK_DIR="$2" + local NEW_PROJECT_TOML="$(fn-builder-lambda-computed-lambdayml-path "$APP")" + + pushd "$TMP_WORK_DIR" >/dev/null + + if [[ -z "$NEW_LAMBDA_YML" ]]; then + return + fi + + if [[ ! -f "$NEW_LAMBDA_YML" ]]; then + rm -f lambda.yml + return + fi + + if [[ "$NEW_PROJECT_TOML" != "lambda.yml" ]]; then + mv "$NEW_PROJECT_TOML" lambda.yml + fi + popd &>/dev/null || pushd "/tmp" >/dev/null +} + +trigger-builder-lambda-core-post-extract "$@" diff --git a/plugins/builder-lambda/internal-functions b/plugins/builder-lambda/internal-functions index 136fab6cf..f5dc8a7b6 100755 --- a/plugins/builder-lambda/internal-functions +++ b/plugins/builder-lambda/internal-functions @@ -35,7 +35,9 @@ cmd-builder-lambda-report-single() { fi verify_app_name "$APP" local flag_map=( - "--builder-lambda-language: $(fn-builder-lambda-language "$APP")" + "--builder-lambda-computed-lambdayml-path: $(fn-builder-lambda-computed-lambdayml-path "$APP")" + "--builder-lambda-global-lambdayml-path: $(fn-builder-lambda-global-lambdayml-path "$APP")" + "--builder-lambda-lambdayml-path: $(fn-builder-lambda-lambdayml-path "$APP")" ) if [[ -z "$INFO_FLAG" ]]; then @@ -64,8 +66,26 @@ cmd-builder-lambda-report-single() { fi } -fn-builder-lambda-language() { + +fn-builder-lambda-computed-lambdayml-path() { declare APP="$1" - fn-plugin-property-get "builder-lambda" "$APP" "language" "" + file="$(fn-builder-lambda-lambdayml-path "$APP")" + if [[ "$file" == "" ]]; then + file="$(fn-builder-lambda-global-lambdayml-path "$APP")" + fi + + echo "$file" +} + +fn-builder-lambda-global-lambdayml-path() { + declare APP="$1" + + fn-plugin-property-get "builder-lambda" "--global" "lambdayml-path" "lambda.yml" +} + +fn-builder-lambda-lambdayml-path() { + declare APP="$1" + + fn-plugin-property-get "builder-lambda" "$APP" "lambdayml-path" "" } diff --git a/plugins/builder-lambda/subcommands/set b/plugins/builder-lambda/subcommands/set index 554742e8d..fcbe16954 100755 --- a/plugins/builder-lambda/subcommands/set +++ b/plugins/builder-lambda/subcommands/set @@ -9,13 +9,13 @@ cmd-builder-lambda-set() { declare cmd="builder-lambda:set" [[ "$1" == "$cmd" ]] && shift 1 declare APP="$1" KEY="$2" VALUE="$3" - local VALID_KEYS=("language") + local VALID_KEYS=("lambdayml-path") [[ "$APP" == "--global" ]] || verify_app_name "$APP" [[ -z "$KEY" ]] && dokku_log_fail "No key specified" if ! fn-in-array "$KEY" "${VALID_KEYS[@]}"; then - dokku_log_fail "Invalid key specified, valid keys include: language" + dokku_log_fail "Invalid key specified, valid keys include: lambdayml-path" fi if [[ -n "$VALUE" ]]; then