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 }