@@ -616,22 +616,11 @@ func (p Project) WithServicesEnvironmentResolved(discardEnvFiles bool) (*Project
616616 }
617617
618618 for _ , envFile := range service .EnvFiles {
619- if _ , err := os .Stat (envFile .Path ); os .IsNotExist (err ) {
620- if envFile .Required {
621- return nil , fmt .Errorf ("env file %s not found: %w" , envFile .Path , err )
622- }
623- continue
624- }
625- b , err := os .ReadFile (envFile .Path )
619+ vars , err := loadEnvFile (envFile , resolve )
626620 if err != nil {
627- return nil , fmt . Errorf ( "failed to load %s: %w" , envFile . Path , err )
621+ return nil , err
628622 }
629-
630- fileVars , err := dotenv .ParseWithLookup (bytes .NewBuffer (b ), resolve )
631- if err != nil {
632- return nil , fmt .Errorf ("failed to read %s: %w" , envFile .Path , err )
633- }
634- environment .OverrideBy (Mapping (fileVars ).ToMappingWithEquals ())
623+ environment .OverrideBy (vars .ToMappingWithEquals ())
635624 }
636625
637626 service .Environment = environment .OverrideBy (service .Environment )
@@ -644,6 +633,31 @@ func (p Project) WithServicesEnvironmentResolved(discardEnvFiles bool) (*Project
644633 return newProject , nil
645634}
646635
636+ func loadEnvFile (envFile EnvFile , resolve dotenv.LookupFn ) (Mapping , error ) {
637+ if _ , err := os .Stat (envFile .Path ); os .IsNotExist (err ) {
638+ if envFile .Required {
639+ return nil , fmt .Errorf ("env file %s not found: %w" , envFile .Path , err )
640+ }
641+ return nil , nil
642+ }
643+ file , err := os .Open (envFile .Path )
644+ if err != nil {
645+ return nil , err
646+ }
647+ defer file .Close () //nolint:errcheck
648+
649+ var fileVars map [string ]string
650+ if envFile .Format != "" {
651+ fileVars , err = dotenv .ParseWithFormat (file , envFile .Path , resolve , envFile .Format )
652+ } else {
653+ fileVars , err = dotenv .ParseWithLookup (file , resolve )
654+ }
655+ if err != nil {
656+ return nil , err
657+ }
658+ return fileVars , nil
659+ }
660+
647661func (p * Project ) deepCopy () * Project {
648662 if p == nil {
649663 return nil
0 commit comments