diff --git a/Makefile b/Makefile index 68ce5f93..278b64ba 100644 --- a/Makefile +++ b/Makefile @@ -6,10 +6,6 @@ HELM_3_PLUGINS := $(shell helm env HELM_PLUGINS) PKG:= github.com/databus23/helm-diff/v3 LDFLAGS := -X $(PKG)/cmd.Version=$(VERSION) -# Clear the "unreleased" string in BuildMetadata -LDFLAGS += -X k8s.io/helm/pkg/version.BuildMetadata= -LDFLAGS += -X k8s.io/helm/pkg/version.Version=$(shell ./scripts/dep-helm-version.sh) - GO ?= go .PHONY: format diff --git a/cmd/helm.go b/cmd/helm.go index 91962441..8802ce50 100644 --- a/cmd/helm.go +++ b/cmd/helm.go @@ -6,18 +6,8 @@ package cmd import ( "errors" "fmt" - "io/ioutil" "os" - "path/filepath" "strings" - - "github.com/ghodss/yaml" - "google.golang.org/grpc" - "k8s.io/helm/pkg/downloader" - "k8s.io/helm/pkg/getter" - "k8s.io/helm/pkg/helm/environment" - "k8s.io/helm/pkg/helm/helmpath" - "k8s.io/helm/pkg/strvals" ) /////////////// Source: cmd/helm/install.go ///////////////////////// @@ -57,143 +47,6 @@ func (v *valueFiles) Set(value string) error { return nil } -func locateChartPath(name, version string, verify bool, keyring string) (string, error) { - name = strings.TrimSpace(name) - version = strings.TrimSpace(version) - if fi, err := os.Stat(name); err == nil { - abs, err := filepath.Abs(name) - if err != nil { - return abs, err - } - if verify { - if fi.IsDir() { - return "", errors.New("cannot verify a directory") - } - if _, err := downloader.VerifyChart(abs, keyring); err != nil { - return "", err - } - } - return abs, nil - } - if filepath.IsAbs(name) || strings.HasPrefix(name, ".") { - return name, fmt.Errorf("path %q not found", name) - } - - crepo := filepath.Join(helmpath.Home(homePath()).Repository(), name) - if _, err := os.Stat(crepo); err == nil { - return filepath.Abs(crepo) - } - - dl := downloader.ChartDownloader{ - HelmHome: helmpath.Home(homePath()), - Out: os.Stdout, - Keyring: keyring, - Getters: getter.All(environment.EnvSettings{}), - } - if verify { - dl.Verify = downloader.VerifyAlways - } - - filename, _, err := dl.DownloadTo(name, version, helmpath.Home(homePath()).Archive()) - if err == nil { - lname, err := filepath.Abs(filename) - if err != nil { - return filename, err - } - return lname, nil - } - - return filename, err -} - -// Merges source and destination map, preferring values from the source map -func mergeValues(dest map[string]interface{}, src map[string]interface{}) map[string]interface{} { - for k, v := range src { - // If the key doesn't exist already, then just set the key to that value - if _, exists := dest[k]; !exists { - dest[k] = v - continue - } - nextMap, ok := v.(map[string]interface{}) - // If it isn't another map, overwrite the value - if !ok { - dest[k] = v - continue - } - // If the key doesn't exist already, then just set the key to that value - if _, exists := dest[k]; !exists { - dest[k] = nextMap - continue - } - // Edge case: If the key exists in the destination, but isn't a map - destMap, isMap := dest[k].(map[string]interface{}) - // If the source map has a map for this key, prefer it - if !isMap { - dest[k] = v - continue - } - // If we got to this point, it is a map in both, so merge them - dest[k] = mergeValues(destMap, nextMap) - } - return dest -} - -/////////////// Source: cmd/helm/upgrade.go ///////////////////////// - -func (d *diffCmd) vals() ([]byte, error) { - base := map[string]interface{}{} - - // User specified a values files via -f/--values - for _, filePath := range d.valueFiles { - currentMap := map[string]interface{}{} - - var bytes []byte - var err error - if strings.TrimSpace(filePath) == "-" { - bytes, err = ioutil.ReadAll(os.Stdin) - } else { - bytes, err = ioutil.ReadFile(filePath) - } - if err != nil { - return []byte{}, err - } - - if err := yaml.Unmarshal(bytes, ¤tMap); err != nil { - return []byte{}, fmt.Errorf("failed to parse %s: %s", filePath, err) - } - // Merge with the previous map - base = mergeValues(base, currentMap) - } - - // User specified a value via --set - for _, value := range d.values { - if err := strvals.ParseInto(value, base); err != nil { - return []byte{}, fmt.Errorf("failed parsing --set data: %s", err) - } - } - - // User specified a value via --set-string - for _, value := range d.stringValues { - if err := strvals.ParseIntoString(value, base); err != nil { - return []byte{}, fmt.Errorf("failed parsing --set-string data: %s", err) - } - } - - // User specified a value via --set-file - for _, value := range d.fileValues { - reader := func(rs []rune) (interface{}, error) { - bytes, err := ioutil.ReadFile(string(rs)) - return string(bytes), err - } - - if err := strvals.ParseIntoFile(value, base, reader); err != nil { - return []byte{}, fmt.Errorf("failed parsing --set-file data: %s", err) - } - } - - return yaml.Marshal(base) -} - /////////////// Source: cmd/helm/helm.go //////////////////////////// func checkArgsLength(argsReceived int, requiredArgs ...string) error { @@ -207,17 +60,3 @@ func checkArgsLength(argsReceived int, requiredArgs ...string) error { } return nil } - -func homePath() string { - return os.Getenv("HELM_HOME") -} - -func prettyError(err error) error { - if err == nil { - return nil - } - // This is ridiculous. Why is 'grpc.rpcError' not exported? The least they - // could do is throw an interface on the lib that would let us get back - // the desc. Instead, we have to pass ALL errors through this. - return errors.New(grpc.ErrorDesc(err)) -} diff --git a/cmd/helm3.go b/cmd/helm3.go index b19b2b20..09f61d6d 100644 --- a/cmd/helm3.go +++ b/cmd/helm3.go @@ -3,7 +3,7 @@ package cmd import ( "bytes" "fmt" - "io/ioutil" + "io" "os" "os/exec" "regexp" @@ -110,7 +110,7 @@ func (d *diffCmd) template(isUpgrade bool) ([]byte, error) { // See https://medium.com/@kcatstack/understand-helm-upgrade-flags-reset-values-reuse-values-6e58ac8f127e shouldDefaultReusingValues := isUpgrade && len(d.values) == 0 && len(d.stringValues) == 0 && len(d.valueFiles) == 0 && len(d.fileValues) == 0 if (d.reuseValues || shouldDefaultReusingValues) && !d.resetValues && !d.dryRun { - tmpfile, err := ioutil.TempFile("", "existing-values") + tmpfile, err := os.CreateTemp("", "existing-values") if err != nil { return nil, err } @@ -128,12 +128,12 @@ func (d *diffCmd) template(isUpgrade bool) ([]byte, error) { } for _, valueFile := range d.valueFiles { if strings.TrimSpace(valueFile) == "-" { - bytes, err := ioutil.ReadAll(os.Stdin) + bytes, err := io.ReadAll(os.Stdin) if err != nil { return nil, err } - tmpfile, err := ioutil.TempFile("", "helm-diff-stdin-values") + tmpfile, err := os.CreateTemp("", "helm-diff-stdin-values") if err != nil { return nil, err } diff --git a/cmd/helpers.go b/cmd/helpers.go index 07f472f7..16e767e8 100644 --- a/cmd/helpers.go +++ b/cmd/helpers.go @@ -7,32 +7,19 @@ import ( "path/filepath" "strings" - flag "github.com/spf13/pflag" "k8s.io/client-go/util/homedir" - "k8s.io/helm/pkg/helm" - helm_env "k8s.io/helm/pkg/helm/environment" - "k8s.io/helm/pkg/tlsutil" ) const ( - tlsCaCertDefault = "$HELM_HOME/ca.pem" - tlsCertDefault = "$HELM_HOME/cert.pem" - tlsKeyDefault = "$HELM_HOME/key.pem" - helm2TestSuccessHook = "test-success" helm3TestHook = "test" ) var ( - settings helm_env.EnvSettings // DefaultHelmHome to hold default home path of .helm dir DefaultHelmHome = filepath.Join(homedir.HomeDir(), ".helm") ) -func isHelm3() bool { - return os.Getenv("TILLER_HOST") == "" -} - func isDebug() bool { return os.Getenv("HELM_DEBUG") == "true" } @@ -42,47 +29,6 @@ func debugPrint(format string, a ...interface{}) { } } -func addCommonCmdOptions(f *flag.FlagSet) { - settings.AddFlagsTLS(f) - settings.InitTLS(f) - - f.StringVar((*string)(&settings.Home), "home", DefaultHelmHome, "location of your Helm config. Overrides $HELM_HOME") -} - -func createHelmClient() helm.Interface { - options := []helm.Option{helm.Host(os.Getenv("TILLER_HOST")), helm.ConnectTimeout(int64(30))} - - if settings.TLSVerify || settings.TLSEnable { - tlsopts := tlsutil.Options{ - ServerName: settings.TLSServerName, - KeyFile: settings.TLSKeyFile, - CertFile: settings.TLSCertFile, - InsecureSkipVerify: true, - } - - if settings.TLSVerify { - tlsopts.CaCertFile = settings.TLSCaCertFile - tlsopts.InsecureSkipVerify = false - } - - tlscfg, err := tlsutil.ClientConfig(tlsopts) - if err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(2) - } - - options = append(options, helm.WithTLS(tlscfg)) - } - - return helm.NewClient(options...) -} - -func expandTLSPaths() { - settings.TLSCaCertFile = os.ExpandEnv(settings.TLSCaCertFile) - settings.TLSCertFile = os.ExpandEnv(settings.TLSCertFile) - settings.TLSKeyFile = os.ExpandEnv(settings.TLSKeyFile) -} - func outputWithRichError(cmd *exec.Cmd) ([]byte, error) { debugPrint("Executing %s", strings.Join(cmd.Args, " ")) output, err := cmd.Output() diff --git a/cmd/release.go b/cmd/release.go index 861c61a2..30a50efe 100644 --- a/cmd/release.go +++ b/cmd/release.go @@ -7,14 +7,12 @@ import ( "strings" "github.com/spf13/cobra" - "k8s.io/helm/pkg/helm" "github.com/databus23/helm-diff/v3/diff" "github.com/databus23/helm-diff/v3/manifest" ) type release struct { - client helm.Interface detailedExitCode bool releases []string includeTests bool @@ -41,9 +39,6 @@ func releaseCmd() *cobra.Command { Use: "release [flags] RELEASE release1 [release2]", Short: "Shows diff between release's manifests", Long: releaseCmdLongUsage, - PreRun: func(*cobra.Command, []string) { - expandTLSPaths() - }, RunE: func(cmd *cobra.Command, args []string) error { // Suppress the command usage on error. See #77 for more info cmd.SilenceUsage = true @@ -61,13 +56,7 @@ func releaseCmd() *cobra.Command { ProcessDiffOptions(cmd.Flags(), &diff.Options) diff.releases = args[0:] - if isHelm3() { - return diff.differentiateHelm3() - } - if diff.client == nil { - diff.client = createHelmClient() - } - return diff.differentiate() + return diff.differentiateHelm3() }, } @@ -78,10 +67,6 @@ func releaseCmd() *cobra.Command { releaseCmd.SuggestionsMinimumDistance = 1 - if !isHelm3() { - addCommonCmdOptions(releaseCmd.Flags()) - } - return releaseCmd } @@ -139,34 +124,3 @@ func (d *release) differentiateHelm3() error { } return nil } - -func (d *release) differentiate() error { - - releaseResponse1, err := d.client.ReleaseContent(d.releases[0]) - if err != nil { - return prettyError(err) - } - - releaseResponse2, err := d.client.ReleaseContent(d.releases[1]) - if err != nil { - return prettyError(err) - } - - if releaseResponse1.Release.Chart.Metadata.Name == releaseResponse2.Release.Chart.Metadata.Name { - seenAnyChanges := diff.Releases( - manifest.ParseRelease(releaseResponse1.Release, d.includeTests, d.normalizeManifests), - manifest.ParseRelease(releaseResponse2.Release, d.includeTests, d.normalizeManifests), - &d.Options, - os.Stdout) - - if d.detailedExitCode && seenAnyChanges { - return Error{ - error: errors.New("identified at least one change, exiting with non-zero exit code (detailed-exitcode parameter enabled)"), - Code: 2, - } - } - } else { - fmt.Printf("Error : Incomparable Releases \n Unable to compare releases from two different charts \"%s\", \"%s\". \n try helm diff release --help to know more \n", releaseResponse1.Release.Chart.Metadata.Name, releaseResponse2.Release.Chart.Metadata.Name) - } - return nil -} diff --git a/cmd/revision.go b/cmd/revision.go index 5200c76a..4448b8cf 100644 --- a/cmd/revision.go +++ b/cmd/revision.go @@ -7,7 +7,6 @@ import ( "strconv" "github.com/spf13/cobra" - "k8s.io/helm/pkg/helm" "github.com/databus23/helm-diff/v3/diff" "github.com/databus23/helm-diff/v3/manifest" @@ -15,7 +14,6 @@ import ( type revision struct { release string - client helm.Interface detailedExitCode bool revisions []string includeTests bool @@ -45,9 +43,6 @@ func revisionCmd() *cobra.Command { Use: "revision [flags] RELEASE REVISION1 [REVISION2]", Short: "Shows diff between revision's manifests", Long: revisionCmdLongUsage, - PreRun: func(*cobra.Command, []string) { - expandTLSPaths() - }, RunE: func(cmd *cobra.Command, args []string) error { // Suppress the command usage on error. See #77 for more info cmd.SilenceUsage = true @@ -68,13 +63,7 @@ func revisionCmd() *cobra.Command { diff.release = args[0] diff.revisions = args[1:] - if isHelm3() { - return diff.differentiateHelm3() - } - if diff.client == nil { - diff.client = createHelmClient() - } - return diff.differentiate() + return diff.differentiateHelm3() }, } @@ -85,10 +74,6 @@ func revisionCmd() *cobra.Command { revisionCmd.SuggestionsMinimumDistance = 1 - if !isHelm3() { - addCommonCmdOptions(revisionCmd.Flags()) - } - return revisionCmd } @@ -127,12 +112,12 @@ func (d *revision) differentiateHelm3() error { revisionResponse1, err := getRevision(d.release, revision1, namespace) if err != nil { - return prettyError(err) + return err } revisionResponse2, err := getRevision(d.release, revision2, namespace) if err != nil { - return prettyError(err) + return err } seenAnyChanges := diff.Manifests( @@ -154,62 +139,3 @@ func (d *revision) differentiateHelm3() error { return nil } - -func (d *revision) differentiate() error { - - switch len(d.revisions) { - case 1: - releaseResponse, err := d.client.ReleaseContent(d.release) - - if err != nil { - return prettyError(err) - } - - revision, _ := strconv.Atoi(d.revisions[0]) - revisionResponse, err := d.client.ReleaseContent(d.release, helm.ContentReleaseVersion(int32(revision))) - if err != nil { - return prettyError(err) - } - - diff.Manifests( - manifest.ParseRelease(revisionResponse.Release, d.includeTests, d.normalizeManifests), - manifest.ParseRelease(releaseResponse.Release, d.includeTests, d.normalizeManifests), - &d.Options, - os.Stdout) - - case 2: - revision1, _ := strconv.Atoi(d.revisions[0]) - revision2, _ := strconv.Atoi(d.revisions[1]) - if revision1 > revision2 { - revision1, revision2 = revision2, revision1 - } - - revisionResponse1, err := d.client.ReleaseContent(d.release, helm.ContentReleaseVersion(int32(revision1))) - if err != nil { - return prettyError(err) - } - - revisionResponse2, err := d.client.ReleaseContent(d.release, helm.ContentReleaseVersion(int32(revision2))) - if err != nil { - return prettyError(err) - } - - seenAnyChanges := diff.Manifests( - manifest.ParseRelease(revisionResponse1.Release, d.includeTests, d.normalizeManifests), - manifest.ParseRelease(revisionResponse2.Release, d.includeTests, d.normalizeManifests), - &d.Options, - os.Stdout) - - if d.detailedExitCode && seenAnyChanges { - return Error{ - error: errors.New("identified at least one change, exiting with non-zero exit code (detailed-exitcode parameter enabled)"), - Code: 2, - } - } - - default: - return errors.New("Invalid Arguments") - } - - return nil -} diff --git a/cmd/rollback.go b/cmd/rollback.go index b187cbe0..3e93b8f9 100644 --- a/cmd/rollback.go +++ b/cmd/rollback.go @@ -7,7 +7,6 @@ import ( "strconv" "github.com/spf13/cobra" - "k8s.io/helm/pkg/helm" "github.com/databus23/helm-diff/v3/diff" "github.com/databus23/helm-diff/v3/manifest" @@ -15,7 +14,6 @@ import ( type rollback struct { release string - client helm.Interface detailedExitCode bool revisions []string includeTests bool @@ -37,9 +35,6 @@ func rollbackCmd() *cobra.Command { Short: "Show a diff explaining what a helm rollback could perform", Long: rollbackCmdLongUsage, Example: " helm diff rollback my-release 2", - PreRun: func(*cobra.Command, []string) { - expandTLSPaths() - }, RunE: func(cmd *cobra.Command, args []string) error { // Suppress the command usage on error. See #77 for more info cmd.SilenceUsage = true @@ -58,15 +53,7 @@ func rollbackCmd() *cobra.Command { diff.release = args[0] diff.revisions = args[1:] - if isHelm3() { - return diff.backcastHelm3() - } - - if diff.client == nil { - diff.client = createHelmClient() - } - - return diff.backcast() + return diff.backcastHelm3() }, } @@ -77,10 +64,6 @@ func rollbackCmd() *cobra.Command { rollbackCmd.SuggestionsMinimumDistance = 1 - if !isHelm3() { - addCommonCmdOptions(rollbackCmd.Flags()) - } - return rollbackCmd } @@ -120,36 +103,3 @@ func (d *rollback) backcastHelm3() error { return nil } - -func (d *rollback) backcast() error { - - // get manifest of the latest release - releaseResponse, err := d.client.ReleaseContent(d.release) - - if err != nil { - return prettyError(err) - } - - // get manifest of the release to rollback - revision, _ := strconv.Atoi(d.revisions[0]) - revisionResponse, err := d.client.ReleaseContent(d.release, helm.ContentReleaseVersion(int32(revision))) - if err != nil { - return prettyError(err) - } - - // create a diff between the current manifest and the version of the manifest that a user is intended to rollback - seenAnyChanges := diff.Manifests( - manifest.ParseRelease(releaseResponse.Release, d.includeTests, d.normalizeManifests), - manifest.ParseRelease(revisionResponse.Release, d.includeTests, d.normalizeManifests), - &d.Options, - os.Stdout) - - if d.detailedExitCode && seenAnyChanges { - return Error{ - error: errors.New("identified at least one change, exiting with non-zero exit code (detailed-exitcode parameter enabled)"), - Code: 2, - } - } - - return nil -} diff --git a/cmd/root.go b/cmd/root.go index 2ea5d085..231512a9 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -7,7 +7,7 @@ import ( "github.com/mgutz/ansi" "github.com/spf13/cobra" - "golang.org/x/crypto/ssh/terminal" + "golang.org/x/term" ) const rootCmdLongUsage = ` @@ -67,7 +67,7 @@ func New() *cobra.Command { if nc || (fc != nil && !*fc) { ansi.DisableColors(true) } else if !cmd.Flags().Changed("no-color") && fc == nil { - term := terminal.IsTerminal(int(os.Stdout.Fd())) + term := term.IsTerminal(int(os.Stdout.Fd())) // https://github.com/databus23/helm-diff/issues/281 dumb := os.Getenv("TERM") == "dumb" ansi.DisableColors(!term || dumb) diff --git a/cmd/upgrade.go b/cmd/upgrade.go index 3c7f7e59..5d2e3f76 100644 --- a/cmd/upgrade.go +++ b/cmd/upgrade.go @@ -25,7 +25,6 @@ import ( "sigs.k8s.io/yaml" "github.com/spf13/cobra" - "k8s.io/helm/pkg/helm" "github.com/databus23/helm-diff/v3/diff" "github.com/databus23/helm-diff/v3/manifest" @@ -36,7 +35,6 @@ type diffCmd struct { chart string chartVersion string chartRepo string - client helm.Interface detailedExitCode bool devel bool disableValidation bool @@ -123,9 +121,6 @@ func newChartCommand() *cobra.Command { Args: func(cmd *cobra.Command, args []string) error { return checkArgsLength(len(args), "release name", "chart path") }, - PreRun: func(*cobra.Command, []string) { - expandTLSPaths() - }, RunE: func(cmd *cobra.Command, args []string) error { // Suppress the command usage on error. See #77 for more info cmd.SilenceUsage = true @@ -165,13 +160,7 @@ func newChartCommand() *cobra.Command { diff.release = args[0] diff.chart = args[1] - if isHelm3() { - return diff.runHelm3() - } - if diff.client == nil { - diff.client = createHelmClient() - } - return diff.run() + return diff.runHelm3() }, FParseErrWhitelist: cobra.FParseErrWhitelist{ UnknownFlags: os.Getenv("HELM_DIFF_IGNORE_UNKNOWN_FLAGS") == "true", @@ -212,14 +201,6 @@ func newChartCommand() *cobra.Command { AddDiffOptions(f, &diff.Options) - if !isHelm3() { - f.StringVar(&diff.namespace, "namespace", "default", "namespace to assume the release to be installed into") - } - - if !isHelm3() { - addCommonCmdOptions(f) - } - return cmd } @@ -419,92 +400,6 @@ func genManifest(original, target kube.ResourceList) ([]byte, []byte, error) { return releaseManifest, installManifest, err } -func (d *diffCmd) run() error { - if d.chartVersion == "" && d.devel { - d.chartVersion = ">0.0.0-0" - } - - chartPath, err := locateChartPath(d.chart, d.chartVersion, false, "") - if err != nil { - return err - } - - if err := d.valueFiles.Valid(); err != nil { - return err - } - - rawVals, err := d.vals() - if err != nil { - return err - } - - releaseResponse, err := d.client.ReleaseContent(d.release) - - var newInstall bool - if err != nil && strings.Contains(err.Error(), fmt.Sprintf("release: %q not found", d.release)) { - if d.isAllowUnreleased() { - fmt.Printf("********************\n\n\tRelease was not present in Helm. Diff will show entire contents as new.\n\n********************\n") - newInstall = true - err = nil - } else { - fmt.Printf("********************\n\n\tRelease was not present in Helm. Include the `--allow-unreleased` to perform diff without exiting in error.\n\n********************\n") - } - - } - - if err != nil { - return prettyError(err) - } - - var currentSpecs, newSpecs map[string]*manifest.MappingResult - if newInstall { - installResponse, err := d.client.InstallRelease( - chartPath, - d.namespace, - helm.ReleaseName(d.release), - helm.ValueOverrides(rawVals), - helm.InstallDryRun(true), - ) - if err != nil { - return prettyError(err) - } - - currentSpecs = make(map[string]*manifest.MappingResult) - newSpecs = manifest.Parse(installResponse.Release.Manifest, installResponse.Release.Namespace, d.normalizeManifests) - } else { - upgradeResponse, err := d.client.UpdateRelease( - d.release, - chartPath, - helm.UpdateValueOverrides(rawVals), - helm.ReuseValues(d.reuseValues), - helm.ResetValues(d.resetValues), - helm.UpgradeDryRun(true), - ) - if err != nil { - return prettyError(err) - } - - if d.noHooks { - currentSpecs = manifest.Parse(releaseResponse.Release.Manifest, releaseResponse.Release.Namespace, d.normalizeManifests) - newSpecs = manifest.Parse(upgradeResponse.Release.Manifest, upgradeResponse.Release.Namespace, d.normalizeManifests) - } else { - currentSpecs = manifest.ParseRelease(releaseResponse.Release, d.includeTests, d.normalizeManifests) - newSpecs = manifest.ParseRelease(upgradeResponse.Release, d.includeTests, d.normalizeManifests) - } - } - - seenAnyChanges := diff.Manifests(currentSpecs, newSpecs, &d.Options, os.Stdout) - - if d.detailedExitCode && seenAnyChanges { - return Error{ - error: errors.New("identified at least one change, exiting with non-zero exit code (detailed-exitcode parameter enabled)"), - Code: 2, - } - } - - return nil -} - func createPatch(originalObj, currentObj runtime.Object, target *resource.Info) ([]byte, types.PatchType, error) { oldData, err := json.Marshal(originalObj) if err != nil { diff --git a/diff/diff.go b/diff/diff.go index 42bb5d21..cda0f9b3 100644 --- a/diff/diff.go +++ b/diff/diff.go @@ -270,7 +270,7 @@ func printDiffRecords(suppressedKinds []string, kind string, context int, diffs if ckind == kind { str := fmt.Sprintf("+ Changes suppressed on sensitive content of type %s\n", kind) - fmt.Fprintf(to, ansi.Color(str, "yellow")) + fmt.Fprint(to, ansi.Color(str, "yellow")) return } } diff --git a/go.mod b/go.mod index aa83cc47..68b8cb49 100644 --- a/go.mod +++ b/go.mod @@ -6,16 +6,14 @@ require ( github.com/Masterminds/semver v1.5.0 github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a github.com/evanphx/json-patch v5.6.0+incompatible - github.com/ghodss/yaml v1.0.0 - github.com/huandu/xstrings v1.4.0 // indirect github.com/json-iterator/go v1.1.12 github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d github.com/pkg/errors v0.9.1 github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.8.2 - golang.org/x/crypto v0.5.0 - google.golang.org/grpc v1.53.0 + golang.org/x/crypto v0.5.0 // indirect + google.golang.org/grpc v1.53.0 // indirect gopkg.in/yaml.v2 v2.4.0 helm.sh/helm/v3 v3.11.3 k8s.io/api v0.26.2 @@ -23,7 +21,6 @@ require ( k8s.io/apimachinery v0.26.2 k8s.io/cli-runtime v0.26.0 k8s.io/client-go v0.26.2 - k8s.io/helm v2.16.12+incompatible sigs.k8s.io/yaml v1.3.0 ) @@ -31,6 +28,7 @@ require ( github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 github.com/homeport/dyff v1.5.7 + golang.org/x/term v0.7.0 ) require ( @@ -40,7 +38,6 @@ require ( github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver/v3 v3.2.0 // indirect - github.com/Masterminds/sprig v2.22.0+incompatible // indirect github.com/Masterminds/sprig/v3 v3.2.3 // indirect github.com/Masterminds/squirrel v1.5.3 // indirect github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 // indirect @@ -85,6 +82,7 @@ require ( github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/huandu/xstrings v1.4.0 // indirect github.com/imdario/mergo v0.3.13 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmoiron/sqlx v1.3.5 // indirect @@ -141,7 +139,6 @@ require ( golang.org/x/oauth2 v0.4.0 // indirect golang.org/x/sync v0.1.0 // indirect golang.org/x/sys v0.7.0 // indirect - golang.org/x/term v0.7.0 // indirect golang.org/x/text v0.9.0 // indirect golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect google.golang.org/appengine v1.6.7 // indirect diff --git a/go.sum b/go.sum index e18e0d5b..b7f6f1e4 100644 --- a/go.sum +++ b/go.sum @@ -55,8 +55,6 @@ github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF0 github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= -github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60= -github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Masterminds/sprig/v3 v3.2.1/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA= github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM= @@ -173,7 +171,6 @@ github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUork github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= @@ -1135,8 +1132,6 @@ k8s.io/client-go v0.26.2 h1:s1WkVujHX3kTp4Zn4yGNFK+dlDXy1bAAkIl+cFAiuYI= k8s.io/client-go v0.26.2/go.mod h1:u5EjOuSyBa09yqqyY7m3abZeovO/7D/WehVVlZ2qcqU= k8s.io/component-base v0.26.2 h1:IfWgCGUDzrD6wLLgXEstJKYZKAFS2kO+rBRi0p3LqcI= k8s.io/component-base v0.26.2/go.mod h1:DxbuIe9M3IZPRxPIzhch2m1eT7uFrSBJUBuVCQEBivs= -k8s.io/helm v2.16.12+incompatible h1:K2zhF8+B85Ya1n7n3eH34xwwp5qNUM42TBFENDZJT7w= -k8s.io/helm v2.16.12+incompatible/go.mod h1:LZzlS4LQBHfciFOurYBFkCMTaZ0D1l+p0teMg7TSULI= k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw= k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+OGxg8HsuBr/5f6tVAjDu6E= diff --git a/manifest/parse.go b/manifest/parse.go index 8ec7a9cb..552a5ba3 100644 --- a/manifest/parse.go +++ b/manifest/parse.go @@ -8,7 +8,6 @@ import ( "strings" "gopkg.in/yaml.v2" - "k8s.io/helm/pkg/proto/hapi/release" ) const ( @@ -65,28 +64,6 @@ func scanYamlSpecs(data []byte, atEOF bool) (advance int, token []byte, err erro return 0, nil, nil } -func splitSpec(token string) (string, string) { - if i := strings.Index(token, "\n"); i >= 0 { - return token[0:i], token[i+1:] - } - return "", "" -} - -// ParseRelease parses release objects into MappingResult -func ParseRelease(release *release.Release, includeTests bool, normalizeManifests bool) map[string]*MappingResult { - manifest := release.Manifest - for _, hook := range release.Hooks { - if !includeTests && isTestHook(hook.Events) { - continue - } - - manifest += "\n---\n" - manifest += fmt.Sprintf("# Source: %s\n", hook.Path) - manifest += hook.Manifest - } - return Parse(manifest, release.Namespace, normalizeManifests) -} - // Parse parses manifest strings into MappingResult func Parse(manifest string, defaultNamespace string, normalizeManifests bool, excludedHooks ...string) map[string]*MappingResult { // Ensure we have a newline in front of the yaml separator @@ -207,13 +184,3 @@ func isHook(metadata metadata, hooks ...string) bool { } return false } - -func isTestHook(hookEvents []release.Hook_Event) bool { - for _, event := range hookEvents { - if event == release.Hook_RELEASE_TEST_FAILURE || event == release.Hook_RELEASE_TEST_SUCCESS { - return true - } - } - - return false -} diff --git a/scripts/dep-helm-version.sh b/scripts/dep-helm-version.sh deleted file mode 100755 index ffa924a6..00000000 --- a/scripts/dep-helm-version.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -grep "k8s.io/helm" go.mod | sed -n -e "s/.*k8s.io\/helm \(v[.0-9]*\).*/\1/p"