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  }