diff --git a/pkg/plugin/installer/base.go b/pkg/plugin/installer/base.go index dcc3ad644..ba6a55d55 100644 --- a/pkg/plugin/installer/base.go +++ b/pkg/plugin/installer/base.go @@ -18,16 +18,22 @@ package installer // import "helm.sh/helm/v3/pkg/plugin/installer" import ( "path/filepath" - "helm.sh/helm/v3/pkg/helmpath" + "helm.sh/helm/v3/pkg/cli" ) type base struct { // Source is the reference to a plugin Source string + // PluginsDirectory is the directory where plugins are installed + PluginsDirectory string } func newBase(source string) base { - return base{source} + settings := cli.New() + return base{ + Source: source, + PluginsDirectory: settings.PluginsDirectory, + } } // Path is where the plugin will be installed. @@ -35,5 +41,5 @@ func (b *base) Path() string { if b.Source == "" { return "" } - return helmpath.DataPath("plugins", filepath.Base(b.Source)) + return filepath.Join(b.PluginsDirectory, filepath.Base(b.Source)) } diff --git a/pkg/plugin/installer/base_test.go b/pkg/plugin/installer/base_test.go new file mode 100644 index 000000000..38ef28c3e --- /dev/null +++ b/pkg/plugin/installer/base_test.go @@ -0,0 +1,48 @@ +/* +Copyright The Helm Authors. +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package installer // import "helm.sh/helm/v3/pkg/plugin/installer" + +import ( + "os" + "testing" +) + +func TestPath(t *testing.T) { + tests := []struct { + source string + helmPluginsDir string + expectPath string + }{ + { + source: "", + helmPluginsDir: "/helm/data/plugins", + expectPath: "", + }, { + source: "https://github.com/jkroepke/helm-secrets", + helmPluginsDir: "/helm/data/plugins", + expectPath: "/helm/data/plugins/helm-secrets", + }, + } + + for _, tt := range tests { + + os.Setenv("HELM_PLUGINS", tt.helmPluginsDir) + baseIns := newBase(tt.source) + baseInsPath := baseIns.Path() + if baseInsPath != tt.expectPath { + t.Errorf("expected name %s, got %s", tt.expectPath, baseInsPath) + } + os.Unsetenv("HELM_PLUGINS") + } +}