Skip to content

Commit 9eafafb

Browse files
authored
Merge pull request #159 from replicatedhq/laverya/use-ve-api-to-list-releases
use the paged /v3 api to list kots releases
2 parents 067ba77 + 79eb905 commit 9eafafb

File tree

6 files changed

+58
-207
lines changed

6 files changed

+58
-207
lines changed

client/release.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ func (c *Client) ListReleases(appID string, appType string) ([]types.ReleaseInfo
7676
return releaseInfos, nil
7777

7878
} else if appType == "kots" {
79-
return c.KotsClient.ListReleases(appID)
79+
return c.KotsHTTPClient.ListReleases(appID)
8080
}
8181

8282
return nil, errors.New("unknown app type")

pkg/kotsclient/kotsclient_test.go

Lines changed: 0 additions & 44 deletions
This file was deleted.

pkg/kotsclient/release.go

Lines changed: 39 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package kotsclient
22

33
import (
4-
"time"
4+
"fmt"
5+
"net/http"
56

67
"github.com/pkg/errors"
78
"github.com/replicatedhq/replicated/pkg/graphql"
89
"github.com/replicatedhq/replicated/pkg/types"
9-
"github.com/replicatedhq/replicated/pkg/util"
1010
)
1111

1212
type GraphQLResponseKotsCreateRelease struct {
@@ -119,75 +119,51 @@ func (c *GraphQLClient) UpdateRelease(appID string, sequence int64, multiyaml st
119119
return nil
120120
}
121121

122-
const allKotsReleases = `
123-
query allKotsReleases($appId: ID!, $pageSize: Int, $currentPage: Int) {
124-
allKotsReleases(appId: $appId, pageSize: $pageSize, currentPage: $currentPage) {
125-
sequence
126-
channelSequence
127-
created
128-
updated
129-
releasedAt
130-
releaseNotes
131-
channels {
132-
id
133-
name
134-
currentVersion
135-
numReleases
136-
}
137-
isReleaseNotEditable
138-
}
139-
}
140-
`
141-
142-
func (c *GraphQLClient) ListReleases(appID string) ([]types.ReleaseInfo, error) {
143-
response := GraphQLResponseListReleases{}
144-
145-
request := graphql.Request{ // todo: move to v3 api and make paged
146-
Query: allKotsReleases,
147-
Variables: map[string]interface{}{
148-
"appId": appID,
149-
},
150-
}
151-
152-
if err := c.ExecuteRequest(request, &response); err != nil {
153-
return nil, err
154-
}
155-
156-
location, err := time.LoadLocation("Local")
157-
if err != nil {
158-
return nil, err
159-
}
160-
161-
releaseInfos := make([]types.ReleaseInfo, 0, 0)
162-
for _, kotsRelease := range response.Data.KotsReleases {
163-
activeChannels := make([]types.Channel, 0, 0)
164-
createdAt, err := util.ParseTime(kotsRelease.CreatedAt)
122+
func (c *VendorV3Client) ListReleases(appID string) ([]types.ReleaseInfo, error) {
123+
allReleases := []types.ReleaseInfo{}
124+
resp := types.ListReleasesResponse{}
125+
done := false
126+
page := 0
127+
for !done {
128+
path := fmt.Sprintf("/v3/app/%s/releases?currentPage=%d&pageSize=20", appID, page)
129+
err := c.DoJSON("GET", path, http.StatusOK, nil, &resp)
165130
if err != nil {
166-
return nil, err
131+
done = true
132+
continue
167133
}
168-
169-
for _, kotsReleaseChannel := range kotsRelease.Channels {
170-
activeChannel := types.Channel{
171-
ID: kotsReleaseChannel.ID,
172-
Name: kotsReleaseChannel.Name,
134+
page += 1
135+
for _, release := range resp.Releases {
136+
activeChannels := make([]types.Channel, 0, 0)
137+
138+
for _, kotsReleaseChannel := range release.Channels {
139+
if kotsReleaseChannel.IsArchived {
140+
continue
141+
}
142+
activeChannel := types.Channel{
143+
ID: kotsReleaseChannel.ID,
144+
Name: kotsReleaseChannel.Name,
145+
}
146+
activeChannels = append(activeChannels, activeChannel)
173147
}
174-
activeChannels = append(activeChannels, activeChannel)
175148

176-
}
177-
releaseInfo := types.ReleaseInfo{
178-
AppID: appID,
179-
CreatedAt: createdAt.In(location),
180-
EditedAt: time.Time{}, // not supported
181-
Editable: false,
182-
Sequence: kotsRelease.Sequence,
183-
Version: "n/a",
184-
ActiveChannels: activeChannels,
149+
150+
newReleaseInfo := types.ReleaseInfo{
151+
ActiveChannels: activeChannels,
152+
AppID: release.AppID,
153+
CreatedAt: release.CreatedAt,
154+
Editable: !release.IsReleaseNotEditable,
155+
Sequence: release.Sequence,
156+
}
157+
allReleases = append(allReleases, newReleaseInfo)
185158
}
186159

187-
releaseInfos = append(releaseInfos, releaseInfo)
160+
if len(resp.Releases) == 0 {
161+
done = true
162+
continue
163+
}
188164
}
189165

190-
return releaseInfos, nil
166+
return allReleases, nil
191167
}
192168

193169
const promoteKotsRelease = `

pkg/kotsclient/release_test.go

Lines changed: 0 additions & 99 deletions
This file was deleted.

pkg/types/channel.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ type Channel struct {
99
ReleaseSequence int64
1010
ReleaseLabel string
1111

12+
IsArchived bool `json:"isArchived"`
13+
1214
InstallCommands *InstallCommands
1315
}
1416

pkg/types/release.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,19 @@ type LintLinePosition struct {
3131
Line int64 `json:"line"`
3232
Column int64 `json:"column"`
3333
}
34+
35+
// ListReleasesResponse contains the JSON releases list
36+
type ListReleasesResponse struct {
37+
Releases []*KotsAppRelease `json:"releases"`
38+
}
39+
40+
type KotsAppRelease struct {
41+
AppID string `json:"appId"`
42+
Sequence int64 `json:"sequence"`
43+
CreatedAt time.Time `json:"created"`
44+
IsArchived bool `json:"isArchived"`
45+
Spec string `json:"spec"`
46+
ReleaseNotes string `json:"releaseNotes"`
47+
IsReleaseNotEditable bool `json:"isReleaseNotEditable"`
48+
Channels []*Channel `json:"channels"`
49+
}

0 commit comments

Comments
 (0)