Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package nelm for openSUSE:Factory checked in at 2025-05-07 19:21:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/nelm (Old) and /work/SRC/openSUSE:Factory/.nelm.new.30101 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "nelm" Wed May 7 19:21:30 2025 rev:6 rq:1275263 version:1.3.0 Changes: -------- --- /work/SRC/openSUSE:Factory/nelm/nelm.changes 2025-05-01 15:23:19.250768509 +0200 +++ /work/SRC/openSUSE:Factory/.nelm.new.30101/nelm.changes 2025-05-07 19:21:52.332723273 +0200 @@ -1,0 +2,7 @@ +Wed May 07 12:02:40 UTC 2025 - Johannes Kastl <opensuse_buildserv...@ojkastl.de> + +- Update to version 1.3.0: + * Features + - allow specifying remote charts in cli commands (b21329c) + +------------------------------------------------------------------- Old: ---- nelm-1.2.2.obscpio New: ---- nelm-1.3.0.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ nelm.spec ++++++ --- /var/tmp/diff_new_pack.gu7oDL/_old 2025-05-07 19:21:54.272804195 +0200 +++ /var/tmp/diff_new_pack.gu7oDL/_new 2025-05-07 19:21:54.276804362 +0200 @@ -17,7 +17,7 @@ Name: nelm -Version: 1.2.2 +Version: 1.3.0 Release: 0 Summary: Helm 3 alternative License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.gu7oDL/_old 2025-05-07 19:21:54.312805864 +0200 +++ /var/tmp/diff_new_pack.gu7oDL/_new 2025-05-07 19:21:54.316806031 +0200 @@ -3,7 +3,7 @@ <param name="url">https://github.com/werf/nelm</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v1.2.2</param> + <param name="revision">v1.3.0</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.gu7oDL/_old 2025-05-07 19:21:54.336806865 +0200 +++ /var/tmp/diff_new_pack.gu7oDL/_new 2025-05-07 19:21:54.340807032 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/werf/nelm</param> - <param name="changesrevision">2b97091d6f87d5d9ecd10b5cfb814e57ac4f32de</param></service></servicedata> + <param name="changesrevision">d2d74179b19089543e60d302f74e969f6cbe8d6c</param></service></servicedata> (No newline at EOF) ++++++ nelm-1.2.2.obscpio -> nelm-1.3.0.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/CHANGELOG.md new/nelm-1.3.0/CHANGELOG.md --- old/nelm-1.2.2/CHANGELOG.md 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/CHANGELOG.md 2025-05-07 12:46:15.000000000 +0200 @@ -1,5 +1,12 @@ # Changelog +## [1.3.0](https://www.github.com/werf/nelm/compare/v1.2.2...v1.3.0) (2025-05-07) + + +### Features + +* allow specifying remote charts in cli commands ([b21329c](https://www.github.com/werf/nelm/commit/b21329cb4cc745747b1f1979c27f2c60d35c526a)) + ### [1.2.2](https://www.github.com/werf/nelm/compare/v1.2.1...v1.2.2) (2025-04-30) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/chart_dependency_download.go new/nelm-1.3.0/cmd/nelm/chart_dependency_download.go --- old/nelm-1.2.2/cmd/nelm/chart_dependency_download.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/chart_dependency_download.go 2025-05-07 12:46:15.000000000 +0200 @@ -34,7 +34,7 @@ cmd.RunE = func(cmd *cobra.Command, args []string) error { helmSettings := helm_v3.Settings - ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), "", action.LogColorModeAuto, false) + ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), action.SetupLoggingOptions{}) secrets.DisableSecrets = true loader.NoChartLockWarning = "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/chart_dependency_update.go new/nelm-1.3.0/cmd/nelm/chart_dependency_update.go --- old/nelm-1.2.2/cmd/nelm/chart_dependency_update.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/chart_dependency_update.go 2025-05-07 12:46:15.000000000 +0200 @@ -32,7 +32,7 @@ cmd.RunE = func(cmd *cobra.Command, args []string) error { helmSettings := helm_v3.Settings - ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), "", action.LogColorModeAuto, false) + ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), action.SetupLoggingOptions{}) secrets.DisableSecrets = true loader.NoChartLockWarning = "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/chart_download.go new/nelm-1.3.0/cmd/nelm/chart_download.go --- old/nelm-1.2.2/cmd/nelm/chart_download.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/chart_download.go 2025-05-07 12:46:15.000000000 +0200 @@ -29,7 +29,7 @@ cmd.RunE = func(cmd *cobra.Command, args []string) error { helmSettings := helm_v3.Settings - ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), "", action.LogColorModeAuto, false) + ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), action.SetupLoggingOptions{}) secrets.DisableSecrets = true loader.NoChartLockWarning = "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/chart_lint.go new/nelm-1.3.0/cmd/nelm/chart_lint.go --- old/nelm-1.2.2/cmd/nelm/chart_lint.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/chart_lint.go 2025-05-07 12:46:15.000000000 +0200 @@ -1,6 +1,7 @@ package main import ( + "cmp" "context" "fmt" @@ -8,6 +9,7 @@ "github.com/werf/common-go/pkg/cli" "github.com/werf/nelm/pkg/action" + "github.com/werf/nelm/pkg/featgate" ) type chartLintConfig struct { @@ -20,9 +22,16 @@ func newChartLintCommand(ctx context.Context, afterAllCommandsBuiltFuncs map[*cobra.Command]func(cmd *cobra.Command) error) *cobra.Command { cfg := &chartLintConfig{} + use := "lint [options...]" + if featgate.FeatGateEnabled(featgate.FeatGateRemoteCharts) { + use += " [chart-dir|chart-repo-name/chart-name|chart-archive|chart-archive-url]" + } else { + use += " [chart-dir]" + } + cmd := cli.NewSubCommand( ctx, - "lint [options...] [chart-dir]", + use, "Lint a chart.", "Lint a chart.", 70, @@ -34,10 +43,16 @@ }, }, func(cmd *cobra.Command, args []string) error { - ctx = action.SetupLogging(ctx, cfg.LogLevel, action.DefaultChartLintLogLevel, cfg.LogColorMode, false) + ctx = action.SetupLogging(ctx, cmp.Or(cfg.LogLevel, action.DefaultChartLintLogLevel), action.SetupLoggingOptions{ + ColorMode: cfg.LogColorMode, + }) if len(args) > 0 { - cfg.ChartDirPath = args[0] + if featgate.FeatGateEnabled(featgate.FeatGateRemoteCharts) { + cfg.Chart = args[0] + } else { + cfg.ChartDirPath = args[0] + } } if err := action.ChartLint(ctx, cfg.ChartLintOptions); err != nil { @@ -77,6 +92,15 @@ return fmt.Errorf("add flag: %w", err) } + if featgate.FeatGateEnabled(featgate.FeatGateRemoteCharts) { + if err := cli.AddFlag(cmd, &cfg.ChartVersion, "chart-version", "", "Choose a remote chart version, otherwise the latest version is used", cli.AddFlagOptions{ + GetEnvVarRegexesFunc: cli.GetFlagGlobalAndLocalEnvVarRegexes, + Group: mainFlagGroup, + }); err != nil { + return fmt.Errorf("add flag: %w", err) + } + } + if err := cli.AddFlag(cmd, &cfg.DefaultSecretValuesDisable, "no-default-secret-values", false, "Ignore secret-values.yaml of the top-level chart", cli.AddFlagOptions{ GetEnvVarRegexesFunc: cli.GetFlagGlobalAndLocalEnvVarRegexes, Group: secretFlagGroup, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/chart_pack.go new/nelm-1.3.0/cmd/nelm/chart_pack.go --- old/nelm-1.2.2/cmd/nelm/chart_pack.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/chart_pack.go 2025-05-07 12:46:15.000000000 +0200 @@ -30,7 +30,7 @@ cmd.RunE = func(cmd *cobra.Command, args []string) error { helmSettings := helm_v3.Settings - ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), "", action.LogColorModeAuto, false) + ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), action.SetupLoggingOptions{}) secrets.DisableSecrets = true loader.NoChartLockWarning = "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/chart_render.go new/nelm-1.3.0/cmd/nelm/chart_render.go --- old/nelm-1.2.2/cmd/nelm/chart_render.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/chart_render.go 2025-05-07 12:46:15.000000000 +0200 @@ -1,6 +1,7 @@ package main import ( + "cmp" "context" "fmt" @@ -8,6 +9,7 @@ "github.com/werf/common-go/pkg/cli" "github.com/werf/nelm/pkg/action" + "github.com/werf/nelm/pkg/featgate" ) type chartRenderConfig struct { @@ -20,9 +22,16 @@ func newChartRenderCommand(ctx context.Context, afterAllCommandsBuiltFuncs map[*cobra.Command]func(cmd *cobra.Command) error) *cobra.Command { cfg := &chartRenderConfig{} + use := "render [options...]" + if featgate.FeatGateEnabled(featgate.FeatGateRemoteCharts) { + use += " [chart-dir|chart-repo-name/chart-name|chart-archive|chart-archive-url]" + } else { + use += " [chart-dir]" + } + cmd := cli.NewSubCommand( ctx, - "render [options...] [chart-dir]", + use, "Render a chart.", "Render a chart.", 60, @@ -34,10 +43,17 @@ }, }, func(cmd *cobra.Command, args []string) error { - ctx = action.SetupLogging(ctx, cfg.LogLevel, action.DefaultChartRenderLogLevel, cfg.LogColorMode, true) + ctx = action.SetupLogging(ctx, cmp.Or(cfg.LogLevel, action.DefaultChartRenderLogLevel), action.SetupLoggingOptions{ + ColorMode: cfg.LogColorMode, + LogIsParseable: true, + }) if len(args) > 0 { - cfg.ChartDirPath = args[0] + if featgate.FeatGateEnabled(featgate.FeatGateRemoteCharts) { + cfg.Chart = args[0] + } else { + cfg.ChartDirPath = args[0] + } } if err := action.ChartRender(ctx, cfg.ChartRenderOptions); err != nil { @@ -77,6 +93,15 @@ return fmt.Errorf("add flag: %w", err) } + if featgate.FeatGateEnabled(featgate.FeatGateRemoteCharts) { + if err := cli.AddFlag(cmd, &cfg.ChartVersion, "chart-version", "", "Choose a remote chart version, otherwise the latest version is used", cli.AddFlagOptions{ + GetEnvVarRegexesFunc: cli.GetFlagGlobalAndLocalEnvVarRegexes, + Group: mainFlagGroup, + }); err != nil { + return fmt.Errorf("add flag: %w", err) + } + } + if err := cli.AddFlag(cmd, &cfg.DefaultSecretValuesDisable, "no-default-secret-values", false, "Ignore secret-values.yaml of the top-level chart", cli.AddFlagOptions{ GetEnvVarRegexesFunc: cli.GetFlagGlobalAndLocalEnvVarRegexes, Group: secretFlagGroup, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/chart_secret_file_decrypt.go new/nelm-1.3.0/cmd/nelm/chart_secret_file_decrypt.go --- old/nelm-1.2.2/cmd/nelm/chart_secret_file_decrypt.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/chart_secret_file_decrypt.go 2025-05-07 12:46:15.000000000 +0200 @@ -1,6 +1,7 @@ package main import ( + "cmp" "context" "fmt" @@ -35,7 +36,10 @@ }, }, func(cmd *cobra.Command, args []string) error { - ctx = action.SetupLogging(ctx, cfg.LogLevel, action.DefaultSecretFileDecryptLogLevel, cfg.LogColorMode, true) + ctx = action.SetupLogging(ctx, cmp.Or(cfg.LogLevel, action.DefaultSecretFileDecryptLogLevel), action.SetupLoggingOptions{ + ColorMode: cfg.LogColorMode, + LogIsParseable: true, + }) cfg.File = args[0] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/chart_secret_file_edit.go new/nelm-1.3.0/cmd/nelm/chart_secret_file_edit.go --- old/nelm-1.2.2/cmd/nelm/chart_secret_file_edit.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/chart_secret_file_edit.go 2025-05-07 12:46:15.000000000 +0200 @@ -1,6 +1,7 @@ package main import ( + "cmp" "context" "fmt" @@ -35,7 +36,9 @@ }, }, func(cmd *cobra.Command, args []string) error { - ctx = action.SetupLogging(ctx, cfg.LogLevel, action.DefaultSecretFileEditLogLevel, cfg.LogColorMode, false) + ctx = action.SetupLogging(ctx, cmp.Or(cfg.LogLevel, action.DefaultSecretFileEditLogLevel), action.SetupLoggingOptions{ + ColorMode: cfg.LogColorMode, + }) cfg.File = args[0] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/chart_secret_file_encrypt.go new/nelm-1.3.0/cmd/nelm/chart_secret_file_encrypt.go --- old/nelm-1.2.2/cmd/nelm/chart_secret_file_encrypt.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/chart_secret_file_encrypt.go 2025-05-07 12:46:15.000000000 +0200 @@ -1,6 +1,7 @@ package main import ( + "cmp" "context" "fmt" @@ -35,7 +36,10 @@ }, }, func(cmd *cobra.Command, args []string) error { - ctx = action.SetupLogging(ctx, cfg.LogLevel, action.DefaultSecretFileEncryptLogLevel, cfg.LogColorMode, true) + ctx = action.SetupLogging(ctx, cmp.Or(cfg.LogLevel, action.DefaultSecretFileEncryptLogLevel), action.SetupLoggingOptions{ + ColorMode: cfg.LogColorMode, + LogIsParseable: true, + }) cfg.File = args[0] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/chart_secret_key_create.go new/nelm-1.3.0/cmd/nelm/chart_secret_key_create.go --- old/nelm-1.2.2/cmd/nelm/chart_secret_key_create.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/chart_secret_key_create.go 2025-05-07 12:46:15.000000000 +0200 @@ -1,6 +1,7 @@ package main import ( + "cmp" "context" "fmt" @@ -29,7 +30,10 @@ secretCmdGroup, cli.SubCommandOptions{}, func(cmd *cobra.Command, args []string) error { - ctx = action.SetupLogging(ctx, cfg.LogLevel, action.DefaultSecretKeyCreateLogLevel, cfg.LogColorMode, true) + ctx = action.SetupLogging(ctx, cmp.Or(cfg.LogLevel, action.DefaultSecretKeyCreateLogLevel), action.SetupLoggingOptions{ + ColorMode: cfg.LogColorMode, + LogIsParseable: true, + }) if _, err := action.SecretKeyCreate(ctx, cfg.SecretKeyCreateOptions); err != nil { return fmt.Errorf("secret key create: %w", err) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/chart_secret_key_rotate.go new/nelm-1.3.0/cmd/nelm/chart_secret_key_rotate.go --- old/nelm-1.2.2/cmd/nelm/chart_secret_key_rotate.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/chart_secret_key_rotate.go 2025-05-07 12:46:15.000000000 +0200 @@ -1,6 +1,7 @@ package main import ( + "cmp" "context" "fmt" @@ -34,7 +35,9 @@ }, }, func(cmd *cobra.Command, args []string) error { - ctx = action.SetupLogging(ctx, cfg.LogLevel, action.DefaultSecretKeyRotateLogLevel, cfg.LogColorMode, false) + ctx = action.SetupLogging(ctx, cmp.Or(cfg.LogLevel, action.DefaultSecretKeyRotateLogLevel), action.SetupLoggingOptions{ + ColorMode: cfg.LogColorMode, + }) if len(args) > 0 { cfg.ChartDirPath = args[0] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/chart_secret_values_file_decrypt.go new/nelm-1.3.0/cmd/nelm/chart_secret_values_file_decrypt.go --- old/nelm-1.2.2/cmd/nelm/chart_secret_values_file_decrypt.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/chart_secret_values_file_decrypt.go 2025-05-07 12:46:15.000000000 +0200 @@ -1,6 +1,7 @@ package main import ( + "cmp" "context" "fmt" @@ -35,7 +36,10 @@ }, }, func(cmd *cobra.Command, args []string) error { - ctx = action.SetupLogging(ctx, cfg.LogLevel, action.DefaultSecretValuesFileDecryptLogLevel, cfg.LogColorMode, true) + ctx = action.SetupLogging(ctx, cmp.Or(cfg.LogLevel, action.DefaultSecretValuesFileDecryptLogLevel), action.SetupLoggingOptions{ + ColorMode: cfg.LogColorMode, + LogIsParseable: true, + }) cfg.ValuesFile = args[0] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/chart_secret_values_file_edit.go new/nelm-1.3.0/cmd/nelm/chart_secret_values_file_edit.go --- old/nelm-1.2.2/cmd/nelm/chart_secret_values_file_edit.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/chart_secret_values_file_edit.go 2025-05-07 12:46:15.000000000 +0200 @@ -1,6 +1,7 @@ package main import ( + "cmp" "context" "fmt" @@ -35,7 +36,9 @@ }, }, func(cmd *cobra.Command, args []string) error { - ctx = action.SetupLogging(ctx, cfg.LogLevel, action.DefaultSecretValuesFileEditLogLevel, cfg.LogColorMode, false) + ctx = action.SetupLogging(ctx, cmp.Or(cfg.LogLevel, action.DefaultSecretValuesFileEditLogLevel), action.SetupLoggingOptions{ + ColorMode: cfg.LogColorMode, + }) cfg.ValuesFile = args[0] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/chart_secret_values_file_encrypt.go new/nelm-1.3.0/cmd/nelm/chart_secret_values_file_encrypt.go --- old/nelm-1.2.2/cmd/nelm/chart_secret_values_file_encrypt.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/chart_secret_values_file_encrypt.go 2025-05-07 12:46:15.000000000 +0200 @@ -1,6 +1,7 @@ package main import ( + "cmp" "context" "fmt" @@ -35,7 +36,10 @@ }, }, func(cmd *cobra.Command, args []string) error { - ctx = action.SetupLogging(ctx, cfg.LogLevel, action.DefaultSecretValuesFileEncryptLogLevel, cfg.LogColorMode, true) + ctx = action.SetupLogging(ctx, cmp.Or(cfg.LogLevel, action.DefaultSecretValuesFileEncryptLogLevel), action.SetupLoggingOptions{ + ColorMode: cfg.LogColorMode, + LogIsParseable: true, + }) cfg.ValuesFile = args[0] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/chart_upload.go new/nelm-1.3.0/cmd/nelm/chart_upload.go --- old/nelm-1.2.2/cmd/nelm/chart_upload.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/chart_upload.go 2025-05-07 12:46:15.000000000 +0200 @@ -29,7 +29,7 @@ cmd.RunE = func(cmd *cobra.Command, args []string) error { helmSettings := helm_v3.Settings - ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), "", action.LogColorModeAuto, false) + ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), action.SetupLoggingOptions{}) secrets.DisableSecrets = true loader.NoChartLockWarning = "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/main.go new/nelm-1.3.0/cmd/nelm/main.go --- old/nelm-1.2.2/cmd/nelm/main.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/main.go 2025-05-07 12:46:15.000000000 +0200 @@ -8,6 +8,7 @@ "github.com/chanced/caps" "github.com/pkg/errors" + "github.com/samber/lo" "github.com/spf13/cobra" helm_v3 "github.com/werf/3p-helm/cmd/helm" @@ -16,6 +17,7 @@ "github.com/werf/nelm/internal/common" "github.com/werf/nelm/internal/log" "github.com/werf/nelm/pkg/action" + "github.com/werf/nelm/pkg/featgate" ) func main() { @@ -39,7 +41,12 @@ } } - if unsupportedEnvVars := cli.FindUndefinedFlagEnvVarsInEnviron(); len(unsupportedEnvVars) > 0 { + unsupportedEnvVars := cli.FindUndefinedFlagEnvVarsInEnviron() + unsupportedEnvVars = lo.Filter(unsupportedEnvVars, func(env string, _ int) bool { + return !strings.HasPrefix(env, featgate.FeatGateEnvVarsPrefix) + }) + + if len(unsupportedEnvVars) > 0 { abort(ctx, fmt.Errorf("unsupported environment variable(s): %s", strings.Join(unsupportedEnvVars, ",")), 1) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/release_get.go new/nelm-1.3.0/cmd/nelm/release_get.go --- old/nelm-1.2.2/cmd/nelm/release_get.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/release_get.go 2025-05-07 12:46:15.000000000 +0200 @@ -1,6 +1,7 @@ package main import ( + "cmp" "context" "fmt" "strconv" @@ -34,7 +35,10 @@ Args: cobra.MaximumNArgs(1), }, func(cmd *cobra.Command, args []string) error { - ctx = action.SetupLogging(ctx, cfg.LogLevel, action.DefaultReleaseGetLogLevel, cfg.LogColorMode, true) + ctx = action.SetupLogging(ctx, cmp.Or(cfg.LogLevel, action.DefaultReleaseGetLogLevel), action.SetupLoggingOptions{ + ColorMode: cfg.LogColorMode, + LogIsParseable: true, + }) if len(args) > 0 { var err error diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/release_history.go new/nelm-1.3.0/cmd/nelm/release_history.go --- old/nelm-1.2.2/cmd/nelm/release_history.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/release_history.go 2025-05-07 12:46:15.000000000 +0200 @@ -28,7 +28,7 @@ cmd.RunE = func(cmd *cobra.Command, args []string) error { helmSettings := helm_v3.Settings - ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), "", action.LogColorModeAuto, false) + ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), action.SetupLoggingOptions{}) secrets.DisableSecrets = true loader.NoChartLockWarning = "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/release_install.go new/nelm-1.3.0/cmd/nelm/release_install.go --- old/nelm-1.2.2/cmd/nelm/release_install.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/release_install.go 2025-05-07 12:46:15.000000000 +0200 @@ -1,6 +1,7 @@ package main import ( + "cmp" "context" "fmt" @@ -8,6 +9,7 @@ "github.com/werf/common-go/pkg/cli" "github.com/werf/nelm/pkg/action" + "github.com/werf/nelm/pkg/featgate" ) type releaseInstallConfig struct { @@ -22,9 +24,16 @@ func newReleaseInstallCommand(ctx context.Context, afterAllCommandsBuiltFuncs map[*cobra.Command]func(cmd *cobra.Command) error) *cobra.Command { cfg := &releaseInstallConfig{} + use := "install [options...] -n namespace -r release" + if featgate.FeatGateEnabled(featgate.FeatGateRemoteCharts) { + use += " [chart-dir|chart-repo-name/chart-name|chart-archive|chart-archive-url]" + } else { + use += " [chart-dir]" + } + cmd := cli.NewSubCommand( ctx, - "install [options...] -n namespace -r release [chart-dir]", + use, "Deploy a chart to Kubernetes.", "Deploy a chart to Kubernetes.", 80, @@ -36,10 +45,16 @@ }, }, func(cmd *cobra.Command, args []string) error { - ctx = action.SetupLogging(ctx, cfg.LogLevel, action.DefaultReleaseInstallLogLevel, cfg.LogColorMode, false) + ctx = action.SetupLogging(ctx, cmp.Or(cfg.LogLevel, action.DefaultReleaseInstallLogLevel), action.SetupLoggingOptions{ + ColorMode: cfg.LogColorMode, + }) if len(args) > 0 { - cfg.ChartDirPath = args[0] + if featgate.FeatGateEnabled(featgate.FeatGateRemoteCharts) { + cfg.Chart = args[0] + } else { + cfg.ChartDirPath = args[0] + } } if err := action.ReleaseInstall(ctx, cfg.ReleaseName, cfg.ReleaseNamespace, cfg.ReleaseInstallOptions); err != nil { @@ -85,6 +100,15 @@ return fmt.Errorf("add flag: %w", err) } + if featgate.FeatGateEnabled(featgate.FeatGateRemoteCharts) { + if err := cli.AddFlag(cmd, &cfg.ChartVersion, "chart-version", "", "Choose a remote chart version, otherwise the latest version is used", cli.AddFlagOptions{ + GetEnvVarRegexesFunc: cli.GetFlagGlobalAndLocalEnvVarRegexes, + Group: mainFlagGroup, + }); err != nil { + return fmt.Errorf("add flag: %w", err) + } + } + if err := cli.AddFlag(cmd, &cfg.DefaultSecretValuesDisable, "no-default-secret-values", false, "Ignore secret-values.yaml of the top-level chart", cli.AddFlagOptions{ GetEnvVarRegexesFunc: cli.GetFlagGlobalAndLocalEnvVarRegexes, Group: secretFlagGroup, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/release_list.go new/nelm-1.3.0/cmd/nelm/release_list.go --- old/nelm-1.2.2/cmd/nelm/release_list.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/release_list.go 2025-05-07 12:46:15.000000000 +0200 @@ -28,7 +28,7 @@ cmd.RunE = func(cmd *cobra.Command, args []string) error { helmSettings := helm_v3.Settings - ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), "", action.LogColorModeAuto, false) + ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), action.SetupLoggingOptions{}) secrets.DisableSecrets = true loader.NoChartLockWarning = "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/release_plan_install.go new/nelm-1.3.0/cmd/nelm/release_plan_install.go --- old/nelm-1.2.2/cmd/nelm/release_plan_install.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/release_plan_install.go 2025-05-07 12:46:15.000000000 +0200 @@ -1,6 +1,7 @@ package main import ( + "cmp" "context" "fmt" @@ -8,6 +9,7 @@ "github.com/werf/common-go/pkg/cli" "github.com/werf/nelm/pkg/action" + "github.com/werf/nelm/pkg/featgate" ) type releasePlanInstallConfig struct { @@ -22,9 +24,16 @@ func newReleasePlanInstallCommand(ctx context.Context, afterAllCommandsBuiltFuncs map[*cobra.Command]func(cmd *cobra.Command) error) *cobra.Command { cfg := &releasePlanInstallConfig{} + use := "install [options...] -n namespace -r release" + if featgate.FeatGateEnabled(featgate.FeatGateRemoteCharts) { + use += " [chart-dir|chart-repo-name/chart-name|chart-archive|chart-archive-url]" + } else { + use += " [chart-dir]" + } + cmd := cli.NewSubCommand( ctx, - "install [options...] -n namespace -r release [chart-dir]", + use, "Plan a release install to Kubernetes.", "Plan a release install to Kubernetes.", 60, @@ -36,10 +45,16 @@ }, }, func(cmd *cobra.Command, args []string) error { - ctx = action.SetupLogging(ctx, cfg.LogLevel, action.DefaultReleasePlanInstallLogLevel, cfg.LogColorMode, false) + ctx = action.SetupLogging(ctx, cmp.Or(cfg.LogLevel, action.DefaultReleasePlanInstallLogLevel), action.SetupLoggingOptions{ + ColorMode: cfg.LogColorMode, + }) if len(args) > 0 { - cfg.ChartDirPath = args[0] + if featgate.FeatGateEnabled(featgate.FeatGateRemoteCharts) { + cfg.Chart = args[0] + } else { + cfg.ChartDirPath = args[0] + } } if err := action.ReleasePlanInstall(ctx, cfg.ReleaseName, cfg.ReleaseNamespace, cfg.ReleasePlanInstallOptions); err != nil { @@ -79,6 +94,15 @@ return fmt.Errorf("add flag: %w", err) } + if featgate.FeatGateEnabled(featgate.FeatGateRemoteCharts) { + if err := cli.AddFlag(cmd, &cfg.ChartVersion, "chart-version", "", "Choose a remote chart version, otherwise the latest version is used", cli.AddFlagOptions{ + GetEnvVarRegexesFunc: cli.GetFlagGlobalAndLocalEnvVarRegexes, + Group: mainFlagGroup, + }); err != nil { + return fmt.Errorf("add flag: %w", err) + } + } + if err := cli.AddFlag(cmd, &cfg.DefaultSecretValuesDisable, "no-default-secret-values", false, "Ignore secret-values.yaml of the top-level chart", cli.AddFlagOptions{ GetEnvVarRegexesFunc: cli.GetFlagGlobalAndLocalEnvVarRegexes, Group: secretFlagGroup, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/release_rollback.go new/nelm-1.3.0/cmd/nelm/release_rollback.go --- old/nelm-1.2.2/cmd/nelm/release_rollback.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/release_rollback.go 2025-05-07 12:46:15.000000000 +0200 @@ -1,6 +1,7 @@ package main import ( + "cmp" "context" "fmt" "strconv" @@ -34,7 +35,9 @@ Args: cobra.MaximumNArgs(1), }, func(cmd *cobra.Command, args []string) error { - ctx = action.SetupLogging(ctx, cfg.LogLevel, action.DefaultReleaseRollbackLogLevel, cfg.LogColorMode, false) + ctx = action.SetupLogging(ctx, cmp.Or(cfg.LogLevel, action.DefaultReleaseRollbackLogLevel), action.SetupLoggingOptions{ + ColorMode: cfg.LogColorMode, + }) if len(args) > 0 { var err error diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/release_uninstall.go new/nelm-1.3.0/cmd/nelm/release_uninstall.go --- old/nelm-1.2.2/cmd/nelm/release_uninstall.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/release_uninstall.go 2025-05-07 12:46:15.000000000 +0200 @@ -1,6 +1,7 @@ package main import ( + "cmp" "context" "fmt" @@ -31,7 +32,9 @@ releaseCmdGroup, cli.SubCommandOptions{}, func(cmd *cobra.Command, args []string) error { - ctx = action.SetupLogging(ctx, cfg.LogLevel, action.DefaultReleaseUninstallLogLevel, cfg.LogColorMode, false) + ctx = action.SetupLogging(ctx, cmp.Or(cfg.LogLevel, action.DefaultReleaseUninstallLogLevel), action.SetupLoggingOptions{ + ColorMode: cfg.LogColorMode, + }) if err := action.ReleaseUninstall(ctx, cfg.ReleaseName, cfg.ReleaseNamespace, cfg.ReleaseUninstallOptions); err != nil { return fmt.Errorf("release uninstall: %w", err) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/repo_add.go new/nelm-1.3.0/cmd/nelm/repo_add.go --- old/nelm-1.2.2/cmd/nelm/repo_add.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/repo_add.go 2025-05-07 12:46:15.000000000 +0200 @@ -32,7 +32,7 @@ cmd.RunE = func(cmd *cobra.Command, args []string) error { helmSettings := helm_v3.Settings - ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), "", action.LogColorModeAuto, false) + ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), action.SetupLoggingOptions{}) secrets.DisableSecrets = true loader.NoChartLockWarning = "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/repo_login.go new/nelm-1.3.0/cmd/nelm/repo_login.go --- old/nelm-1.2.2/cmd/nelm/repo_login.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/repo_login.go 2025-05-07 12:46:15.000000000 +0200 @@ -33,7 +33,7 @@ cmd.RunE = func(cmd *cobra.Command, args []string) error { helmSettings := helm_v3.Settings - ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), "", action.LogColorModeAuto, false) + ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), action.SetupLoggingOptions{}) secrets.DisableSecrets = true loader.NoChartLockWarning = "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/repo_logout.go new/nelm-1.3.0/cmd/nelm/repo_logout.go --- old/nelm-1.2.2/cmd/nelm/repo_logout.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/repo_logout.go 2025-05-07 12:46:15.000000000 +0200 @@ -33,7 +33,7 @@ cmd.RunE = func(cmd *cobra.Command, args []string) error { helmSettings := helm_v3.Settings - ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), "", action.LogColorModeAuto, false) + ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), action.SetupLoggingOptions{}) secrets.DisableSecrets = true loader.NoChartLockWarning = "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/repo_remove.go new/nelm-1.3.0/cmd/nelm/repo_remove.go --- old/nelm-1.2.2/cmd/nelm/repo_remove.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/repo_remove.go 2025-05-07 12:46:15.000000000 +0200 @@ -32,7 +32,7 @@ cmd.RunE = func(cmd *cobra.Command, args []string) error { helmSettings := helm_v3.Settings - ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), "", action.LogColorModeAuto, false) + ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), action.SetupLoggingOptions{}) secrets.DisableSecrets = true loader.NoChartLockWarning = "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/repo_update.go new/nelm-1.3.0/cmd/nelm/repo_update.go --- old/nelm-1.2.2/cmd/nelm/repo_update.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/repo_update.go 2025-05-07 12:46:15.000000000 +0200 @@ -33,7 +33,7 @@ cmd.RunE = func(cmd *cobra.Command, args []string) error { helmSettings := helm_v3.Settings - ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), "", action.LogColorModeAuto, false) + ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, action.DebugLogLevel, action.InfoLogLevel), action.SetupLoggingOptions{}) secrets.DisableSecrets = true loader.NoChartLockWarning = "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/cmd/nelm/version.go new/nelm-1.3.0/cmd/nelm/version.go --- old/nelm-1.2.2/cmd/nelm/version.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/cmd/nelm/version.go 2025-05-07 12:46:15.000000000 +0200 @@ -1,6 +1,7 @@ package main import ( + "cmp" "context" "fmt" @@ -29,7 +30,10 @@ miscCmdGroup, cli.SubCommandOptions{}, func(cmd *cobra.Command, args []string) error { - ctx = action.SetupLogging(ctx, cfg.LogLevel, action.DefaultVersionLogLevel, cfg.LogColorMode, true) + ctx = action.SetupLogging(ctx, cmp.Or(cfg.LogLevel, action.DefaultVersionLogLevel), action.SetupLoggingOptions{ + ColorMode: cfg.LogColorMode, + LogIsParseable: true, + }) if _, err := action.Version(ctx, cfg.VersionOptions); err != nil { return fmt.Errorf("version: %w", err) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/internal/chart/chart_downloader.go new/nelm-1.3.0/internal/chart/chart_downloader.go --- old/nelm-1.2.2/internal/chart/chart_downloader.go 1970-01-01 01:00:00.000000000 +0100 +++ new/nelm-1.3.0/internal/chart/chart_downloader.go 2025-05-07 12:46:15.000000000 +0200 @@ -0,0 +1,86 @@ +package chart + +import ( + "context" + "fmt" + "io" + "net/url" + "os" + + "github.com/werf/3p-helm/pkg/cli" + helmdownloader "github.com/werf/3p-helm/pkg/downloader" + helmgetter "github.com/werf/3p-helm/pkg/getter" + "github.com/werf/3p-helm/pkg/helmpath" + helmregistry "github.com/werf/3p-helm/pkg/registry" + helmrepo "github.com/werf/3p-helm/pkg/repo" + "github.com/werf/nelm/internal/log" +) + +// TODO(ilya-lesikov): pass all missing options +type ChartDownloaderOptions struct { + KeyringFile string + PassCredentialsAll bool + CertFile string + KeyFile string + CaFile string + SkipTLSVerify bool + Insecure bool + RepoURL string + Username string + Password string + Version string +} + +func NewChartDownloader(ctx context.Context, chartRef string, registryClient *helmregistry.Client, opts ChartDownloaderOptions) (*helmdownloader.ChartDownloader, string, error) { + var out io.Writer + if log.Default.AcceptLevel(ctx, log.WarningLevel) { + out = os.Stdout + } else { + out = io.Discard + } + + downloader := &helmdownloader.ChartDownloader{ + Out: out, + Keyring: opts.KeyringFile, + Getters: helmgetter.Providers{helmgetter.HttpProvider, helmgetter.OCIProvider}, + Options: []helmgetter.Option{ + helmgetter.WithPassCredentialsAll(opts.PassCredentialsAll), + helmgetter.WithTLSClientConfig(opts.CertFile, opts.KeyFile, opts.CaFile), + helmgetter.WithInsecureSkipVerifyTLS(opts.SkipTLSVerify), + helmgetter.WithPlainHTTP(opts.Insecure), + helmgetter.WithRegistryClient(registryClient), + }, + RegistryClient: registryClient, + RepositoryConfig: cli.EnvOr("HELM_REPOSITORY_CONFIG", helmpath.ConfigPath("repositories.yaml")), + RepositoryCache: cli.EnvOr("HELM_REPOSITORY_CACHE", helmpath.CachePath("repository")), + } + + if opts.PassCredentialsAll || opts.RepoURL == "" { + downloader.Options = append(downloader.Options, helmgetter.WithBasicAuth(opts.Username, opts.Password)) + } else { + chartURL, err := helmrepo.FindChartInAuthAndTLSAndPassRepoURL(opts.RepoURL, opts.Username, opts.Password, chartRef, opts.Version, opts.CertFile, opts.KeyFile, opts.CaFile, opts.SkipTLSVerify, opts.PassCredentialsAll, helmgetter.Providers{helmgetter.HttpProvider, helmgetter.OCIProvider}) + if err != nil { + return nil, "", fmt.Errorf("get chart URL: %w", err) + } + + rUrl, err := url.Parse(opts.RepoURL) + if err != nil { + return nil, "", fmt.Errorf("parse repo URL: %w", err) + } + + cUrl, err := url.Parse(chartURL) + if err != nil { + return nil, "", fmt.Errorf("parse chart URL: %w", err) + } + + if rUrl.Scheme == cUrl.Scheme && rUrl.Host == cUrl.Host { + downloader.Options = append(downloader.Options, helmgetter.WithBasicAuth(opts.Username, opts.Password)) + } else { + downloader.Options = append(downloader.Options, helmgetter.WithBasicAuth("", "")) + } + + chartRef = chartURL + } + + return downloader, chartRef, nil +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/internal/chart/chart_tree.go new/nelm-1.3.0/internal/chart/chart_tree.go --- old/nelm-1.2.2/internal/chart/chart_tree.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/internal/chart/chart_tree.go 2025-05-07 12:46:15.000000000 +0200 @@ -3,7 +3,9 @@ import ( "context" "fmt" + "os" "path" + "path/filepath" "sort" "strings" @@ -13,23 +15,49 @@ "k8s.io/client-go/discovery" "sigs.k8s.io/yaml" - helm_v3 "github.com/werf/3p-helm/cmd/helm" "github.com/werf/3p-helm/pkg/action" "github.com/werf/3p-helm/pkg/chart" "github.com/werf/3p-helm/pkg/chart/loader" "github.com/werf/3p-helm/pkg/chartutil" + "github.com/werf/3p-helm/pkg/cli" "github.com/werf/3p-helm/pkg/cli/values" "github.com/werf/3p-helm/pkg/downloader" helmengine "github.com/werf/3p-helm/pkg/engine" "github.com/werf/3p-helm/pkg/getter" + "github.com/werf/3p-helm/pkg/helmpath" + "github.com/werf/3p-helm/pkg/registry" "github.com/werf/3p-helm/pkg/releaseutil" + "github.com/werf/3p-helm/pkg/werf/secrets" + "github.com/werf/logboek" "github.com/werf/nelm/internal/common" "github.com/werf/nelm/internal/kube" "github.com/werf/nelm/internal/log" "github.com/werf/nelm/internal/resource" + "github.com/werf/nelm/pkg/featgate" ) func NewChartTree(ctx context.Context, chartPath, releaseName, releaseNamespace string, revision int, deployType common.DeployType, opts ChartTreeOptions) (*ChartTree, error) { + if featgate.FeatGateEnabled(featgate.FeatGateRemoteCharts) && !IsLocalChart(chartPath) { + chartDownloader, chartRef, err := NewChartDownloader(ctx, chartPath, opts.RegistryClient, ChartDownloaderOptions{ + CaFile: opts.KubeCAPath, + SkipTLSVerify: opts.ChartRepoSkipTLSVerify, + Insecure: opts.ChartRepoInsecure, + Version: opts.ChartVersion, + }) + if err != nil { + return nil, fmt.Errorf("construct chart downloader: %w", err) + } + + if err := os.MkdirAll(cli.EnvOr("HELM_REPOSITORY_CACHE", helmpath.CachePath("repository")), 0o755); err != nil { + return nil, fmt.Errorf("create repository cache directory: %w", err) + } + + chartPath, _, err = chartDownloader.DownloadTo(chartRef, opts.ChartVersion, cli.EnvOr("HELM_REPOSITORY_CACHE", helmpath.CachePath("repository"))) + if err != nil { + return nil, fmt.Errorf("download chart %q: %w", chartRef, err) + } + } + valOpts := &values.Options{ StringValues: opts.StringSetValues, Values: opts.SetValues, @@ -37,14 +65,30 @@ ValueFiles: opts.ValuesFiles, } - getters := getter.All(helm_v3.Settings) - log.Default.Debug(ctx, "Merging values for chart tree at %q", chartPath) - releaseValues, err := valOpts.MergeValues(getters) + releaseValues, err := valOpts.MergeValues(getter.Providers{getter.HttpProvider, getter.OCIProvider}) if err != nil { return nil, fmt.Errorf("error merging values for chart tree at %q: %w", chartPath, err) } + depDownloader := &downloader.Manager{ + // FIXME(ilya-lesikov): + Out: logboek.Context(ctx).OutStream(), + ChartPath: chartPath, + SkipUpdate: opts.ChartRepoSkipUpdate, + AllowMissingRepos: true, + Getters: getter.Providers{getter.HttpProvider, getter.OCIProvider}, + RegistryClient: opts.RegistryClient, + // TODO(v3): don't read HELM_REPOSITORY_CONFIG anymore + RepositoryConfig: cli.EnvOr("HELM_REPOSITORY_CONFIG", helmpath.ConfigPath("repositories.yaml")), + // TODO(v3): don't read HELM_REPOSITORY_CACHE anymore + RepositoryCache: cli.EnvOr("HELM_REPOSITORY_CACHE", helmpath.CachePath("repository")), + Debug: log.Default.AcceptLevel(ctx, log.DebugLevel), + } + loader.SetChartPathFunc = depDownloader.SetChartPath + loader.DepsBuildFunc = depDownloader.Build + secrets.ChartDir = chartPath + log.Default.Debug(ctx, "Loading chart at %q", chartPath) legacyChart, err := loader.Load(chartPath) if err != nil { @@ -215,16 +259,22 @@ // TODO(ilya-lesikov): pass missing options from top-level type ChartTreeOptions struct { - Mapper meta.ResettableRESTMapper - DiscoveryClient discovery.CachedDiscoveryInterface - KubeConfig *kube.KubeConfig - StringSetValues []string - SetValues []string - FileValues []string - ValuesFiles []string - SubNotes bool - KubeVersion *chartutil.KubeVersion - AllowDNSRequests bool + AllowDNSRequests bool + ChartRepoInsecure bool + ChartRepoSkipTLSVerify bool + ChartRepoSkipUpdate bool + ChartVersion string + DiscoveryClient discovery.CachedDiscoveryInterface + FileValues []string + KubeCAPath string + KubeConfig *kube.KubeConfig + KubeVersion *chartutil.KubeVersion + Mapper meta.ResettableRESTMapper + RegistryClient *registry.Client + SetValues []string + StringSetValues []string + SubNotes bool + ValuesFiles []string } type ChartTree struct { @@ -272,3 +322,7 @@ func (t *ChartTree) LegacyChart() *chart.Chart { return t.legacyChart } + +func IsLocalChart(path string) bool { + return filepath.IsAbs(path) || filepath.HasPrefix(path, "..") || filepath.HasPrefix(path, ".") +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/pkg/action/chart_lint.go new/nelm-1.3.0/pkg/action/chart_lint.go --- old/nelm-1.2.2/pkg/action/chart_lint.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/pkg/action/chart_lint.go 2025-05-07 12:46:15.000000000 +0200 @@ -12,15 +12,10 @@ "github.com/werf/3p-helm/pkg/chart/loader" "github.com/werf/3p-helm/pkg/chartutil" - "github.com/werf/3p-helm/pkg/cli" - "github.com/werf/3p-helm/pkg/downloader" - "github.com/werf/3p-helm/pkg/getter" - "github.com/werf/3p-helm/pkg/helmpath" "github.com/werf/3p-helm/pkg/registry" "github.com/werf/3p-helm/pkg/werf/chartextender" "github.com/werf/3p-helm/pkg/werf/secrets" "github.com/werf/common-go/pkg/secrets_manager" - "github.com/werf/logboek" "github.com/werf/nelm/internal/chart" "github.com/werf/nelm/internal/common" "github.com/werf/nelm/internal/kube" @@ -35,11 +30,14 @@ ) type ChartLintOptions struct { - ChartAppVersion string + Chart string + ChartAppVersion string + // TODO(v2): get rid ChartDirPath string ChartRepositoryInsecure bool ChartRepositorySkipTLSVerify bool ChartRepositorySkipUpdate bool + ChartVersion string DefaultChartAPIVersion string DefaultChartName string DefaultChartVersion string @@ -179,7 +177,6 @@ secrets.CoalesceTablesFunc = chartutil.CoalesceTables secrets.SecretsWorkingDir = opts.SecretWorkDir loader.SecretValuesFiles = opts.SecretValuesPaths - secrets.ChartDir = opts.ChartDirPath secrets_manager.DisableSecretsDecryption = opts.SecretKeyIgnore var historyOptions release.HistoryOptions @@ -225,10 +222,16 @@ } chartTreeOptions := chart.ChartTreeOptions{ - StringSetValues: opts.ValuesStringSets, - SetValues: opts.ValuesSets, - FileValues: opts.ValuesFileSets, - ValuesFiles: opts.ValuesFilesPaths, + ChartRepoInsecure: opts.ChartRepositoryInsecure, + ChartRepoSkipTLSVerify: opts.ChartRepositorySkipTLSVerify, + ChartRepoSkipUpdate: opts.ChartRepositorySkipUpdate, + ChartVersion: opts.ChartVersion, + FileValues: opts.ValuesFileSets, + KubeCAPath: opts.KubeCAPath, + RegistryClient: helmRegistryClient, + SetValues: opts.ValuesSets, + StringSetValues: opts.ValuesStringSets, + ValuesFiles: opts.ValuesFilesPaths, } if opts.Remote { @@ -244,24 +247,9 @@ chartTreeOptions.KubeVersion = ver } - downloader := &downloader.Manager{ - // FIXME(ilya-lesikov): - Out: logboek.Context(ctx).OutStream(), - ChartPath: opts.ChartDirPath, - SkipUpdate: opts.ChartRepositorySkipUpdate, - AllowMissingRepos: true, - Getters: getter.Providers{getter.HttpProvider, getter.OCIProvider}, - RegistryClient: helmRegistryClient, - RepositoryConfig: cli.EnvOr("HELM_REPOSITORY_CONFIG", helmpath.ConfigPath("repositories.yaml")), - RepositoryCache: cli.EnvOr("HELM_REPOSITORY_CACHE", helmpath.CachePath("repository")), - Debug: log.Default.AcceptLevel(ctx, log.Level(DebugLogLevel)), - } - loader.SetChartPathFunc = downloader.SetChartPath - loader.DepsBuildFunc = downloader.Build - chartTree, err := chart.NewChartTree( ctx, - opts.ChartDirPath, + opts.Chart, opts.ReleaseName, opts.ReleaseNamespace, newRevision, @@ -327,8 +315,10 @@ } func applyChartLintOptionsDefaults(opts ChartLintOptions, currentDir, homeDir string) (ChartLintOptions, error) { - if opts.ChartDirPath == "" { - opts.ChartDirPath = currentDir + if opts.Chart == "" && opts.ChartDirPath != "" { + opts.Chart = opts.ChartDirPath + } else if opts.ChartDirPath == "" && opts.Chart == "" { + opts.Chart = currentDir } if opts.ReleaseName == "" { @@ -352,7 +342,7 @@ } if opts.LogRegistryStreamOut == nil { - opts.LogRegistryStreamOut = os.Stdout + opts.LogRegistryStreamOut = io.Discard } if opts.NetworkParallelism <= 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/pkg/action/chart_render.go new/nelm-1.3.0/pkg/action/chart_render.go --- old/nelm-1.2.2/pkg/action/chart_render.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/pkg/action/chart_render.go 2025-05-07 12:46:15.000000000 +0200 @@ -17,15 +17,10 @@ "github.com/werf/3p-helm/pkg/chart/loader" "github.com/werf/3p-helm/pkg/chartutil" - "github.com/werf/3p-helm/pkg/cli" - "github.com/werf/3p-helm/pkg/downloader" - "github.com/werf/3p-helm/pkg/getter" - "github.com/werf/3p-helm/pkg/helmpath" "github.com/werf/3p-helm/pkg/registry" "github.com/werf/3p-helm/pkg/werf/chartextender" "github.com/werf/3p-helm/pkg/werf/secrets" "github.com/werf/common-go/pkg/secrets_manager" - "github.com/werf/logboek" "github.com/werf/nelm/internal/chart" "github.com/werf/nelm/internal/common" "github.com/werf/nelm/internal/kube" @@ -40,11 +35,14 @@ ) type ChartRenderOptions struct { - ChartAppVersion string + Chart string + ChartAppVersion string + // TODO(v2): get rid ChartDirPath string ChartRepositoryInsecure bool ChartRepositorySkipTLSVerify bool ChartRepositorySkipUpdate bool + ChartVersion string DefaultChartAPIVersion string DefaultChartName string DefaultChartVersion string @@ -187,7 +185,6 @@ secrets.CoalesceTablesFunc = chartutil.CoalesceTables secrets.SecretsWorkingDir = opts.SecretWorkDir loader.SecretValuesFiles = opts.SecretValuesPaths - secrets.ChartDir = opts.ChartDirPath secrets_manager.DisableSecretsDecryption = opts.SecretKeyIgnore var historyOptions release.HistoryOptions @@ -233,10 +230,15 @@ } chartTreeOptions := chart.ChartTreeOptions{ - StringSetValues: opts.ValuesStringSets, - SetValues: opts.ValuesSets, - FileValues: opts.ValuesFileSets, - ValuesFiles: opts.ValuesFilesPaths, + ChartRepoInsecure: opts.ChartRepositoryInsecure, + ChartRepoSkipTLSVerify: opts.ChartRepositorySkipTLSVerify, + ChartVersion: opts.ChartVersion, + FileValues: opts.ValuesFileSets, + KubeCAPath: opts.KubeCAPath, + RegistryClient: helmRegistryClient, + SetValues: opts.ValuesSets, + StringSetValues: opts.ValuesStringSets, + ValuesFiles: opts.ValuesFilesPaths, } if opts.Remote { @@ -252,24 +254,9 @@ chartTreeOptions.KubeVersion = ver } - downloader := &downloader.Manager{ - // FIXME(ilya-lesikov): - Out: logboek.Context(ctx).OutStream(), - ChartPath: opts.ChartDirPath, - SkipUpdate: opts.ChartRepositorySkipUpdate, - AllowMissingRepos: true, - Getters: getter.Providers{getter.HttpProvider, getter.OCIProvider}, - RegistryClient: helmRegistryClient, - RepositoryConfig: cli.EnvOr("HELM_REPOSITORY_CONFIG", helmpath.ConfigPath("repositories.yaml")), - RepositoryCache: cli.EnvOr("HELM_REPOSITORY_CACHE", helmpath.CachePath("repository")), - Debug: log.Default.AcceptLevel(ctx, log.Level(DebugLogLevel)), - } - loader.SetChartPathFunc = downloader.SetChartPath - loader.DepsBuildFunc = downloader.Build - chartTree, err := chart.NewChartTree( ctx, - opts.ChartDirPath, + opts.Chart, opts.ReleaseName, opts.ReleaseNamespace, newRevision, @@ -338,8 +325,8 @@ return fmt.Errorf("get absolute path for %q: %w", file, err) } - if strings.HasPrefix(absFile, opts.ChartDirPath) { - f, err := filepath.Rel(opts.ChartDirPath, absFile) + if strings.HasPrefix(absFile, opts.Chart) { + f, err := filepath.Rel(opts.Chart, absFile) if err != nil { return fmt.Errorf("get relative path for %q: %w", absFile, err) } @@ -414,8 +401,10 @@ } func applyChartRenderOptionsDefaults(opts ChartRenderOptions, currentDir, homeDir string) (ChartRenderOptions, error) { - if opts.ChartDirPath == "" { - opts.ChartDirPath = currentDir + if opts.Chart == "" && opts.ChartDirPath != "" { + opts.Chart = opts.ChartDirPath + } else if opts.ChartDirPath == "" && opts.Chart == "" { + opts.Chart = currentDir } if opts.ReleaseName == "" { @@ -439,7 +428,7 @@ } if opts.LogRegistryStreamOut == nil { - opts.LogRegistryStreamOut = os.Stdout + opts.LogRegistryStreamOut = io.Discard } if opts.NetworkParallelism <= 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/pkg/action/release_install.go new/nelm-1.3.0/pkg/action/release_install.go --- old/nelm-1.2.2/pkg/action/release_install.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/pkg/action/release_install.go 2025-05-07 12:46:15.000000000 +0200 @@ -18,10 +18,6 @@ "github.com/werf/3p-helm/pkg/chart/loader" "github.com/werf/3p-helm/pkg/chartutil" - "github.com/werf/3p-helm/pkg/cli" - "github.com/werf/3p-helm/pkg/downloader" - "github.com/werf/3p-helm/pkg/getter" - "github.com/werf/3p-helm/pkg/helmpath" "github.com/werf/3p-helm/pkg/registry" "github.com/werf/3p-helm/pkg/werf/chartextender" "github.com/werf/3p-helm/pkg/werf/secrets" @@ -49,12 +45,15 @@ ) type ReleaseInstallOptions struct { - AutoRollback bool - ChartAppVersion string + Chart string + AutoRollback bool + ChartAppVersion string + // TODO(v2): get rid ChartDirPath string ChartRepositoryInsecure bool ChartRepositorySkipTLSVerify bool ChartRepositorySkipUpdate bool + ChartVersion string DefaultChartAPIVersion string DefaultChartName string DefaultChartVersion string @@ -207,7 +206,6 @@ secrets.CoalesceTablesFunc = chartutil.CoalesceTables secrets.SecretsWorkingDir = opts.SecretWorkDir loader.SecretValuesFiles = opts.SecretValuesPaths - secrets.ChartDir = opts.ChartDirPath secrets_manager.DisableSecretsDecryption = opts.SecretKeyIgnore if err := createReleaseNamespace(ctx, clientFactory, releaseNamespace); err != nil { @@ -264,40 +262,29 @@ deployType = common.DeployTypeInitial } - downloader := &downloader.Manager{ - // FIXME(ilya-lesikov): - Out: logboek.Context(ctx).OutStream(), - ChartPath: opts.ChartDirPath, - SkipUpdate: opts.ChartRepositorySkipUpdate, - AllowMissingRepos: true, - Getters: getter.Providers{getter.HttpProvider, getter.OCIProvider}, - RegistryClient: helmRegistryClient, - // TODO(v3): don't read HELM_REPOSITORY_CONFIG anymore - RepositoryConfig: cli.EnvOr("HELM_REPOSITORY_CONFIG", helmpath.ConfigPath("repositories.yaml")), - // TODO(v3): don't read HELM_REPOSITORY_CACHE anymore - RepositoryCache: cli.EnvOr("HELM_REPOSITORY_CACHE", helmpath.CachePath("repository")), - Debug: log.Default.AcceptLevel(ctx, log.Level(DebugLogLevel)), - } - loader.SetChartPathFunc = downloader.SetChartPath - loader.DepsBuildFunc = downloader.Build - log.Default.Debug(ctx, "Constructing chart tree") chartTree, err := chart.NewChartTree( ctx, - opts.ChartDirPath, + opts.Chart, releaseName, releaseNamespace, newRevision, deployType, chart.ChartTreeOptions{ - Mapper: clientFactory.Mapper(), - DiscoveryClient: clientFactory.Discovery(), - KubeConfig: clientFactory.KubeConfig(), - StringSetValues: opts.ValuesStringSets, - SetValues: opts.ValuesSets, - FileValues: opts.ValuesFileSets, - ValuesFiles: opts.ValuesFilesPaths, - SubNotes: opts.SubNotes, + ChartRepoInsecure: opts.ChartRepositoryInsecure, + ChartRepoSkipTLSVerify: opts.ChartRepositorySkipTLSVerify, + ChartRepoSkipUpdate: opts.ChartRepositorySkipUpdate, + ChartVersion: opts.ChartVersion, + DiscoveryClient: clientFactory.Discovery(), + FileValues: opts.ValuesFileSets, + KubeCAPath: opts.KubeCAPath, + KubeConfig: clientFactory.KubeConfig(), + Mapper: clientFactory.Mapper(), + RegistryClient: helmRegistryClient, + SetValues: opts.ValuesSets, + StringSetValues: opts.ValuesStringSets, + SubNotes: opts.SubNotes, + ValuesFiles: opts.ValuesFilesPaths, }, ) if err != nil { @@ -634,8 +621,10 @@ currentDir string, homeDir string, ) (ReleaseInstallOptions, error) { - if opts.ChartDirPath == "" { - opts.ChartDirPath = currentDir + if opts.Chart == "" && opts.ChartDirPath != "" { + opts.Chart = opts.ChartDirPath + } else if opts.ChartDirPath == "" && opts.Chart == "" { + opts.Chart = currentDir } var err error @@ -651,7 +640,7 @@ } if opts.LogRegistryStreamOut == nil { - opts.LogRegistryStreamOut = os.Stdout + opts.LogRegistryStreamOut = io.Discard } if opts.NetworkParallelism <= 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/pkg/action/release_plan_install.go new/nelm-1.3.0/pkg/action/release_plan_install.go --- old/nelm-1.2.2/pkg/action/release_plan_install.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/pkg/action/release_plan_install.go 2025-05-07 12:46:15.000000000 +0200 @@ -15,15 +15,10 @@ "github.com/werf/3p-helm/pkg/chart/loader" "github.com/werf/3p-helm/pkg/chartutil" - "github.com/werf/3p-helm/pkg/cli" - "github.com/werf/3p-helm/pkg/downloader" - "github.com/werf/3p-helm/pkg/getter" - "github.com/werf/3p-helm/pkg/helmpath" "github.com/werf/3p-helm/pkg/registry" "github.com/werf/3p-helm/pkg/werf/chartextender" "github.com/werf/3p-helm/pkg/werf/secrets" "github.com/werf/common-go/pkg/secrets_manager" - "github.com/werf/logboek" "github.com/werf/nelm/internal/chart" "github.com/werf/nelm/internal/common" "github.com/werf/nelm/internal/kube" @@ -41,11 +36,14 @@ var ErrChangesPlanned = errors.New("changes planned") type ReleasePlanInstallOptions struct { - ChartAppVersion string + Chart string + ChartAppVersion string + // TODO(v2): get rid ChartDirPath string ChartRepositoryInsecure bool ChartRepositorySkipTLSVerify bool ChartRepositorySkipUpdate bool + ChartVersion string DefaultChartAPIVersion string DefaultChartName string DefaultChartVersion string @@ -175,7 +173,6 @@ secrets.CoalesceTablesFunc = chartutil.CoalesceTables secrets.SecretsWorkingDir = opts.SecretWorkDir loader.SecretValuesFiles = opts.SecretValuesPaths - secrets.ChartDir = opts.ChartDirPath secrets_manager.DisableSecretsDecryption = opts.SecretKeyIgnore log.Default.Info(ctx, color.Style{color.Bold, color.Green}.Render("Planning release install")+" %q (namespace: %q)", releaseName, releaseNamespace) @@ -222,37 +219,28 @@ deployType = common.DeployTypeInitial } - downloader := &downloader.Manager{ - // FIXME(ilya-lesikov): - Out: logboek.Context(ctx).OutStream(), - ChartPath: opts.ChartDirPath, - SkipUpdate: opts.ChartRepositorySkipUpdate, - AllowMissingRepos: true, - Getters: getter.Providers{getter.HttpProvider, getter.OCIProvider}, - RegistryClient: helmRegistryClient, - RepositoryConfig: cli.EnvOr("HELM_REPOSITORY_CONFIG", helmpath.ConfigPath("repositories.yaml")), - RepositoryCache: cli.EnvOr("HELM_REPOSITORY_CACHE", helmpath.CachePath("repository")), - Debug: log.Default.AcceptLevel(ctx, log.Level(DebugLogLevel)), - } - loader.SetChartPathFunc = downloader.SetChartPath - loader.DepsBuildFunc = downloader.Build - log.Default.Debug(ctx, "Constructing chart tree") chartTree, err := chart.NewChartTree( ctx, - opts.ChartDirPath, + opts.Chart, releaseName, releaseNamespace, newRevision, deployType, chart.ChartTreeOptions{ - Mapper: clientFactory.Mapper(), - DiscoveryClient: clientFactory.Discovery(), - KubeConfig: clientFactory.KubeConfig(), - StringSetValues: opts.ValuesStringSets, - SetValues: opts.ValuesSets, - FileValues: opts.ValuesFileSets, - ValuesFiles: opts.ValuesFilesPaths, + ChartRepoInsecure: opts.ChartRepositoryInsecure, + ChartRepoSkipTLSVerify: opts.ChartRepositorySkipTLSVerify, + ChartRepoSkipUpdate: opts.ChartRepositorySkipUpdate, + ChartVersion: opts.ChartVersion, + DiscoveryClient: clientFactory.Discovery(), + FileValues: opts.ValuesFileSets, + KubeCAPath: opts.KubeCAPath, + KubeConfig: clientFactory.KubeConfig(), + Mapper: clientFactory.Mapper(), + RegistryClient: helmRegistryClient, + SetValues: opts.ValuesSets, + StringSetValues: opts.ValuesStringSets, + ValuesFiles: opts.ValuesFilesPaths, }, ) if err != nil { @@ -372,8 +360,10 @@ } func applyReleasePlanInstallOptionsDefaults(opts ReleasePlanInstallOptions, currentDir, homeDir string) (ReleasePlanInstallOptions, error) { - if opts.ChartDirPath == "" { - opts.ChartDirPath = currentDir + if opts.Chart == "" && opts.ChartDirPath != "" { + opts.Chart = opts.ChartDirPath + } else if opts.ChartDirPath == "" && opts.Chart == "" { + opts.Chart = currentDir } var err error @@ -389,7 +379,7 @@ } if opts.LogRegistryStreamOut == nil { - opts.LogRegistryStreamOut = os.Stdout + opts.LogRegistryStreamOut = io.Discard } if opts.NetworkParallelism <= 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/pkg/action/util.go new/nelm-1.3.0/pkg/action/util.go --- old/nelm-1.2.2/pkg/action/util.go 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/pkg/action/util.go 2025-05-07 12:46:15.000000000 +0200 @@ -20,11 +20,12 @@ "github.com/werf/nelm/internal/log" ) -func SetupLogging(ctx context.Context, logLevel, defaultLogLevel, colorMode string, logIsParseable bool) context.Context { - if logLevel == "" { - logLevel = defaultLogLevel - } +type SetupLoggingOptions struct { + ColorMode string + LogIsParseable bool +} +func SetupLogging(ctx context.Context, logLevel string, opts SetupLoggingOptions) context.Context { if val := ctx.Value(log.LogboekLoggerCtxKeyName); val == nil { ctx = logboek.NewContext(ctx, logboek.DefaultLogger()) } @@ -127,7 +128,7 @@ panic(fmt.Sprintf("unknown log level %q", logLevel)) } - colorLevel := getColorLevel(colorMode, logIsParseable) + colorLevel := getColorLevel(opts.ColorMode, opts.LogIsParseable) color.Enable = colorLevel != terminfo.ColorLevelNone color.ForceSetColorLevel(colorLevel) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/pkg/featgate/feat.go new/nelm-1.3.0/pkg/featgate/feat.go --- old/nelm-1.2.2/pkg/featgate/feat.go 1970-01-01 01:00:00.000000000 +0100 +++ new/nelm-1.3.0/pkg/featgate/feat.go 2025-05-07 12:46:15.000000000 +0200 @@ -0,0 +1,20 @@ +package featgate + +import ( + "os" + + "github.com/chanced/caps" + + "github.com/werf/nelm/internal/common" +) + +const ( + // TODO(v2): always enable + FeatGateRemoteCharts = "remote-charts" +) + +var FeatGateEnvVarsPrefix = caps.ToScreamingSnake(common.Brand) + "_FEAT_" + +func FeatGateEnabled(featGate string) bool { + return os.Getenv(FeatGateEnvVarsPrefix+caps.ToScreamingSnake(featGate)) == "true" +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nelm-1.2.2/trdl_channels.yaml new/nelm-1.3.0/trdl_channels.yaml --- old/nelm-1.2.2/trdl_channels.yaml 2025-04-30 14:26:00.000000000 +0200 +++ new/nelm-1.3.0/trdl_channels.yaml 2025-05-07 12:46:15.000000000 +0200 @@ -2,11 +2,11 @@ - name: "1" channels: - name: alpha - version: 1.2.1 + version: 1.2.2 - name: beta - version: 1.1.5 + version: 1.2.2 - name: ea - version: 1.1.1 + version: 1.1.5 - name: stable version: 1.1.1 - name: rock-solid ++++++ nelm.obsinfo ++++++ --- /var/tmp/diff_new_pack.gu7oDL/_old 2025-05-07 19:21:54.564816375 +0200 +++ /var/tmp/diff_new_pack.gu7oDL/_new 2025-05-07 19:21:54.564816375 +0200 @@ -1,5 +1,5 @@ name: nelm -version: 1.2.2 -mtime: 1746015960 -commit: 2b97091d6f87d5d9ecd10b5cfb814e57ac4f32de +version: 1.3.0 +mtime: 1746614775 +commit: d2d74179b19089543e60d302f74e969f6cbe8d6c ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/nelm/vendor.tar.gz /work/SRC/openSUSE:Factory/.nelm.new.30101/vendor.tar.gz differ: char 12, line 1