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 }