@@ -25,7 +25,7 @@ import (
2525 "github.com/google/shlex"
2626 "github.com/pkg/errors"
2727 "github.com/sirupsen/logrus"
28- yaml "gopkg.in/yaml.v2 "
28+ "gopkg.in/yaml.v3 "
2929)
3030
3131// Options supported by Load
@@ -53,11 +53,11 @@ func ParseYAML(source []byte) (map[string]any, error) {
5353 if err := yaml .Unmarshal (source , & cfg ); err != nil {
5454 return nil , err
5555 }
56- cfgMap , ok := cfg .(map [any ]any )
56+ _ , ok := cfg .(map [string ]any )
5757 if ! ok {
5858 return nil , errors .Errorf ("top-level object must be a mapping" )
5959 }
60- converted , err := convertToStringKeysRecursive (cfgMap , "" )
60+ converted , err := convertToStringKeysRecursive (cfg , "" )
6161 if err != nil {
6262 return nil , err
6363 }
@@ -349,24 +349,20 @@ func createTransformHook(additionalTransformers ...Transformer) mapstructure.Dec
349349
350350// keys needs to be converted to strings for jsonschema
351351func convertToStringKeysRecursive (value any , keyPrefix string ) (any , error ) {
352- if mapping , ok := value .(map [any ]any ); ok {
352+ if mapping , ok := value .(map [string ]any ); ok {
353353 dict := make (map [string ]any )
354354 for key , entry := range mapping {
355- str , ok := key .(string )
356- if ! ok {
357- return nil , formatInvalidKeyError (keyPrefix , key )
358- }
359355 var newKeyPrefix string
360356 if keyPrefix == "" {
361- newKeyPrefix = str
357+ newKeyPrefix = key
362358 } else {
363- newKeyPrefix = fmt .Sprintf ("%s.%s" , keyPrefix , str )
359+ newKeyPrefix = fmt .Sprintf ("%s.%s" , keyPrefix , key )
364360 }
365361 convertedEntry , err := convertToStringKeysRecursive (entry , newKeyPrefix )
366362 if err != nil {
367363 return nil , err
368364 }
369- dict [str ] = convertedEntry
365+ dict [key ] = convertedEntry
370366 }
371367 return dict , nil
372368 }
@@ -385,16 +381,6 @@ func convertToStringKeysRecursive(value any, keyPrefix string) (any, error) {
385381 return value , nil
386382}
387383
388- func formatInvalidKeyError (keyPrefix string , key any ) error {
389- var location string
390- if keyPrefix == "" {
391- location = "at top level"
392- } else {
393- location = "in " + keyPrefix
394- }
395- return errors .Errorf ("non-string key %s: %#v" , location , key )
396- }
397-
398384// LoadServices produces a ServiceConfig map from a compose file Dict
399385// the servicesDict is not validated if directly used. Use Load() to enable validation
400386func LoadServices (servicesDict map [string ]any , workingDir string , lookupEnv template.Mapping ) ([]types.ServiceConfig , error ) {
0 commit comments