From 0da9f148217ae6722a2e852d25bbefd6385c4701 Mon Sep 17 00:00:00 2001 From: Vincent Demeester Date: Wed, 20 Sep 2017 11:42:08 +0200 Subject: [PATCH] Fix loader error with different build syntax `build: .` was not working anymore. Fixing this by adding a new tranform function for BuildConfig. Signed-off-by: Vincent Demeester --- cli/compose/loader/loader.go | 12 ++++++++++++ cli/compose/loader/loader_test.go | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/cli/compose/loader/loader.go b/cli/compose/loader/loader.go index d6f676429d..972395dd72 100644 --- a/cli/compose/loader/loader.go +++ b/cli/compose/loader/loader.go @@ -221,6 +221,7 @@ func createTransformHook() mapstructure.DecodeHookFuncType { reflect.TypeOf(types.Labels{}): transformMappingOrListFunc("=", false), reflect.TypeOf(types.MappingWithColon{}): transformMappingOrListFunc(":", false), reflect.TypeOf(types.ServiceVolumeConfig{}): transformServiceVolumeConfig, + reflect.TypeOf(types.BuildConfig{}): transformBuildConfig, } return func(_ reflect.Type, target reflect.Type, data interface{}) (interface{}, error) { @@ -563,6 +564,17 @@ func transformStringSourceMap(data interface{}) (interface{}, error) { } } +func transformBuildConfig(data interface{}) (interface{}, error) { + switch value := data.(type) { + case string: + return map[string]interface{}{"context": value}, nil + case map[string]interface{}: + return data, nil + default: + return data, errors.Errorf("invalid type %T for service build", value) + } +} + func transformServiceVolumeConfig(data interface{}) (interface{}, error) { switch value := data.(type) { case string: diff --git a/cli/compose/loader/loader_test.go b/cli/compose/loader/loader_test.go index 6429a42021..863714dff1 100644 --- a/cli/compose/loader/loader_test.go +++ b/cli/compose/loader/loader_test.go @@ -528,6 +528,26 @@ services: assert.Equal(t, []string{"build", "links"}, unsupported) } +func TestBuildProperties(t *testing.T) { + dict, err := ParseYAML([]byte(` +version: "3" +services: + web: + image: web + build: . + links: + - bar + db: + image: db + build: + context: ./db +`)) + require.NoError(t, err) + configDetails := buildConfigDetails(dict, nil) + _, err = Load(configDetails) + require.NoError(t, err) +} + func TestDeprecatedProperties(t *testing.T) { dict, err := ParseYAML([]byte(` version: "3"