diff --git a/loader/merge.go b/loader/merge.go index 0c7a6dd5..40405e3b 100644 --- a/loader/merge.go +++ b/loader/merge.go @@ -114,6 +114,11 @@ func _merge(baseService *types.ServiceConfig, overrideService *types.ServiceConf if overrideService.Entrypoint != nil { baseService.Entrypoint = overrideService.Entrypoint } + if baseService.Environment != nil { + baseService.Environment.OverrideBy(overrideService.Environment) + } else { + baseService.Environment = overrideService.Environment + } return baseService, nil } diff --git a/loader/merge_test.go b/loader/merge_test.go index 42f5f38b..b96fd33a 100644 --- a/loader/merge_test.go +++ b/loader/merge_test.go @@ -1224,3 +1224,37 @@ func TestMergeCommands(t *testing.T) { assert.NilError(t, err) assert.DeepEqual(t, merged.Services[0].Command, types.ShellCommand{"/bin/ash", "-c", "echo 'world'"}) } + +func TestMergeEnvironments(t *testing.T) { + configDetails := types.ConfigDetails{ + ConfigFiles: []types.ConfigFile{ + {Filename: "base.yml", Config: map[string]interface{}{ + "services": map[string]interface{}{ + "foo": map[string]interface{}{ + "image": "alpine", + "environment": map[string]interface{}{ + "NAME": "BASE", + "VALUE": "BASE", + }, + }, + }, + }}, + {Filename: "override.yml", Config: map[string]interface{}{ + "services": map[string]interface{}{ + "foo": map[string]interface{}{ + "image": "alpine", + "environment": map[string]interface{}{ + "NAME": "DEV", + "VALUE": nil, + }, + }, + }, + }}, + }, + } + merged, err := loadTestProject(configDetails) + assert.NilError(t, err) + env := merged.Services[0].Environment + assert.Assert(t, *env["NAME"] == "DEV") + assert.Assert(t, env["VALUE"] == nil) +}