Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
28d5f54
Squashed 'pkg/helm/' content from commit f03cc04ca
ilya-lesikov Mar 24, 2026
07f2dfc
Merge commit '28d5f541b451a05b362ec8c8dee9556d34eeefc8' as 'pkg/helm'
ilya-lesikov Mar 24, 2026
961ca04
feat!: new major release 2.0
ilya-lesikov Mar 27, 2026
ebc52bf
chore: sync with main
dmmordvi Mar 31, 2026
8348f9b
refactor: remove unnecessary flags and featgates
dmmordvi Apr 1, 2026
c089430
refactor: remove unnecessary ChartDirPath
dmmordvi Apr 2, 2026
3ef6dc9
refactor: update dependency handling to support multiple operations
dmmordvi Apr 2, 2026
be2f6f8
refactor: remove deprecated dependency annotation `<name>.dependency.…
dmmordvi Apr 3, 2026
3406519
deps: replace andremueller/cobra fork with werf/3p-cobra rebased on v…
alexey-igrychev Apr 6, 2026
074d350
feat: new release history
dmmordvi Apr 7, 2026
56c19f1
refactor: rename release history --max to --revisions-limit and chang…
dmmordvi Apr 7, 2026
1a42481
feat: expose plan artifact in actions api (#586)
drey Apr 8, 2026
4c37982
Merge branch 'main' into 2
dmmordvi Apr 9, 2026
2ee2d05
chore: remove renaming step `main -> helm` from helm sync task
dmmordvi Apr 9, 2026
e2da8b7
Merge branch 'main' into 2
dmmordvi Apr 21, 2026
1e1068f
fix: use v3 util for Chart.yaml load
dmmordvi Apr 21, 2026
7a758a4
fix: clientFactory=nil breaks werf tests
dmmordvi Apr 22, 2026
e9ec2eb
doc: add plan artifact feature description (#597)
drey Apr 23, 2026
8a3cba3
chore: fix typo in the README.md (#598)
drey Apr 23, 2026
d1b6297
feat: forbid resource recreation if helm.sh/resource-policy set
drey Apr 24, 2026
3ebc015
chore: helm test cleanup and linter fixes (#609)
dmmordvi Apr 28, 2026
3e7ff15
refactor: change Version to APIVersion in ReleaseReportV3 (#607)
dmmordvi Apr 28, 2026
2159f96
feat: bump default local kube version for rendering to 1.36.0
ilya-lesikov Apr 29, 2026
55bc462
fix: simpler sorting for resources
ilya-lesikov Apr 29, 2026
3651474
fix: don't hard-fail on unsupported env vars
ilya-lesikov Apr 29, 2026
3a2264e
fix: remove support for all legacy HELM_* env vars (#611)
ilya-lesikov Apr 29, 2026
64ef060
fix: --set/set-file/set-string flags incorrectly split on commas
ilya-lesikov May 5, 2026
7f6b863
refactor: join Hooks and Resources as ResourceSpecs (#612)
dmmordvi May 5, 2026
4b380c7
refactor: use `encoding/json` for marshaling and unmarshaling (#613)
dmmordvi May 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .github/workflows/test_pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ jobs:
- 'go.mod'
- 'go.sum'
- 'cmd/nelm/**'
- 'internal/**'
- 'pkg/**'
- 'scripts/**'
lint:
Expand Down
7 changes: 3 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

All rules in this document are requirements — not suggestions. ALWAYS follow them.

Nelm is a Go-based Kubernetes deployment tool, which deploys Helm charts, is compatible with Helm releases, and is an alternative to Helm. Nelm is built on top of a Helm fork ([werf/3p-helm](https://github.com/werf/3p-helm)) and is also used as the deployment engine of [werf](https://github.com/werf/werf).
Nelm is a Go-based Kubernetes deployment tool, which deploys Helm charts, is compatible with Helm releases, and is an alternative to Helm. Nelm is built on top of a Helm fork and is also used as the deployment engine of [werf](https://github.com/werf/werf).

## Highest-priority rule (MANDATORY)

Expand Down Expand Up @@ -75,7 +75,7 @@ ALWAYS use these `task` commands. NEVER use raw `go build`, `go test`, `go fmt`,
- ALWAYS place tests alongside source files, not in a separate directory.
- Test helpers go in `helpers_test.go` (or `helpers_ai_test.go` for AI-written helpers).
- Test fixtures go in `testdata/` subdirectory next to the tests.
- Shared test helpers are in `internal/test/`.
- Shared test helpers are in `pkg/test/`.

## PR review guidelines (MANDATORY)

Expand All @@ -85,7 +85,6 @@ ALWAYS use these `task` commands. NEVER use raw `go build`, `go test`, `go fmt`,

## Related repositories

- [werf/3p-helm](https://github.com/werf/3p-helm) — Helm fork. Provides chart loading, rendering, and release primitives. Changes to Helm internals go here, not in nelm.
- [werf/kubedog](https://github.com/werf/kubedog) — Kubernetes resource tracking library. Used by `internal/track/`.
- [werf/kubedog](https://github.com/werf/kubedog) — Kubernetes resource tracking library. Used by `pkg/track/`.
- [werf/common-go](https://github.com/werf/common-go) — Shared Go libraries (secrets, CLI utilities, locking).
- [werf/werf](https://github.com/werf/werf) — CI/CD tool that uses nelm as its deployment engine.
19 changes: 15 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

**Nelm** is a Helm 4 alternative. It is a Kubernetes deployment tool that manages Helm Charts and deploys them to Kubernetes. It is also the deployment engine of [werf](https://github.com/werf/werf). Nelm does everything that Helm does, but better, and even quite some on top of it. Nelm is based on an improved and partially rewritten Helm codebase, to introduce:

* `terraform plan`-like capabilities;
* `terraform plan`-like capabilities with two-stage deployment support;
* improved CRD management;
* out-of-the-box secrets management;
* advanced resource ordering capabilities;
Expand Down Expand Up @@ -35,7 +35,7 @@ Nelm is production-ready: as the werf deployment engine, it was battle-tested ac
- [Advanced resource lifecycle capabilities](#advanced-resource-lifecycle-capabilities)
- [Resource state tracking](#resource-state-tracking)
- [Printing logs and events during deploy](#printing-logs-and-events-during-deploy)
- [Release planning](#release-planning)
- [Release planning and two-stage deployment support](#release-planning-and-two-stage-deployment-workflow-support)
- [Encrypted values and encrypted files](#encrypted-values-and-encrypted-files)
- [Improved CRD management](#improved-crd-management)
- [Usage](#usage)
Expand Down Expand Up @@ -244,12 +244,23 @@ Nelm has powerful resource tracking built from the ground up, much more advanced

During the deployment, Nelm finds Pods of deploying resources and periodically prints their container logs. With annotation `werf.io/show-service-messages: "true"`, resource events are also printed. Can be configured with CLI flags and annotations.

### Release planning
### Release planning and two-stage deployment workflow support

`nelm release plan install` shows exactly what's going to happen in the cluster on the next release. It shows 100% accurate diffs between current and to-be resource versions, utilizing robust dry-run Server-Side Apply instead of client-side trickery.
`nelm release plan install` shows exactly what's going to happen in the cluster on the next release. It shows diffs between the current and to-be resource versions, utilizing robust dry-run Kubernetes Server-Side Apply capabilities.

![planning](resources/images/nelm-release-plan-install.png)

To ensure that these exact changes will be applied during the release install, you can utilize a two-stage deployment workflow:

1. **Plan:** Generate, review, and save a plan artifact using the `--save-plan` flag:
```
nelm release plan install --save-plan=plan.gz
```
2. **Apply:** Perform the release install rapidly using the pre-generated reviewed plan:
```
nelm release install --use-plan=plan.gz
```

### Encrypted values and encrypted files

`nelm chart secret` commands manage encrypted values files such as `secret-values.yaml` or encrypted arbitrary files like `secret/mysecret.txt`. These files are decrypted in-memory during templating and can be used in templates as `.Values.my.secret.value` and `{{ werf_secret_file "mysecret.txt" }}`, respectively.
Expand Down
30 changes: 19 additions & 11 deletions Taskfile.dist.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ tasks:
internal: true
run: once
cmds:
- golangci-lint run {{if eq .fix "true"}}--fix{{end}} --build-tags="{{.tags}}" {{.CLI_ARGS}} {{.paths | default "$(find pkg/ -mindepth 1 -maxdepth 1 -type d ! -name helm -printf './%p/... ' 2>/dev/null || find pkg/ -mindepth 1 -maxdepth 1 -type d ! -name helm | xargs -I{} echo './{}/...') ./cmd/..."}}
- golangci-lint run {{if eq .fix "true"}}--fix{{end}} --build-tags="{{.tags}}" {{.CLI_ARGS}} {{.paths | default "$(find pkg/ -mindepth 1 -maxdepth 1 -type d ! -name helm -printf './%p/... ') ./cmd/..."}}
vars:
paths: "{{.paths}}"

Expand Down Expand Up @@ -237,7 +237,7 @@ tasks:
- task: test:ginkgo
vars:
paths: '{{.paths | default "./pkg ./cmd"}}'
skipPackage: "pkg/helm{{if .skipPackage}},{{.skipPackage}}{{end}}"
skipPackage: "{{.skipPackage}}"
parallel: "{{.parallel}}"

verify:binaries:dist:all:
Expand Down Expand Up @@ -288,6 +288,7 @@ tasks:
generate:reference:
desc: "Generate CLI reference documentation with TOC."
env:
# TODO(major): not supported anymore
HELM_CONFIG_HOME: "~/.config/helm"
HELM_CACHE_HOME: "~/.cache/helm"
HELM_DATA_HOME: "~/.local/share/helm"
Expand Down Expand Up @@ -491,8 +492,7 @@ tasks:
sg scan --rule "$intern_rule" -U "{{.forkSnapshotDir}}"
rm -f "$intern_rule"

rm -f "{{.forkSnapshotDir}}/cmd/helm/helm.go"
find "{{.forkSnapshotDir}}/cmd/helm" -name "*.go" -exec perl -i -p -e 's/^package main$/package helm/' {} +
rm -rf "{{.forkSnapshotDir}}/cmd"

git -C "{{.forkSnapshotDir}}" add -A
git -C "{{.forkSnapshotDir}}" -c user.name="sync" -c user.email="sync@local" \
Expand All @@ -504,13 +504,21 @@ tasks:
git fetch "{{.forkTempRemote}}" prepared
git checkout -B "{{.forkSyncBranch}}" FETCH_HEAD --no-track

stripped=0
while IFS= read -r sync_path; do
if ! git -c core.quotePath=false ls-tree --name-only "${original_ref}" -- "{{.forkPrefix}}/${sync_path}" | grep -q .; then
git rm -rf -- "$sync_path"
stripped=$((stripped + 1))
fi
done < <(git ls-tree --name-only HEAD)
prev_split=$(git log --grep="git-subtree-dir: {{.forkPrefix}}" --format="%b" "${original_ref}" | grep "^git-subtree-split:" | head -n1 | cut -d' ' -f2)
if [ -z "$prev_split" ]; then
echo "WARNING: no previous subtree split found for {{.forkPrefix}}, skipping file stripping"
else
stripped=0
while IFS= read -r sync_path; do
if ! git -c core.quotePath=false ls-tree "${original_ref}" -- "{{.forkPrefix}}/${sync_path}" | grep -q .; then
if git -c core.quotePath=false ls-tree "$prev_split" -- "$sync_path" | grep -q .; then
git rm -rf -- "$sync_path"
stripped=$((stripped + 1))
fi
fi
done < <(git -c core.quotePath=false ls-tree -r --name-only HEAD)
echo "Stripped $stripped files that were removed from our fork"
fi

if ! git diff --cached --quiet; then
git commit -m "sync: strip paths not kept in {{.forkPrefix}}"
Expand Down
7 changes: 4 additions & 3 deletions cmd/nelm/chart_dependency_download.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ import (
"github.com/spf13/cobra"

"github.com/werf/common-go/pkg/cli"
helm_v3 "github.com/werf/nelm/pkg/helm/cmd/helm"
"github.com/werf/nelm/pkg/action"
"github.com/werf/nelm/pkg/helm/pkg/chart/loader"
helmcmd "github.com/werf/nelm/pkg/helm/pkg/cmd"
"github.com/werf/nelm/pkg/log"
)

Expand All @@ -31,9 +32,9 @@ func newChartDependencyDownloadCommand(ctx context.Context, afterAllCommandsBuil

originalRunE := cmd.RunE
cmd.RunE = func(cmd *cobra.Command, args []string) error {
helmSettings := helm_v3.Settings
helmSettings := helmcmd.Settings

ctx = log.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, log.DebugLevel, log.InfoLevel), log.SetupLoggingOptions{})
ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, log.DebugLevel, log.InfoLevel), action.SetupLoggingOptions{})

loader.NoChartLockWarning = ""

Expand Down
7 changes: 4 additions & 3 deletions cmd/nelm/chart_dependency_update.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ import (
"github.com/spf13/cobra"

"github.com/werf/common-go/pkg/cli"
helm_v3 "github.com/werf/nelm/pkg/helm/cmd/helm"
"github.com/werf/nelm/pkg/action"
"github.com/werf/nelm/pkg/helm/pkg/chart/loader"
helmcmd "github.com/werf/nelm/pkg/helm/pkg/cmd"
"github.com/werf/nelm/pkg/log"
)

Expand All @@ -29,9 +30,9 @@ func newChartDependencyUpdateCommand(ctx context.Context, afterAllCommandsBuiltF

originalRunE := cmd.RunE
cmd.RunE = func(cmd *cobra.Command, args []string) error {
helmSettings := helm_v3.Settings
helmSettings := helmcmd.Settings

ctx = log.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, log.DebugLevel, log.InfoLevel), log.SetupLoggingOptions{})
ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, log.DebugLevel, log.InfoLevel), action.SetupLoggingOptions{})

loader.NoChartLockWarning = ""

Expand Down
7 changes: 4 additions & 3 deletions cmd/nelm/chart_download.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ import (
"github.com/spf13/cobra"

"github.com/werf/common-go/pkg/cli"
helm_v3 "github.com/werf/nelm/pkg/helm/cmd/helm"
"github.com/werf/nelm/pkg/action"
"github.com/werf/nelm/pkg/helm/pkg/chart/loader"
helmcmd "github.com/werf/nelm/pkg/helm/pkg/cmd"
"github.com/werf/nelm/pkg/log"
)

Expand All @@ -26,9 +27,9 @@ func newChartDownloadCommand(ctx context.Context, afterAllCommandsBuiltFuncs map

originalRunE := cmd.RunE
cmd.RunE = func(cmd *cobra.Command, args []string) error {
helmSettings := helm_v3.Settings
helmSettings := helmcmd.Settings

ctx = log.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, log.DebugLevel, log.InfoLevel), log.SetupLoggingOptions{})
ctx = action.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, log.DebugLevel, log.InfoLevel), action.SetupLoggingOptions{})

loader.NoChartLockWarning = ""

Expand Down
29 changes: 8 additions & 21 deletions cmd/nelm/chart_lint.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (
"github.com/werf/common-go/pkg/cli"
"github.com/werf/nelm/pkg/action"
"github.com/werf/nelm/pkg/common"
"github.com/werf/nelm/pkg/featgate"
"github.com/werf/nelm/pkg/log"
)

Expand All @@ -25,11 +24,7 @@ func newChartLintCommand(ctx context.Context, afterAllCommandsBuiltFuncs map[*co
cfg := &chartLintConfig{}

use := "lint [options...]"
if featgate.FeatGateRemoteCharts.Enabled() || featgate.FeatGatePreviewV2.Enabled() {
use += " [chart-dir|chart-repo-name/chart-name|chart-archive|chart-archive-url]"
} else {
use += " [chart-dir]"
}
use += " [chart-dir|chart-repo-name/chart-name|chart-archive|chart-archive-url]"

cmd := cli.NewSubCommand(
ctx,
Expand All @@ -45,16 +40,10 @@ func newChartLintCommand(ctx context.Context, afterAllCommandsBuiltFuncs map[*co
},
},
func(cmd *cobra.Command, args []string) error {
ctx = log.SetupLogging(ctx, cmp.Or(log.Level(cfg.LogLevel), action.DefaultChartLintLogLevel), log.SetupLoggingOptions{
ColorMode: cfg.LogColorMode,
})
ctx = action.SetupLogging(ctx, cmp.Or(log.Level(cfg.LogLevel), action.DefaultChartLintLogLevel), action.SetupLoggingOptions{ColorMode: cfg.LogColorMode})

if len(args) > 0 {
if featgate.FeatGateRemoteCharts.Enabled() || featgate.FeatGatePreviewV2.Enabled() {
cfg.Chart = args[0]
} else {
cfg.ChartDirPath = args[0]
}
cfg.Chart = args[0]
}

if err := action.ChartLint(ctx, cfg.ChartLintOptions); err != nil {
Expand Down Expand Up @@ -116,13 +105,11 @@ func newChartLintCommand(ctx context.Context, afterAllCommandsBuiltFuncs map[*co
return fmt.Errorf("add flag: %w", err)
}

if featgate.FeatGateRemoteCharts.Enabled() || featgate.FeatGatePreviewV2.Enabled() {
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.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)
}

// TODO: restrict allowed values
Expand Down
12 changes: 7 additions & 5 deletions cmd/nelm/chart_pack.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,16 @@ import (
"github.com/spf13/cobra"

"github.com/werf/common-go/pkg/cli"
helm_v3 "github.com/werf/nelm/pkg/helm/cmd/helm"
"github.com/werf/nelm/pkg/action"
"github.com/werf/nelm/pkg/common"
"github.com/werf/nelm/pkg/helm/pkg/chart/loader"
"github.com/werf/nelm/pkg/helm/pkg/werf/helmopts"
helmcmd "github.com/werf/nelm/pkg/helm/pkg/cmd"
"github.com/werf/nelm/pkg/log"
"github.com/werf/nelm/pkg/ts"
)

func newChartPackCommand(ctx context.Context, afterAllCommandsBuiltFuncs map[*cobra.Command]func(cmd *cobra.Command) error) *cobra.Command {
opts := helmopts.TypeScriptOptions{}
opts := common.TypeScriptOptions{}
cmd := lo.Must(lo.Find(helmRootCmd.Commands(), func(c *cobra.Command) bool {
return strings.HasPrefix(c.Use, "package")
}))
Expand All @@ -31,9 +32,10 @@ func newChartPackCommand(ctx context.Context, afterAllCommandsBuiltFuncs map[*co

originalRunE := cmd.RunE
cmd.RunE = func(cmd *cobra.Command, args []string) error {
helmSettings := helm_v3.Settings
helmSettings := helmcmd.Settings

ctx = log.SetupLogging(ctx, lo.Ternary(helmSettings.Debug, log.DebugLevel, log.InfoLevel), log.SetupLoggingOptions{})
// TODO(major): should we do it like that everywhere, setting the context?
ctx = action.SetupLogging(cmd.Context(), lo.Ternary(helmSettings.Debug, log.DebugLevel, log.InfoLevel), action.SetupLoggingOptions{})
ctx = ts.NewContextWithTSOptions(ctx, opts)
cmd.SetContext(ctx)

Expand Down
34 changes: 8 additions & 26 deletions cmd/nelm/chart_render.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (
"github.com/werf/common-go/pkg/cli"
"github.com/werf/nelm/pkg/action"
"github.com/werf/nelm/pkg/common"
"github.com/werf/nelm/pkg/featgate"
"github.com/werf/nelm/pkg/log"
)

Expand All @@ -25,11 +24,7 @@ func newChartRenderCommand(ctx context.Context, afterAllCommandsBuiltFuncs map[*
cfg := &chartRenderConfig{}

use := "render [options...]"
if featgate.FeatGateRemoteCharts.Enabled() || featgate.FeatGatePreviewV2.Enabled() {
use += " [chart-dir|chart-repo-name/chart-name|chart-archive|chart-archive-url]"
} else {
use += " [chart-dir]"
}
use += " [chart-dir|chart-repo-name/chart-name|chart-archive|chart-archive-url]"

cmd := cli.NewSubCommand(
ctx,
Expand All @@ -45,17 +40,13 @@ func newChartRenderCommand(ctx context.Context, afterAllCommandsBuiltFuncs map[*
},
},
func(cmd *cobra.Command, args []string) error {
ctx = log.SetupLogging(ctx, cmp.Or(log.Level(cfg.LogLevel), action.DefaultChartRenderLogLevel), log.SetupLoggingOptions{
ctx = action.SetupLogging(ctx, cmp.Or(log.Level(cfg.LogLevel), action.DefaultChartRenderLogLevel), action.SetupLoggingOptions{
ColorMode: cfg.LogColorMode,
LogIsParseable: true,
})

if len(args) > 0 {
if featgate.FeatGateRemoteCharts.Enabled() || featgate.FeatGatePreviewV2.Enabled() {
cfg.Chart = args[0]
} else {
cfg.ChartDirPath = args[0]
}
cfg.Chart = args[0]
}

if _, err := action.ChartRender(ctx, cfg.ChartRenderOptions); err != nil {
Expand Down Expand Up @@ -113,13 +104,11 @@ func newChartRenderCommand(ctx context.Context, afterAllCommandsBuiltFuncs map[*
return fmt.Errorf("add flag: %w", err)
}

if featgate.FeatGateRemoteCharts.Enabled() || featgate.FeatGatePreviewV2.Enabled() {
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.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.ExtraAPIVersions, "extra-apiversions", nil, "Extra Kubernetes API versions passed to $.Capabilities.APIVersions", cli.AddFlagOptions{
Expand Down Expand Up @@ -150,13 +139,6 @@ func newChartRenderCommand(ctx context.Context, afterAllCommandsBuiltFuncs map[*
return fmt.Errorf("add flag: %w", err)
}

if err := cli.AddFlag(cmd, &cfg.ForceAdoption, "force-adoption", false, "Always adopt resources, even if they belong to a different Helm release", cli.AddFlagOptions{
GetEnvVarRegexesFunc: cli.GetFlagGlobalAndLocalEnvVarRegexes,
Group: mainFlagGroup,
}); err != nil {
return fmt.Errorf("add flag: %w", err)
}

if err := cli.AddFlag(cmd, &cfg.LocalKubeVersion, "kube-version", common.DefaultLocalKubeVersion, "Kubernetes version stub for non-remote mode", cli.AddFlagOptions{
Group: mainFlagGroup,
}); err != nil {
Expand Down
2 changes: 1 addition & 1 deletion cmd/nelm/chart_secret_file_decrypt.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ func newChartSecretFileDecryptCommand(ctx context.Context, afterAllCommandsBuilt
},
},
func(cmd *cobra.Command, args []string) error {
ctx = log.SetupLogging(ctx, cmp.Or(log.Level(cfg.LogLevel), action.DefaultSecretFileDecryptLogLevel), log.SetupLoggingOptions{
ctx = action.SetupLogging(ctx, cmp.Or(log.Level(cfg.LogLevel), action.DefaultSecretFileDecryptLogLevel), action.SetupLoggingOptions{
ColorMode: cfg.LogColorMode,
LogIsParseable: true,
})
Expand Down
4 changes: 1 addition & 3 deletions cmd/nelm/chart_secret_file_edit.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,7 @@ func newChartSecretFileEditCommand(ctx context.Context, afterAllCommandsBuiltFun
},
},
func(cmd *cobra.Command, args []string) error {
ctx = log.SetupLogging(ctx, cmp.Or(log.Level(cfg.LogLevel), action.DefaultSecretFileEditLogLevel), log.SetupLoggingOptions{
ColorMode: cfg.LogColorMode,
})
ctx = action.SetupLogging(ctx, cmp.Or(log.Level(cfg.LogLevel), action.DefaultSecretFileEditLogLevel), action.SetupLoggingOptions{ColorMode: cfg.LogColorMode})

cfg.File = args[0]

Expand Down
Loading
Loading