in cli/cli.go [68:125]
func (g *Go2ChefCLI) Run(argv []string) int {
// Set early config flags and parse. As we build our
// own pflag.FlagSet plugins using pflag.*Var() functions
// won't be able to pollute this.
go2chef.InitializeConfigSourceFlags(g.flags)
if err := g.flags.Parse(argv); err != nil {
return 1
}
// Pull in early log level config from flags
logLevel, err := go2chef.StringToLogLevel(g.logLevel)
if err != nil {
go2chef.EarlyLogger.Printf("--log-level/-l value `%s` is invalid: %s", g.logLevel, err)
return 1
}
// Add stdlib early logger
early := stdlib.NewFromLogger(go2chef.EarlyLogger, logLevel, g.logDebugLevel)
// Load actual configuration
cfg, err := go2chef.GetConfig(g.configSourceName, early)
if err != nil {
early.Errorf("config error: %s", err)
return 1
}
// Wire up central logging
go2chef.InitGlobalLogger(cfg.Loggers)
logger = go2chef.GetGlobalLogger()
logger.WriteEvent(&go2chef.Event{
Event: "LOGGING_INITIALIZED",
Component: "go2chef.cli",
})
defer temp.Cleanup(g.preserveTemp)
defer go2chef.ShutdownGlobalLogger()
all_start := time.Now()
for i, step := range cfg.Steps {
start := time.Now()
eventStartStep(i, step.Name(), step.Type())
if err := step.Download(); err != nil {
eventFailStep(i, err, step.Name(), step.Type())
return 1
}
if err := step.Execute(); err != nil {
eventFailStep(i, err, step.Name(), step.Type())
return 1
}
elapsed := int(time.Since(start).Seconds())
eventFinishStep(i, elapsed, step.Name(), step.Type())
}
all_elapsed := int(time.Since(all_start).Seconds())
eventFinishAllSteps(len(cfg.Steps), all_elapsed)
return 0
}