Skip to content

Commit 8da9902

Browse files
committed
fix ability to override values set in env file by interpolation
Signed-off-by: Nicolas De Loof <[email protected]>
1 parent 924bff9 commit 8da9902

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-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: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -741,3 +741,34 @@ 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 := filepath.Join(t.TempDir(), "base.env")
747+
err := os.WriteFile(base, []byte(`
748+
ENV_HOSTNAME=localhost
749+
ENV_MY_URL="http://${ENV_HOSTNAME}"
750+
`), 0o600)
751+
assert.NilError(t, err)
752+
753+
override := filepath.Join(t.TempDir(), "override.env")
754+
err = os.WriteFile(override, []byte(`
755+
ENV_HOSTNAME=dev.my-company.com
756+
ENV_MY_URL="http://${ENV_HOSTNAME}"
757+
`), 0o600)
758+
assert.NilError(t, err)
759+
760+
env, err := GetEnvFromFile(nil, []string{base, override})
761+
assert.NilError(t, err)
762+
assert.DeepEqual(t, env, map[string]string{
763+
"ENV_HOSTNAME": "dev.my-company.com",
764+
"ENV_MY_URL": "http://dev.my-company.com",
765+
})
766+
767+
osEnv := map[string]string{"ENV_HOSTNAME": "host.local"}
768+
env, err = GetEnvFromFile(osEnv, []string{base, override})
769+
assert.NilError(t, err)
770+
assert.DeepEqual(t, env, map[string]string{
771+
"ENV_HOSTNAME": "dev.my-company.com",
772+
"ENV_MY_URL": "http://host.local",
773+
})
774+
}

0 commit comments

Comments
 (0)