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

Reply via email to