github.com/criteo/command-launcher@v0.0.0-20230407142452-fb616f546e98/internal/context/default-context.go (about) 1 package context 2 3 import ( 4 "fmt" 5 "strings" 6 ) 7 8 type defaultContext struct { 9 appName string 10 appVersion string 11 buildNum string 12 } 13 14 var context = defaultContext{} 15 16 func InitContext(appName string, appVersion string, buildNum string) LauncherContext { 17 // TODO check the appName value 18 context.appName = appName 19 context.appVersion = appVersion 20 context.buildNum = buildNum 21 22 return &context 23 } 24 25 func AppContext() (LauncherContext, error) { 26 if context.appName != "" { 27 return &context, nil 28 } 29 30 return nil, fmt.Errorf("uninitialized context, the root command has to init the context") 31 } 32 33 func (ctx *defaultContext) AppVersion() string { 34 return ctx.appVersion 35 } 36 37 func (ctx *defaultContext) AppBuildNum() string { 38 return ctx.buildNum 39 } 40 41 func (ctx *defaultContext) AppName() string { 42 return ctx.appName 43 } 44 45 func (ctx *defaultContext) AppDirname() string { 46 return fmt.Sprintf(".%s", ctx.appName) 47 } 48 49 func (ctx *defaultContext) AppHomeEnvVar() string { 50 return ctx.envVarName("HOME") 51 } 52 53 func (ctx *defaultContext) UsernameEnvVar() string { 54 return ctx.envVarName("USERNAME") 55 } 56 57 func (ctx *defaultContext) PasswordEnvVar() string { 58 return ctx.envVarName("PASSWORD") 59 } 60 61 func (ctx *defaultContext) AuthTokenEnvVar() string { 62 return ctx.envVarName("AUTH_TOKEN") 63 } 64 65 func (ctx *defaultContext) LogLevelEnvVar() string { 66 return ctx.envVarName("LOG_LEVEL") 67 } 68 69 func (ctx *defaultContext) DebugFlagsEnvVar() string { 70 return ctx.envVarName("DEBUG_FLAGS") 71 } 72 73 func (ctx *defaultContext) ConfigurationFileEnvVar() string { 74 return ctx.envVarName("CONFIG_FILE") 75 } 76 77 func (ctx *defaultContext) RemoteConfigurationUrlEnvVar() string { 78 return ctx.envVarName("REMOTE_CONFIG_URL") 79 } 80 81 func (ctx *defaultContext) CmdPackageDirEnvVar() string { 82 return ctx.envVarName("PACKAGE_DIR") 83 } 84 85 func (ctx *defaultContext) envVarName(name string) string { 86 return fmt.Sprintf("%s_%s", ctx.prefix(), name) 87 } 88 89 func (ctx *defaultContext) prefix() string { 90 // TODO: in 1.8+ use COLA as the prefix so that it is independent to the binary name 91 // return "COLA" 92 return strings.ToUpper(ctx.appName) 93 }