diff --git a/cmd/helm/get.go b/cmd/helm/get.go index d9c8a2d8c..b9b38524d 100644 --- a/cmd/helm/get.go +++ b/cmd/helm/get.go @@ -71,6 +71,7 @@ func newGetCmd(cfg *action.Configuration, out io.Writer) *cobra.Command { cmd.AddCommand(newGetValuesCmd(cfg, out)) cmd.AddCommand(newGetManifestCmd(cfg, out)) cmd.AddCommand(newGetHooksCmd(cfg, out)) + cmd.AddCommand(newGetNotesCmd(cfg, out)) return cmd } diff --git a/cmd/helm/get_notes.go b/cmd/helm/get_notes.go new file mode 100644 index 000000000..8f1f5ef96 --- /dev/null +++ b/cmd/helm/get_notes.go @@ -0,0 +1,56 @@ +/* +Copyright The Helm Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "io" + + "github.com/spf13/cobra" + + "helm.sh/helm/v3/cmd/helm/require" + "helm.sh/helm/v3/pkg/action" +) + +var getNotesHelp = ` +This command shows notes provided by the chart of a named release. +` + +func newGetNotesCmd(cfg *action.Configuration, out io.Writer) *cobra.Command { + client := action.NewGet(cfg) + + cmd := &cobra.Command{ + Use: "notes RELEASE_NAME [flags]", + Short: "Displays the notes of the named release", + Long: getNotesHelp, + Args: require.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + res, err := client.Run(args[0]) + if err != nil { + return err + } + if len(res.Info.Notes) > 0 { + fmt.Fprintf(out, "NOTES:\n%s\n", res.Info.Notes) + } + return nil + }, + } + + cmd.Flags().IntVar(&client.Version, "revision", 0, "get the named release with revision") + + return cmd +} diff --git a/cmd/helm/get_notes_test.go b/cmd/helm/get_notes_test.go new file mode 100644 index 000000000..18604c9c7 --- /dev/null +++ b/cmd/helm/get_notes_test.go @@ -0,0 +1,46 @@ +/* +Copyright The Helm Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "testing" + + "helm.sh/helm/v3/pkg/release" +) + +func TestGetNotesCmd(t *testing.T) { + tests := []cmdTestCase{ + { + name: "get notes of a deployed release", + cmd: "get notes flummoxed-chickadee", + golden: "output/get-notes.txt", + rels: []*release.Release{ + release.Mock(&release.MockReleaseOptions{ + Name: "flummoxed-chickadee", + Notes: "Release notes", + }), + }, + }, + { + name: "get notes requires release name arg", + cmd: "get notes", + golden: "output/get-notes-no-args.txt", + wantError: true, + }, + } + runTestCmd(t, tests) +} diff --git a/cmd/helm/testdata/output/get-notes-no-args.txt b/cmd/helm/testdata/output/get-notes-no-args.txt new file mode 100644 index 000000000..1a0c20caa --- /dev/null +++ b/cmd/helm/testdata/output/get-notes-no-args.txt @@ -0,0 +1,3 @@ +Error: "helm get notes" requires 1 argument + +Usage: helm get notes RELEASE_NAME [flags] diff --git a/cmd/helm/testdata/output/get-notes.txt b/cmd/helm/testdata/output/get-notes.txt new file mode 100644 index 000000000..85b87d6fb --- /dev/null +++ b/cmd/helm/testdata/output/get-notes.txt @@ -0,0 +1,2 @@ +NOTES: +Release notes diff --git a/pkg/release/mock.go b/pkg/release/mock.go index 0ad18a8da..6748f2afb 100644 --- a/pkg/release/mock.go +++ b/pkg/release/mock.go @@ -45,6 +45,7 @@ type MockReleaseOptions struct { Chart *chart.Chart Status Status Namespace string + Notes string } // Mock creates a mock release object based on options set by MockReleaseOptions. This function should typically not be used outside of testing. @@ -90,6 +91,7 @@ func Mock(opts *MockReleaseOptions) *Release { LastDeployed: date, Status: scode, Description: "Release mock", + Notes: opts.Notes, } return &Release{