@@ -5,6 +5,7 @@ package loader
55
66import (
77 "cmp"
8+ "errors"
89 "fmt"
910 "reflect"
1011 "slices"
@@ -28,22 +29,26 @@ func (s *specials) Transformer(t reflect.Type) func(dst, src reflect.Value) erro
2829func merge (configs []* types.Config ) (* types.Config , error ) {
2930 base := configs [0 ]
3031 for _ , override := range configs [1 :] {
32+ var errs []error
3133 if services , err := mergeServices (base .Services , override .Services ); err != nil {
32- return nil , fmt .Errorf ("cannot merge services from %s : %w" , override . Filename , err )
34+ errs = append ( errs , fmt .Errorf ("cannot merge services: %w" , err ) )
3335 } else {
3436 base .Services = services
3537 }
3638 if err := mergo .Map (& base .Volumes , & override .Volumes , mergo .WithOverride ); err != nil {
37- return nil , fmt .Errorf ("cannot merge volumes from %s : %w" , override . Filename , err )
39+ errs = append ( errs , fmt .Errorf ("cannot merge volumes: %w" , err ) )
3840 }
3941 if err := mergo .Map (& base .Networks , & override .Networks , mergo .WithOverride ); err != nil {
40- return nil , fmt .Errorf ("cannot merge networks from %s : %w" , override . Filename , err )
42+ errs = append ( errs , fmt .Errorf ("cannot merge networks: %w" , err ) )
4143 }
4244 if err := mergo .Map (& base .Secrets , & override .Secrets , mergo .WithOverride ); err != nil {
43- return nil , fmt .Errorf ("cannot merge secrets from %s : %w" , override . Filename , err )
45+ errs = append ( errs , fmt .Errorf ("cannot merge secrets: %w" , err ) )
4446 }
4547 if err := mergo .Map (& base .Configs , & override .Configs , mergo .WithOverride ); err != nil {
46- return nil , fmt .Errorf ("cannot merge configs from %s: %w" , override .Filename , err )
48+ errs = append (errs , fmt .Errorf ("cannot merge configs: %w" , err ))
49+ }
50+ if err := errors .Join (errs ... ); err != nil {
51+ return nil , errors .Join (fmt .Errorf ("failed to merge file %s" , override .Filename ), err )
4752 }
4853 }
4954 return base , nil
0 commit comments