github.com/engineyard/workflow-cli@v2.21.6+incompatible/parser/releases.go (about)

     1  package parser
     2  
     3  import (
     4  	"fmt"
     5  	"strconv"
     6  
     7  	"github.com/teamhephy/workflow-cli/cmd"
     8  	docopt "github.com/docopt/docopt-go"
     9  )
    10  
    11  // Releases routes releases commands to their specific function.
    12  func Releases(argv []string, cmdr cmd.Commander) error {
    13  	usage := `
    14  Valid commands for releases:
    15  
    16  releases:list        list an application's release history
    17  releases:info        print information about a specific release
    18  releases:rollback    return to a previous release
    19  
    20  Use 'deis help [command]' to learn more.
    21  `
    22  
    23  	switch argv[0] {
    24  	case "releases:list":
    25  		return releasesList(argv, cmdr)
    26  	case "releases:info":
    27  		return releasesInfo(argv, cmdr)
    28  	case "releases:rollback":
    29  		return releasesRollback(argv, cmdr)
    30  	default:
    31  		if printHelp(argv, usage) {
    32  			return nil
    33  		}
    34  
    35  		if argv[0] == "releases" {
    36  			argv[0] = "releases:list"
    37  			return releasesList(argv, cmdr)
    38  		}
    39  
    40  		PrintUsage(cmdr)
    41  		return nil
    42  	}
    43  }
    44  
    45  func releasesList(argv []string, cmdr cmd.Commander) error {
    46  	usage := `
    47  Lists release history for an application.
    48  
    49  Usage: deis releases:list [options]
    50  
    51  Options:
    52    -a --app=<app>
    53      the uniquely identifiable name for the application.
    54    -l --limit=<num>
    55      the maximum number of results to display, defaults to config setting
    56  `
    57  
    58  	args, err := docopt.Parse(usage, argv, true, "", false, true)
    59  	if err != nil {
    60  		return err
    61  	}
    62  
    63  	results, err := responseLimit(safeGetValue(args, "--limit"))
    64  	if err != nil {
    65  		return err
    66  	}
    67  
    68  	app := safeGetValue(args, "--app")
    69  
    70  	return cmdr.ReleasesList(app, results)
    71  }
    72  
    73  func releasesInfo(argv []string, cmdr cmd.Commander) error {
    74  	usage := `
    75  Prints info about a particular release.
    76  
    77  Usage: deis releases:info <version> [options]
    78  
    79  Arguments:
    80    <version>
    81      the release of the application, such as 'v1'.
    82  
    83  Options:
    84    -a --app=<app>
    85      the uniquely identifiable name for the application.
    86  `
    87  
    88  	args, err := docopt.Parse(usage, argv, true, "", false, true)
    89  	if err != nil {
    90  		return err
    91  	}
    92  
    93  	version, err := versionFromString(args["<version>"].(string))
    94  
    95  	if err != nil {
    96  		return err
    97  	}
    98  
    99  	app := safeGetValue(args, "--app")
   100  
   101  	return cmdr.ReleasesInfo(app, version)
   102  }
   103  
   104  func releasesRollback(argv []string, cmdr cmd.Commander) error {
   105  	usage := `
   106  Rolls back to a previous application release.
   107  
   108  Usage: deis releases:rollback [<version>] [options]
   109  
   110  Arguments:
   111    <version>
   112      the release of the application, such as 'v1'.
   113  
   114  Options:
   115    -a --app=<app>
   116      the uniquely identifiable name of the application.
   117  `
   118  
   119  	args, err := docopt.Parse(usage, argv, true, "", false, true)
   120  	if err != nil {
   121  		return err
   122  	}
   123  
   124  	var version int
   125  
   126  	if args["<version>"] == nil {
   127  		version = -1
   128  	} else {
   129  		version, err = versionFromString(args["<version>"].(string))
   130  
   131  		if err != nil {
   132  			return err
   133  		}
   134  	}
   135  
   136  	app := safeGetValue(args, "--app")
   137  
   138  	return cmdr.ReleasesRollback(app, version)
   139  }
   140  
   141  func versionFromString(version string) (int, error) {
   142  	if version[:1] == "v" {
   143  		if len(version) < 2 {
   144  			return -1, fmt.Errorf("%s is not in the form 'v#'", version)
   145  		}
   146  
   147  		return strconv.Atoi(version[1:])
   148  	}
   149  
   150  	return strconv.Atoi(version)
   151  }