github.com/webonyx/up@v0.7.4-0.20180808230834-91b94e551323/internal/cli/rollback/rollback.go (about) 1 package rollback 2 3 import ( 4 "github.com/pkg/errors" 5 "github.com/tj/go/term" 6 "github.com/tj/kingpin" 7 8 "github.com/apex/up/internal/cli/root" 9 "github.com/apex/up/internal/stats" 10 "github.com/apex/up/internal/util" 11 ) 12 13 func init() { 14 cmd := root.Command("rollback", "Rollback to a previous deployment.") 15 cmd.Example(`up rollback`, "Rollback to the previous staging version.") 16 cmd.Example(`up rollback 15c46ba`, "Rollback to a specific git commit") 17 cmd.Example(`up rollback v1.7.2`, "Rollback to a specific git tag") 18 cmd.Example(`up rollback -s production`, "Rollback to the previous production version.") 19 cmd.Example(`up rollback -s production 15c46ba`, "Rollback to a specific git commit") 20 cmd.Example(`up rollback -s production v1.7.2`, "Rollback to a specific git tag") 21 22 stage := cmd.Flag("stage", "Target stage name.").Short('s').Default("staging").String() 23 version := cmd.Arg("version", "Target version for rollback.").String() 24 25 cmd.Action(func(_ *kingpin.ParseContext) error { 26 c, p, err := root.Init() 27 if err != nil { 28 return errors.Wrap(err, "initializing") 29 } 30 31 defer util.Pad()() 32 33 // TODO: multi-region 34 r := c.Regions[0] 35 v := *version 36 37 util.Log("Rolling back %s", *stage) 38 39 stats.Track("Rollback", map[string]interface{}{ 40 "has_version": v != "", 41 "stage": *stage, 42 }) 43 44 err = p.Rollback(r, *stage, v) 45 if util.IsNotFound(err) { 46 term.MoveUp(1) 47 term.ClearLine() 48 return errors.Errorf("Rollback failed – version %q not found", *version) 49 } 50 51 if err != nil { 52 return errors.Wrap(err, "rollback") 53 } 54 55 util.LogClear("Rollback complete") 56 57 return nil 58 }) 59 }