@@ -28,6 +28,7 @@ import (
28
28
"helm.sh/helm/v3/pkg/chart"
29
29
helmkube "helm.sh/helm/v3/pkg/kube"
30
30
"helm.sh/helm/v3/pkg/release"
31
+ "helm.sh/helm/v3/pkg/releaseutil"
31
32
"helm.sh/helm/v3/pkg/storage/driver"
32
33
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
33
34
apiextv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
@@ -52,13 +53,15 @@ func (acgf ActionClientGetterFunc) ActionClientFor(ctx context.Context, obj clie
52
53
53
54
type ActionInterface interface {
54
55
Get (name string , opts ... GetOption ) (* release.Release , error )
56
+ History (name string , opts ... HistoryOption ) ([]* release.Release , error )
55
57
Install (name , namespace string , chrt * chart.Chart , vals map [string ]interface {}, opts ... InstallOption ) (* release.Release , error )
56
58
Upgrade (name , namespace string , chrt * chart.Chart , vals map [string ]interface {}, opts ... UpgradeOption ) (* release.Release , error )
57
59
Uninstall (name string , opts ... UninstallOption ) (* release.UninstallReleaseResponse , error )
58
60
Reconcile (rel * release.Release ) error
59
61
}
60
62
61
63
type GetOption func (* action.Get ) error
64
+ type HistoryOption func (* action.History ) error
62
65
type InstallOption func (* action.Install ) error
63
66
type UpgradeOption func (* action.Upgrade ) error
64
67
type UninstallOption func (* action.Uninstall ) error
@@ -73,6 +76,13 @@ func AppendGetOptions(opts ...GetOption) ActionClientGetterOption {
73
76
}
74
77
}
75
78
79
+ func AppendHistoryOptions (opts ... HistoryOption ) ActionClientGetterOption {
80
+ return func (getter * actionClientGetter ) error {
81
+ getter .defaultHistoryOpts = append (getter .defaultHistoryOpts , opts ... )
82
+ return nil
83
+ }
84
+ }
85
+
76
86
func AppendInstallOptions (opts ... InstallOption ) ActionClientGetterOption {
77
87
return func (getter * actionClientGetter ) error {
78
88
getter .defaultInstallOpts = append (getter .defaultInstallOpts , opts ... )
@@ -139,6 +149,7 @@ type actionClientGetter struct {
139
149
acg ActionConfigGetter
140
150
141
151
defaultGetOpts []GetOption
152
+ defaultHistoryOpts []HistoryOption
142
153
defaultInstallOpts []InstallOption
143
154
defaultUpgradeOpts []UpgradeOption
144
155
defaultUninstallOpts []UninstallOption
@@ -174,6 +185,7 @@ func (hcg *actionClientGetter) ActionClientFor(ctx context.Context, obj client.O
174
185
// on purpose because we want user-provided defaults to be able to override the
175
186
// post-renderer that we automatically configure for the client.
176
187
defaultGetOpts : hcg .defaultGetOpts ,
188
+ defaultHistoryOpts : hcg .defaultHistoryOpts ,
177
189
defaultInstallOpts : append ([]InstallOption {WithInstallPostRenderer (cpr )}, hcg .defaultInstallOpts ... ),
178
190
defaultUpgradeOpts : append ([]UpgradeOption {WithUpgradePostRenderer (cpr )}, hcg .defaultUpgradeOpts ... ),
179
191
defaultUninstallOpts : hcg .defaultUninstallOpts ,
@@ -188,6 +200,7 @@ type actionClient struct {
188
200
conf * action.Configuration
189
201
190
202
defaultGetOpts []GetOption
203
+ defaultHistoryOpts []HistoryOption
191
204
defaultInstallOpts []InstallOption
192
205
defaultUpgradeOpts []UpgradeOption
193
206
defaultUninstallOpts []UninstallOption
@@ -209,6 +222,23 @@ func (c *actionClient) Get(name string, opts ...GetOption) (*release.Release, er
209
222
return get .Run (name )
210
223
}
211
224
225
+ // History returns the release history for a given release name. The releases are sorted
226
+ // by revision number in descending order.
227
+ func (c * actionClient ) History (name string , opts ... HistoryOption ) ([]* release.Release , error ) {
228
+ history := action .NewHistory (c .conf )
229
+ for _ , o := range concat (c .defaultHistoryOpts , opts ... ) {
230
+ if err := o (history ); err != nil {
231
+ return nil , err
232
+ }
233
+ }
234
+ rels , err := history .Run (name )
235
+ if err != nil {
236
+ return nil , err
237
+ }
238
+ releaseutil .Reverse (rels , releaseutil .SortByRevision )
239
+ return rels , nil
240
+ }
241
+
212
242
func (c * actionClient ) Install (name , namespace string , chrt * chart.Chart , vals map [string ]interface {}, opts ... InstallOption ) (* release.Release , error ) {
213
243
install := action .NewInstall (c .conf )
214
244
for _ , o := range concat (c .defaultInstallOpts , opts ... ) {
0 commit comments