github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/internal/condition/condition.go (about) 1 package condition 2 3 import ( 4 "errors" 5 "os" 6 "strings" 7 8 "github.com/ActiveState/cli/internal/constants" 9 "github.com/thoas/go-funk" 10 ) 11 12 type Configurable interface { 13 GetBool(s string) bool 14 } 15 16 var inTest = strings.HasSuffix(strings.TrimSuffix(os.Args[0], ".exe"), ".test") || 17 strings.Contains(os.Args[0], "/_test/") || funk.Contains(os.Args, "-test.v") 18 19 // InUnitTest returns true when the app is being tested 20 func InUnitTest() bool { 21 return inTest 22 } 23 24 func InTest() bool { 25 return InUnitTest() || os.Getenv(constants.E2ETestEnvVarName) == "true" 26 } 27 28 func OnCI() bool { 29 return os.Getenv("CI") != "" || os.Getenv("BUILDER_OUTPUT") != "" 30 } 31 32 func IsLTS() bool { 33 return strings.HasPrefix(constants.ChannelName, "LTS") 34 } 35 36 func BuiltViaCI() bool { 37 return constants.OnCI == "true" 38 } 39 40 func BuiltOnDevMachine() bool { 41 return !BuiltViaCI() 42 } 43 44 func InActiveStateCI() bool { 45 return os.Getenv(constants.ActiveStateCIEnvVarName) == "true" 46 } 47 48 func OptInUnstable(cfg Configurable) bool { 49 if v := os.Getenv(constants.OptinUnstableEnvVarName); v != "" { 50 return v == "true" 51 } 52 return cfg.GetBool(constants.UnstableConfig) 53 } 54 55 func IsNetworkingError(err error) bool { 56 switch { 57 case strings.Contains(err.Error(), "no such host"): 58 return true 59 case strings.Contains(err.Error(), "no route to host"): 60 return true 61 } 62 if subErr := errors.Unwrap(err); subErr != nil { 63 return IsNetworkingError(subErr) 64 } 65 unwrapped, ok := err.(interface{ Unwrap() []error }) 66 if ok { 67 subErrs := unwrapped.Unwrap() 68 if len(subErrs) > 0 { 69 for _, subErr := range subErrs { 70 if IsNetworkingError(subErr) { 71 return true 72 } 73 } 74 } 75 } 76 return false 77 }