pkg/runner/global_env.go (34 lines of code) (raw):
package runner
import (
"fmt"
"maps"
"strings"
)
var LogLevelEnvName = "CI_STEPS_LOG_LEVEL"
// GlobalEnvironment sets environment variables that are always available for any step
func GlobalEnvironment(parent *Environment, jobVars map[string]string) (*Environment, error) {
globalEnv := make(map[string]string)
level, err := logLevel(parent, jobVars)
if err != nil {
return nil, fmt.Errorf("init global environment: %w", err)
}
maps.Copy(globalEnv, level)
return parent.AddLexicalScope(NewEnvironment(globalEnv).Values()), nil
}
func logLevel(parent *Environment, jobVars map[string]string) (map[string]string, error) {
level := strings.ToLower(strings.TrimSpace(jobVars[LogLevelEnvName]))
if level == "" {
level = strings.ToLower(strings.TrimSpace(parent.ValueOf(LogLevelEnvName)))
}
switch level {
case "", "info":
return map[string]string{LogLevelEnvName: "info"}, nil
case "debug":
return map[string]string{LogLevelEnvName: "debug"}, nil
case "warn":
return map[string]string{LogLevelEnvName: "warn"}, nil
case "error":
return map[string]string{LogLevelEnvName: "error"}, nil
default:
return nil, fmt.Errorf("log level: %s not supported", level)
}
}