Skip to content

Commit 31578ed

Browse files
committed
Merge pull request #4079 from Joshua-Anderson/add-releases
feat(client-go): add releases endpoint
2 parents 6eb1e43 + 6061ee8 commit 31578ed

6 files changed

Lines changed: 598 additions & 0 deletions

File tree

client-go/cmd/releases.go

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package cmd
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"text/tabwriter"
7+
8+
"github.com/deis/deis/client-go/controller/models/releases"
9+
)
10+
11+
// ReleasesList lists an app's releases.
12+
func ReleasesList(appID string) error {
13+
c, appID, err := load(appID)
14+
15+
if err != nil {
16+
return err
17+
}
18+
19+
releases, err := releases.List(c, appID)
20+
21+
fmt.Printf("=== %s Releases\n", appID)
22+
23+
w := new(tabwriter.Writer)
24+
25+
w.Init(os.Stdout, 0, 8, 1, '\t', 0)
26+
for _, r := range releases {
27+
fmt.Fprintf(w, "v%d\t%s\t%s\n", r.Version, r.Created, r.Summary)
28+
}
29+
w.Flush()
30+
return nil
31+
}
32+
33+
// ReleasesInfo prints info about a specific release.
34+
func ReleasesInfo(appID string, version int) error {
35+
c, appID, err := load(appID)
36+
37+
if err != nil {
38+
return err
39+
}
40+
41+
r, err := releases.Get(c, appID, version)
42+
43+
if err != nil {
44+
return err
45+
}
46+
47+
fmt.Printf("=== %s Release v%d\n", appID, version)
48+
if r.Build != "" {
49+
fmt.Println("build: ", r.Build)
50+
}
51+
fmt.Println("config: ", r.Config)
52+
fmt.Println("owner: ", r.Owner)
53+
fmt.Println("created: ", r.Created)
54+
fmt.Println("summary: ", r.Summary)
55+
fmt.Println("updated: ", r.Updated)
56+
fmt.Println("uuid: ", r.UUID)
57+
58+
return nil
59+
}
60+
61+
// ReleasesRollback rolls an app back to a previous release.
62+
func ReleasesRollback(appID string, version int) error {
63+
c, appID, err := load(appID)
64+
65+
if err != nil {
66+
return err
67+
}
68+
69+
if version == -1 {
70+
fmt.Print("Rolling back one release... ")
71+
} else {
72+
fmt.Printf("Rolling back to v%d... ", version)
73+
}
74+
75+
quit := progress()
76+
newVersion, err := releases.Rollback(c, appID, version)
77+
quit <- true
78+
<-quit
79+
80+
if err != nil {
81+
return err
82+
}
83+
84+
fmt.Printf("done, v%d\n", newVersion)
85+
86+
return nil
87+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package api
2+
3+
// Release is the definition of the release object.
4+
type Release struct {
5+
App string `json:"app"`
6+
Build string `json:"build,omitempty"`
7+
Config string `json:"config"`
8+
Created string `json:"created"`
9+
Owner string `json:"owner"`
10+
Summary string `json:"summary"`
11+
Updated string `json:"updated"`
12+
UUID string `json:"uuid"`
13+
Version int `json:"version"`
14+
}
15+
16+
// Releases is the definition of GET /v1/apps/<app id>/releases/.
17+
type Releases struct {
18+
Count int `json:"count"`
19+
Next int `json:"next"`
20+
Previous int `json:"previous"`
21+
Releases []Release `json:"results"`
22+
}
23+
24+
// ReleaseRollback is the defenition of POST /v1/apps/<app id>/releases/.
25+
type ReleaseRollback struct {
26+
Version int `json:"version"`
27+
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package releases
2+
3+
import (
4+
"encoding/json"
5+
"errors"
6+
"fmt"
7+
8+
"github.com/deis/deis/client-go/controller/api"
9+
"github.com/deis/deis/client-go/controller/client"
10+
)
11+
12+
// List lists an app's releases.
13+
func List(c *client.Client, appID string) ([]api.Release, error) {
14+
u := fmt.Sprintf("/v1/apps/%s/releases/", appID)
15+
16+
body, status, err := c.BasicRequest("GET", u, nil)
17+
18+
if err != nil {
19+
return []api.Release{}, err
20+
}
21+
22+
if status != 200 {
23+
return []api.Release{}, errors.New(body)
24+
}
25+
26+
releases := api.Releases{}
27+
if err = json.Unmarshal([]byte(body), &releases); err != nil {
28+
return []api.Release{}, err
29+
}
30+
31+
return releases.Releases, nil
32+
}
33+
34+
// Get a release of an app.
35+
func Get(c *client.Client, appID string, version int) (api.Release, error) {
36+
u := fmt.Sprintf("/v1/apps/%s/releases/v%d/", appID, version)
37+
38+
body, status, err := c.BasicRequest("GET", u, nil)
39+
40+
if err != nil {
41+
return api.Release{}, err
42+
}
43+
44+
if status != 200 {
45+
return api.Release{}, errors.New(body)
46+
}
47+
48+
release := api.Release{}
49+
if err = json.Unmarshal([]byte(body), &release); err != nil {
50+
return api.Release{}, err
51+
}
52+
53+
return release, nil
54+
}
55+
56+
// Rollback rolls back an app to a previous release.
57+
func Rollback(c *client.Client, appID string, version int) (int, error) {
58+
u := fmt.Sprintf("/v1/apps/%s/releases/rollback/", appID)
59+
60+
req := api.ReleaseRollback{Version: version}
61+
62+
var err error
63+
var reqBody []byte
64+
if version != -1 {
65+
reqBody, err = json.Marshal(req)
66+
67+
if err != nil {
68+
return -1, err
69+
}
70+
}
71+
72+
body, status, err := c.BasicRequest("POST", u, reqBody)
73+
74+
if err != nil {
75+
return -1, err
76+
}
77+
78+
if status != 201 {
79+
return -1, errors.New(body)
80+
}
81+
82+
response := api.ReleaseRollback{}
83+
84+
if err = json.Unmarshal([]byte(body), &response); err != nil {
85+
return -1, err
86+
}
87+
88+
return response.Version, nil
89+
}

0 commit comments

Comments
 (0)