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  }