@@ -21,6 +21,7 @@ import (
2121 "io"
2222 "os"
2323 "path/filepath"
24+ "strconv"
2425 "strings"
2526
2627 "github.com/pkg/errors"
@@ -248,21 +249,44 @@ func WithEnvFile(file string) ProjectOptionsFn {
248249 return WithEnvFiles (files ... )
249250}
250251
251- // WithEnvFiles set alternate env files
252+ // WithEnvFiles set env file(s) to be loaded to set project environment.
253+ // defaults to local .env file if no explicit file is selected, until COMPOSE_DISABLE_ENV_FILE is set
252254func WithEnvFiles (file ... string ) ProjectOptionsFn {
253- return func (options * ProjectOptions ) error {
254- options .EnvFiles = file
255+ return func (o * ProjectOptions ) error {
256+ if len (file ) > 0 {
257+ o .EnvFiles = file
258+ return nil
259+ }
260+ if v , ok := os .LookupEnv (consts .ComposeDisableDefaultEnvFile ); ok {
261+ b , err := strconv .ParseBool (v )
262+ if err != nil {
263+ return err
264+ }
265+ if b {
266+ return nil
267+ }
268+ }
269+
270+ wd , err := o .GetWorkingDir ()
271+ if err != nil {
272+ return err
273+ }
274+ defaultDotEnv := filepath .Join (wd , ".env" )
275+
276+ s , err := os .Stat (defaultDotEnv )
277+ if os .IsNotExist (err ) {
278+ return nil
279+ }
280+ if ! s .IsDir () {
281+ o .EnvFiles = []string {defaultDotEnv }
282+ }
255283 return nil
256284 }
257285}
258286
259287// WithDotEnv imports environment variables from .env file
260288func WithDotEnv (o * ProjectOptions ) error {
261- wd , err := o .GetWorkingDir ()
262- if err != nil {
263- return err
264- }
265- envMap , err := dotenv .GetEnvFromFile (o .Environment , wd , o .EnvFiles )
289+ envMap , err := dotenv .GetEnvFromFile (o .Environment , o .EnvFiles )
266290 if err != nil {
267291 return err
268292 }
0 commit comments