github.com/criteo/command-launcher@v0.0.0-20230407142452-fb616f546e98/internal/config/dirs.go (about) 1 package config 2 3 import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 8 "github.com/criteo/command-launcher/internal/context" 9 log "github.com/sirupsen/logrus" 10 ) 11 12 func AppDir() string { 13 ctx, err := context.AppContext() 14 if err != nil { 15 log.Fatal(err) 16 } 17 18 appDir := os.Getenv(ctx.AppHomeEnvVar()) 19 if appDir != "" { 20 log.Tracef("Use app home dir from environment variable, %s: %s", ctx.AppHomeEnvVar(), appDir) 21 return appDir 22 } 23 24 home, err := os.UserHomeDir() 25 if err != nil { 26 log.Fatal(err) 27 } 28 log.Tracef("User home dir: %s", home) 29 30 return filepath.Join(home, ctx.AppDirname()) 31 } 32 33 func LogsDir() string { 34 return filepath.Join(AppDir(), "logs") 35 } 36 37 func createLogsDir() error { 38 err := maybeCreateDir(LogsDir()) 39 if err != nil { 40 return fmt.Errorf("cannot create the LOGS folder %s, err=%v", LogsDir(), err) 41 } 42 log.Tracef("LOGS folder: %s", LogsDir()) 43 44 return nil 45 } 46 47 func createAppDir() { 48 err := maybeCreateDir(AppDir()) 49 if err != nil { 50 log.Fatalf("cannot create the App folder %s, err=%v", AppDir(), err) 51 } 52 log.Infof("App folder: %s", AppDir()) 53 } 54 55 func maybeCreateDir(path string) error { 56 _, err := os.Stat(path) 57 if os.IsNotExist(err) { 58 return os.MkdirAll(path, 0755) 59 } 60 61 return nil 62 }