From 07f2ef1411f6784f34d74e2a1ae2b5d6738b818d Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Tue, 18 Jan 2022 02:20:57 -0500 Subject: [PATCH] fix: respect pre-existing .env files when preparing the herokuish buildenv Closes #4894 --- plugins/builder-herokuish/pre-build-buildpack | 10 ++++++++-- tests/apps/python/.env | 1 + tests/apps/python/release.py | 5 ++++- tests/unit/builder-herokuish.bats | 19 +++++++++++++++++++ 4 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 tests/apps/python/.env create mode 100644 tests/unit/builder-herokuish.bats diff --git a/plugins/builder-herokuish/pre-build-buildpack b/plugins/builder-herokuish/pre-build-buildpack index 72e17f62e..5a7e22d9f 100755 --- a/plugins/builder-herokuish/pre-build-buildpack +++ b/plugins/builder-herokuish/pre-build-buildpack @@ -7,7 +7,7 @@ source "$PLUGIN_AVAILABLE_PATH/config/functions" trigger-builder-herokuish-pre-build-buildpack() { declare desc="builder-herokuish pre-build-buildpack plugin trigger" declare trigger="pre-build-buildpack" - declare APP="$1" + declare APP="$1" SOURCECODE_WORK_DIR="$2" local IMAGE TMP_WORK_DIR 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" @@ -27,7 +27,13 @@ trigger-builder-herokuish-pre-build-buildpack() { config_bundle --merged "$APP" | tar -x -C "$TMP_WORK_DIR/.env.d" # create build env for 'old style' buildpacks and dokku plugins - config_export app "$APP" --format envfile --merged >"$TMP_WORK_DIR/.env" + touch "$TMP_WORK_DIR/.env" + if [[ -f "$SOURCECODE_WORK_DIR/.env" ]]; then + cp -f "$SOURCECODE_WORK_DIR/.env" "$TMP_WORK_DIR/.env" + fi + local dotenv_contents="$(sed -Ez '$ s/\n+$//' "$TMP_WORK_DIR/.env")" + echo "$dotenv_contents" >"$TMP_WORK_DIR/.env" + config_export app "$APP" --format envfile --merged >>"$TMP_WORK_DIR/.env" if ! suppress_output "$DOCKER_BIN" image build "${DOCKER_BUILD_LABEL_ARGS[@]}" $DOKKU_GLOBAL_BUILD_ARGS -f "$PLUGIN_AVAILABLE_PATH/builder-herokuish/dockerfiles/pre-build.Dockerfile" --build-arg APP_IMAGE="$IMAGE" -t $IMAGE "$TMP_WORK_DIR"; then dokku_log_warn "Failure injecting BUILD_ENV into build environment" diff --git a/tests/apps/python/.env b/tests/apps/python/.env new file mode 100644 index 000000000..fb67a9ab6 --- /dev/null +++ b/tests/apps/python/.env @@ -0,0 +1 @@ +DOTENV_KEY=some_value \ No newline at end of file diff --git a/tests/apps/python/release.py b/tests/apps/python/release.py index 0d3a37e58..117710e9f 100644 --- a/tests/apps/python/release.py +++ b/tests/apps/python/release.py @@ -5,7 +5,10 @@ import os def main(): print("GLOBAL_SECRET: {0}".format(os.getenv('GLOBAL_SECRET'))) print("SECRET_KEY: {0}".format(os.getenv('SECRET_KEY'))) - + with open("/app/.env", "r") as f: + for line in f.readlines(): + if "DOTENV_KEY" in line: + print(line) if __name__ == '__main__': main() diff --git a/tests/unit/builder-herokuish.bats b/tests/unit/builder-herokuish.bats new file mode 100644 index 000000000..b4fda84dd --- /dev/null +++ b/tests/unit/builder-herokuish.bats @@ -0,0 +1,19 @@ +#!/usr/bin/env bats + +load test_helper + +setup() { + create_app +} + +teardown() { + destroy_app +} + +@test "(builder-herouish:build .env)" { + run deploy_app python dokku@dokku.me:$TEST_APP + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains 'DOTENV_KEY=some_value' +} \ No newline at end of file