2019-12-09 17:56:02 +00:00
|
|
|
package helm
|
|
|
|
|
|
|
|
import (
|
|
|
|
"errors"
|
|
|
|
"github.com/pelotech/drone-helm3/internal/run"
|
|
|
|
)
|
|
|
|
|
2019-12-09 18:52:41 +00:00
|
|
|
// A Step is one step in the plan.
|
2019-12-09 17:56:02 +00:00
|
|
|
type Step interface {
|
|
|
|
Run() error
|
|
|
|
}
|
|
|
|
|
2019-12-09 18:52:41 +00:00
|
|
|
// A Plan is a series of steps to perform.
|
2019-12-09 17:56:02 +00:00
|
|
|
type Plan struct {
|
|
|
|
steps []Step
|
|
|
|
}
|
|
|
|
|
2019-12-09 18:52:41 +00:00
|
|
|
// NewPlan makes a plan for running a helm operation.
|
2019-12-09 17:56:02 +00:00
|
|
|
func NewPlan(cfg Config) (*Plan, error) {
|
|
|
|
p := Plan{}
|
|
|
|
switch cfg.Command {
|
|
|
|
case "upgrade":
|
|
|
|
steps, err := upgrade(cfg)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
p.steps = steps
|
|
|
|
case "delete":
|
|
|
|
return nil, errors.New("not implemented")
|
|
|
|
case "lint":
|
|
|
|
return nil, errors.New("not implemented")
|
|
|
|
case "help":
|
|
|
|
return nil, errors.New("not implemented")
|
|
|
|
default:
|
|
|
|
switch cfg.DroneEvent {
|
|
|
|
case "push", "tag", "deployment", "pull_request", "promote", "rollback":
|
|
|
|
steps, err := upgrade(cfg)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
p.steps = steps
|
|
|
|
default:
|
|
|
|
return nil, errors.New("not implemented")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return &p, nil
|
|
|
|
}
|
|
|
|
|
2019-12-09 18:52:41 +00:00
|
|
|
// Execute runs each step in the plan, aborting and reporting on error
|
2019-12-09 17:56:02 +00:00
|
|
|
func (p *Plan) Execute() error {
|
|
|
|
for _, step := range p.steps {
|
|
|
|
if err := step.Run(); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func upgrade(cfg Config) ([]Step, error) {
|
|
|
|
steps := make([]Step, 0)
|
|
|
|
steps = append(steps, run.NewUpgrade(cfg.Release, cfg.Chart))
|
|
|
|
|
|
|
|
return steps, nil
|
|
|
|
}
|