github.com/replicatedhq/ship@v0.55.0/pkg/lifecycle/runner.go (about) 1 package lifecycle 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/go-kit/kit/log" 8 "github.com/go-kit/kit/log/level" 9 "github.com/pkg/errors" 10 "github.com/replicatedhq/ship/pkg/api" 11 ) 12 13 // A Runner runs a lifecycle using the passed Spec 14 type Runner struct { 15 Logger log.Logger 16 Executor *StepExecutor 17 } 18 19 func NewRunner( 20 logger log.Logger, 21 executor StepExecutor, 22 ) *Runner { 23 return &Runner{ 24 Logger: logger, 25 Executor: &executor, 26 } 27 } 28 29 // Run runs a lifecycle using the passed Spec 30 func (r *Runner) Run(ctx context.Context, release *api.Release) error { 31 level.Debug(r.Logger).Log("event", "lifecycle.execute") 32 33 for idx, step := range release.Spec.Lifecycle.V1 { 34 level.Debug(r.Logger).Log("event", "step.execute", "index", idx, "step", fmt.Sprintf("%v", step)) 35 if err := r.Executor.Execute(ctx, release, &step); err != nil { 36 level.Error(r.Logger).Log("event", "step.execute.fail", "index", idx, "step", fmt.Sprintf("%v", step)) 37 return errors.Wrapf(err, "execute lifecycle step %d", idx) 38 } 39 } 40 return nil 41 }