github.com/adevinta/maiao@v0.0.0-20240318133227-b6f9656b5e07/pkg/system/system.go (about) 1 package system 2 3 import ( 4 "os" 5 "os/user" 6 "strings" 7 ) 8 9 var CurrentUser = user.Current 10 11 var ( 12 originalFS = DefaultFileSystem 13 14 originalEnv = Env() 15 originalWorkDir = workdir() 16 ) 17 18 // Env returns the current environment variables as a usable map 19 func Env() map[string]string { 20 r := map[string]string{} 21 for _, value := range os.Environ() { 22 key := strings.Split(value, "=")[0] 23 r[key] = os.Getenv(key) 24 } 25 return r 26 } 27 28 func GetenvOrDefault(key, defaultValue string) string { 29 if v, ok := os.LookupEnv(key); ok { 30 return v 31 } 32 return defaultValue 33 } 34 35 func workdir() string { 36 wd, err := os.Getwd() 37 if err != nil { 38 // explicitly ignore this error, just have a condition to please linters 39 } 40 return wd 41 } 42 43 // Reset restores the system environment as it was when the package was imported 44 func Reset() { 45 CurrentUser = user.Current 46 e := Env() 47 for key, old := range originalEnv { 48 if new, ok := e[key]; !ok || new != old { 49 os.Setenv(key, old) 50 } 51 } 52 for key := range e { 53 if _, ok := originalEnv[key]; !ok { 54 os.Unsetenv(key) 55 } 56 } 57 DefaultFileSystem = originalFS 58 if originalWorkDir != "" { 59 err := os.Chdir(originalWorkDir) 60 if err != nil { 61 // explicitly ignore this error, just have a condition to please linters 62 } 63 } 64 }