fix: respect pre-existing .env files when preparing the herokuish buildenv
Closes #4894
This commit is contained in:
@@ -7,7 +7,7 @@ source "$PLUGIN_AVAILABLE_PATH/config/functions"
|
|||||||
trigger-builder-herokuish-pre-build-buildpack() {
|
trigger-builder-herokuish-pre-build-buildpack() {
|
||||||
declare desc="builder-herokuish pre-build-buildpack plugin trigger"
|
declare desc="builder-herokuish pre-build-buildpack plugin trigger"
|
||||||
declare trigger="pre-build-buildpack"
|
declare trigger="pre-build-buildpack"
|
||||||
declare APP="$1"
|
declare APP="$1" SOURCECODE_WORK_DIR="$2"
|
||||||
local IMAGE TMP_WORK_DIR
|
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"
|
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"
|
config_bundle --merged "$APP" | tar -x -C "$TMP_WORK_DIR/.env.d"
|
||||||
|
|
||||||
# create build env for 'old style' buildpacks and dokku plugins
|
# 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
|
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"
|
dokku_log_warn "Failure injecting BUILD_ENV into build environment"
|
||||||
|
|||||||
1
tests/apps/python/.env
Normal file
1
tests/apps/python/.env
Normal file
@@ -0,0 +1 @@
|
|||||||
|
DOTENV_KEY=some_value
|
||||||
@@ -5,7 +5,10 @@ import os
|
|||||||
def main():
|
def main():
|
||||||
print("GLOBAL_SECRET: {0}".format(os.getenv('GLOBAL_SECRET')))
|
print("GLOBAL_SECRET: {0}".format(os.getenv('GLOBAL_SECRET')))
|
||||||
print("SECRET_KEY: {0}".format(os.getenv('SECRET_KEY')))
|
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__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|||||||
19
tests/unit/builder-herokuish.bats
Normal file
19
tests/unit/builder-herokuish.bats
Normal file
@@ -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'
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user