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  }