github.com/helmwave/helmwave@v0.36.4-0.20240509190856-b35563eba4c6/pkg/action/rollback.go (about)

     1  package action
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/helmwave/helmwave/pkg/kubedog"
     7  	"github.com/helmwave/helmwave/pkg/plan"
     8  	"github.com/urfave/cli/v2"
     9  )
    10  
    11  var _ Action = (*Rollback)(nil)
    12  
    13  // Rollback is a struct for running 'rollback' command.
    14  type Rollback struct {
    15  	build     *Build
    16  	dog       *kubedog.Config
    17  	autoBuild bool
    18  	revision  int
    19  }
    20  
    21  // Run is the main function for 'rollback' command.
    22  func (i *Rollback) Run(ctx context.Context) error {
    23  	if i.autoBuild {
    24  		if err := i.build.Run(ctx); err != nil {
    25  			return err
    26  		}
    27  	}
    28  	p, err := plan.NewAndImport(ctx, i.build.plandir)
    29  	if err != nil {
    30  		return err
    31  	}
    32  
    33  	return p.Rollback(ctx, i.revision, i.dog)
    34  }
    35  
    36  // Cmd returns 'rollback' *cli.Command.
    37  func (i *Rollback) Cmd() *cli.Command {
    38  	return &cli.Command{
    39  		Name:     "rollback",
    40  		Category: Step2,
    41  		Usage:    "⏮  rollback your plan",
    42  		Flags:    i.flags(),
    43  		Action:   toCtx(i.Run),
    44  	}
    45  }
    46  
    47  // flags return flag set of CLI urfave.
    48  func (i *Rollback) flags() []cli.Flag {
    49  	// Init sub-structures
    50  	i.build = &Build{}
    51  	i.dog = &kubedog.Config{}
    52  
    53  	self := []cli.Flag{
    54  		flagAutoBuild(&i.autoBuild),
    55  		&cli.IntFlag{
    56  			Name:        "revision",
    57  			Value:       -1,
    58  			Usage:       "rollback all releases to this revision",
    59  			Destination: &i.revision,
    60  		},
    61  	}
    62  
    63  	self = append(self, flagsKubedog(i.dog)...)
    64  	self = append(self, i.build.flags()...)
    65  
    66  	return self
    67  }