Skip to content

Commit c732a53

Browse files
committed
fix ability to override values set in env file by interpolation
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
1 parent 8792426 commit c732a53

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

dotenv/env.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func GetEnvFromFile(currentEnv map[string]string, filenames []string) (map[strin
5656
return envMap, err
5757
}
5858

59-
env, err := ParseWithLookup(bytes.NewReader(b), func(k string) (string, bool) {
59+
err = parseWithLookup(bytes.NewReader(b), envMap, func(k string) (string, bool) {
6060
v, ok := currentEnv[k]
6161
if ok {
6262
return v, true
@@ -67,9 +67,6 @@ func GetEnvFromFile(currentEnv map[string]string, filenames []string) (map[strin
6767
if err != nil {
6868
return envMap, fmt.Errorf("failed to read %s: %w", dotEnvFile, err)
6969
}
70-
for k, v := range env {
71-
envMap[k] = v
72-
}
7370
}
7471

7572
return envMap, nil

dotenv/godotenv_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -741,3 +741,36 @@ func TestLoadWithFormat(t *testing.T) {
741741
assert.NilError(t, err)
742742
assert.DeepEqual(t, expectedValues, env)
743743
}
744+
745+
func TestMultipleFiles(t *testing.T) {
746+
base, err := os.CreateTemp(t.TempDir(), "base.env")
747+
assert.NilError(t, err)
748+
err = os.WriteFile(base.Name(), []byte(`
749+
ENV_HOSTNAME=localhost
750+
ENV_MY_URL="http://${ENV_HOSTNAME}"
751+
`), 0o600)
752+
assert.NilError(t, err)
753+
754+
override, err := os.CreateTemp(t.TempDir(), "override.env")
755+
assert.NilError(t, err)
756+
err = os.WriteFile(override.Name(), []byte(`
757+
ENV_HOSTNAME=dev.my-company.com
758+
ENV_MY_URL="http://${ENV_HOSTNAME}"
759+
`), 0o600)
760+
assert.NilError(t, err)
761+
762+
env, err := GetEnvFromFile(nil, []string{base.Name(), override.Name()})
763+
assert.NilError(t, err)
764+
assert.DeepEqual(t, env, map[string]string{
765+
"ENV_HOSTNAME": "dev.my-company.com",
766+
"ENV_MY_URL": "http://dev.my-company.com",
767+
})
768+
769+
osEnv := map[string]string{"ENV_HOSTNAME": "host.local"}
770+
env, err = GetEnvFromFile(osEnv, []string{base.Name(), override.Name()})
771+
assert.NilError(t, err)
772+
assert.DeepEqual(t, env, map[string]string{
773+
"ENV_HOSTNAME": "dev.my-company.com",
774+
"ENV_MY_URL": "http://host.local",
775+
})
776+
}

0 commit comments

Comments
 (0)