From e037fa27c5776b1c51edd57de2216991d3e23fa6 Mon Sep 17 00:00:00 2001 From: Zakhar Dvurechensky <72825626+Zakharden@users.noreply.github.com> Date: Mon, 11 May 2026 10:46:31 +0300 Subject: [PATCH 1/3] fix(plugin): install into first plugin path Signed-off-by: Zakhar Dvurechensky <72825626+Zakharden@users.noreply.github.com> --- pkg/plugin/installer/base.go | 10 +++++++++- pkg/plugin/installer/base_test.go | 5 +++++ pkg/plugin/installer/http_installer.go | 2 +- pkg/plugin/installer/http_installer_test.go | 17 +++++++++++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/pkg/plugin/installer/base.go b/pkg/plugin/installer/base.go index ba6a55d55..10a1435cf 100644 --- a/pkg/plugin/installer/base.go +++ b/pkg/plugin/installer/base.go @@ -32,10 +32,18 @@ func newBase(source string) base { settings := cli.New() return base{ Source: source, - PluginsDirectory: settings.PluginsDirectory, + PluginsDirectory: firstPluginDir(settings.PluginsDirectory), } } +func firstPluginDir(pluginsDirectory string) string { + paths := filepath.SplitList(pluginsDirectory) + if len(paths) == 0 { + return pluginsDirectory + } + return paths[0] +} + // Path is where the plugin will be installed. func (b *base) Path() string { if b.Source == "" { diff --git a/pkg/plugin/installer/base_test.go b/pkg/plugin/installer/base_test.go index 38ef28c3e..b7f35d4b5 100644 --- a/pkg/plugin/installer/base_test.go +++ b/pkg/plugin/installer/base_test.go @@ -15,6 +15,7 @@ package installer // import "helm.sh/helm/v3/pkg/plugin/installer" import ( "os" + "path/filepath" "testing" ) @@ -32,6 +33,10 @@ func TestPath(t *testing.T) { source: "https://github.com/jkroepke/helm-secrets", helmPluginsDir: "/helm/data/plugins", expectPath: "/helm/data/plugins/helm-secrets", + }, { + source: "https://github.com/jkroepke/helm-secrets", + helmPluginsDir: "/helm/user/plugins" + string(filepath.ListSeparator) + "/helm/shared/plugins", + expectPath: "/helm/user/plugins/helm-secrets", }, } diff --git a/pkg/plugin/installer/http_installer.go b/pkg/plugin/installer/http_installer.go index 56a930836..07e8818c2 100644 --- a/pkg/plugin/installer/http_installer.go +++ b/pkg/plugin/installer/http_installer.go @@ -159,7 +159,7 @@ func (i HTTPInstaller) Path() string { if i.base.Source == "" { return "" } - return helmpath.DataPath("plugins", i.PluginName) + return filepath.Join(i.base.PluginsDirectory, i.PluginName) } // cleanJoin resolves dest as a subpath of root. diff --git a/pkg/plugin/installer/http_installer_test.go b/pkg/plugin/installer/http_installer_test.go index f0fe36ecd..f7611610c 100644 --- a/pkg/plugin/installer/http_installer_test.go +++ b/pkg/plugin/installer/http_installer_test.go @@ -127,6 +127,23 @@ func TestHTTPInstaller(t *testing.T) { } +func TestHTTPInstallerPathWithPluginPathList(t *testing.T) { + first := t.TempDir() + second := t.TempDir() + t.Setenv("HELM_PLUGINS", first+string(filepath.ListSeparator)+second) + + source := "https://example.com/plugins/fake-plugin-0.0.1.tar.gz" + i, err := NewHTTPInstaller(source) + if err != nil { + t.Fatalf("unexpected error: %s", err) + } + + expect := filepath.Join(first, "fake-plugin") + if i.Path() != expect { + t.Fatalf("expected path %q, got %q", expect, i.Path()) + } +} + func TestHTTPInstallerNonExistentVersion(t *testing.T) { ensure.HelmHome(t) srv := mockArchiveServer() From 53747b98bd2a7b11c7eb5a7ab0797fb49516439c Mon Sep 17 00:00:00 2001 From: Zakhar Dvurechensky <72825626+Zakharden@users.noreply.github.com> Date: Sun, 24 May 2026 19:20:25 +0300 Subject: [PATCH 2/3] tests: drop unused os import in plugin installer path test Signed-off-by: Zakhar Dvurechensky <72825626+Zakharden@users.noreply.github.com> --- pkg/plugin/installer/base_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/plugin/installer/base_test.go b/pkg/plugin/installer/base_test.go index b7f35d4b5..ee917a4e5 100644 --- a/pkg/plugin/installer/base_test.go +++ b/pkg/plugin/installer/base_test.go @@ -14,7 +14,6 @@ limitations under the License. package installer // import "helm.sh/helm/v3/pkg/plugin/installer" import ( - "os" "path/filepath" "testing" ) From a962a0a9a6e331ed0af2296049a2fb176d1303e2 Mon Sep 17 00:00:00 2001 From: Zakhar Dvurechensky <72825626+Zakharden@users.noreply.github.com> Date: Sun, 24 May 2026 19:21:54 +0300 Subject: [PATCH 3/3] Revert "tests: drop unused os import in plugin installer path test" This reverts commit 53747b98bd2a7b11c7eb5a7ab0797fb49516439c. Signed-off-by: Zakhar Dvurechensky <72825626+Zakharden@users.noreply.github.com> --- pkg/plugin/installer/base_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/plugin/installer/base_test.go b/pkg/plugin/installer/base_test.go index ee917a4e5..b7f35d4b5 100644 --- a/pkg/plugin/installer/base_test.go +++ b/pkg/plugin/installer/base_test.go @@ -14,6 +14,7 @@ limitations under the License. package installer // import "helm.sh/helm/v3/pkg/plugin/installer" import ( + "os" "path/filepath" "testing" )