diff --git a/internal/plugin/installer/base.go b/internal/plugin/installer/base.go index c21a245a8..3f736a761 100644 --- a/internal/plugin/installer/base.go +++ b/internal/plugin/installer/base.go @@ -41,5 +41,11 @@ func (b *base) Path() string { if b.Source == "" { return "" } - return filepath.Join(b.PluginsDirectory, filepath.Base(b.Source)) + + pluginsDirectory := b.PluginsDirectory + if pluginsDirectories := filepath.SplitList(b.PluginsDirectory); len(pluginsDirectories) > 0 { + pluginsDirectory = pluginsDirectories[0] + } + + return filepath.Join(pluginsDirectory, filepath.Base(b.Source)) } diff --git a/internal/plugin/installer/base_test.go b/internal/plugin/installer/base_test.go index 6df8ec8a1..bedf8bef5 100644 --- a/internal/plugin/installer/base_test.go +++ b/internal/plugin/installer/base_test.go @@ -14,10 +14,16 @@ limitations under the License. package installer // import "helm.sh/helm/v4/internal/plugin/installer" import ( + "fmt" + "path/filepath" "testing" ) func TestPath(t *testing.T) { + pluginsDir := filepath.Join(string(filepath.Separator), "helm", "data", "plugins") + systemPluginsDir := filepath.Join(string(filepath.Separator), "helm", "system", "plugins") + pluginSource := "https://github.com/jkroepke/helm-secrets" + tests := []struct { source string helmPluginsDir string @@ -25,12 +31,16 @@ func TestPath(t *testing.T) { }{ { source: "", - helmPluginsDir: "/helm/data/plugins", + helmPluginsDir: pluginsDir, expectPath: "", }, { - source: "https://github.com/jkroepke/helm-secrets", - helmPluginsDir: "/helm/data/plugins", - expectPath: "/helm/data/plugins/helm-secrets", + source: pluginSource, + helmPluginsDir: pluginsDir, + expectPath: filepath.Join(pluginsDir, filepath.Base(pluginSource)), + }, { + source: pluginSource, + helmPluginsDir: fmt.Sprintf("%s%c%s", pluginsDir, filepath.ListSeparator, systemPluginsDir), + expectPath: filepath.Join(pluginsDir, filepath.Base(pluginSource)), }, }