diff --git a/cmd/service/service.go b/cmd/service/service.go index d0764e2a5..db1ad8c73 100644 --- a/cmd/service/service.go +++ b/cmd/service/service.go @@ -28,7 +28,12 @@ func startServer() { actionUpgrade := action.NewUpgrade(app.ActionConfig) actionHistory := action.NewHistory(app.ActionConfig) - service := api.NewService(app.Config, new(action.ChartPathOptions), api.NewList(actionList), api.NewInstall(actionInstall), api.NewUpgrader(actionUpgrade), api.NewHistory(actionHistory)) + service := api.NewService(app.Config, + new(action.ChartPathOptions), + api.NewList(actionList), + api.NewInstall(actionInstall), + api.NewUpgrader(actionUpgrade), + api.NewHistory(actionHistory)) router.Handle("/ping", ping.Handler()) router.Handle("/list", api.List(service)) diff --git a/pkg/api/list.go b/pkg/api/list.go index 133c706a4..c7d35ed9e 100644 --- a/pkg/api/list.go +++ b/pkg/api/list.go @@ -2,9 +2,10 @@ package api import ( "encoding/json" - "net/http" - "helm.sh/helm/v3/pkg/api/logger" + "helm.sh/helm/v3/pkg/release" + "helm.sh/helm/v3/pkg/time" + "net/http" ) type ListRequest struct { @@ -13,13 +14,18 @@ type ListRequest struct { } type ListResponse struct { - Error string `json:"error,omitempty"` - Releases []Release + Error string `json:"error,omitempty"` + Releases []Release `json:"releases,omitempty"` } type Release struct { - Name string `json:"release"` - Namespace string `json:"namespace"` + Name string `json:"name"` + Namespace string `json:"namespace"` + Revision int `json:"revision"` + Updated time.Time `json:"updated_at,omitempty"` + Status release.Status `json:"status"` + Chart string `json:"chart"` + AppVersion string `json:"app_version"` } func List(svc Service) http.Handler { diff --git a/pkg/api/service.go b/pkg/api/service.go index ba2dea7e7..3ad1859a7 100644 --- a/pkg/api/service.go +++ b/pkg/api/service.go @@ -161,7 +161,14 @@ func (s Service) List(releaseStatus string) ([]Release, error) { var helmReleases []Release for _, eachRes := range releases { - r := Release{Name: eachRes.Name, Namespace: eachRes.Namespace} + r := Release{Name: eachRes.Name, + Namespace: eachRes.Namespace, + Revision: eachRes.Version, + Updated: eachRes.Info.LastDeployed, + Status: eachRes.Info.Status, + Chart: fmt.Sprintf("%s-%s", eachRes.Chart.Metadata.Name, eachRes.Chart.Metadata.Version), + AppVersion: eachRes.Chart.Metadata.AppVersion, + } helmReleases = append(helmReleases, r) } diff --git a/pkg/api/service_test.go b/pkg/api/service_test.go index 6fee786df..eca340128 100644 --- a/pkg/api/service_test.go +++ b/pkg/api/service_test.go @@ -3,6 +3,7 @@ package api_test import ( "context" "errors" + "helm.sh/helm/v3/pkg/time" "testing" "helm.sh/helm/v3/pkg/action" @@ -285,6 +286,10 @@ func (s *ServiceTestSuite) TestListShouldReturnErrorOnFailureOfListRun() { } func (s *ServiceTestSuite) TestListShouldReturnAllReleasesIfNoFilterIsPassed() { + layout := "2006-01-02T15:04:05.000Z" + str := "2014-11-12T11:45:26.371Z" + timeFromStr, err := time.Parse(layout, str) + s.lister.On("SetState", action.ListAll) s.lister.On("SetStateMask") @@ -292,7 +297,10 @@ func (s *ServiceTestSuite) TestListShouldReturnAllReleasesIfNoFilterIsPassed() { releases = append(releases, &release.Release{Name: "test-release", Namespace: "test-namespace", - Info: &release.Info{Status: release.StatusDeployed}}) + Info: &release.Info{Status: release.StatusDeployed, LastDeployed: timeFromStr}, + Version: 1, + Chart: &chart.Chart{Metadata: &chart.Metadata{Name: "test-release", Version: "0.1", AppVersion: "0.1"}}, + }) s.lister.On("Run").Return(releases, nil) @@ -304,11 +312,23 @@ func (s *ServiceTestSuite) TestListShouldReturnAllReleasesIfNoFilterIsPassed() { require.NotNil(t, res) var response []api.Release - response = append(response, api.Release{"test-release", "test-namespace"}) - - assert.Equal(t, len(res), 1) + response = append(response, api.Release{Name: "test-release", + Namespace: "test-namespace", + Revision: 1, + Updated: timeFromStr, + Status: release.StatusDeployed, + Chart: "test-release-0.1", + AppVersion: "0.1", + }) + + assert.Equal(t, 1, len(res)) assert.Equal(t, "test-release", response[0].Name) assert.Equal(t, "test-namespace", response[0].Namespace) + assert.Equal(t, 1, response[0].Revision) + assert.Equal(t, timeFromStr, response[0].Updated) + assert.Equal(t, release.StatusDeployed, response[0].Status) + assert.Equal(t, "test-release-0.1", response[0].Chart) + assert.Equal(t, "0.1", response[0].AppVersion) s.lister.AssertExpectations(t) }