diff --git a/cmd/helm/root.go b/cmd/helm/root.go index eb645c909..0de4a738a 100644 --- a/cmd/helm/root.go +++ b/cmd/helm/root.go @@ -51,7 +51,7 @@ Environment variables: | $HELM_CONFIG_HOME | set an alternative location for storing Helm configuration. | | $HELM_DATA_HOME | set an alternative location for storing Helm data. | | $HELM_DEBUG | indicate whether or not Helm is running in Debug mode | -| $HELM_DRIVER | set the backend storage driver. Values are: configmap, secret, memory, postgres | +| $HELM_DRIVER | set the backend storage driver. Values are: configmap, secret, memory, sql. | | $HELM_DRIVER_SQL_CONNECTION_STRING | set the connection string the SQL storage driver should use. | | $HELM_MAX_HISTORY | set the maximum number of helm release history. | | $HELM_NAMESPACE | set the namespace used for the helm operations. | diff --git a/pkg/downloader/manager.go b/pkg/downloader/manager.go index 8d210ea70..b5d7e26b3 100644 --- a/pkg/downloader/manager.go +++ b/pkg/downloader/manager.go @@ -802,6 +802,7 @@ func normalizeURL(baseURL, urlOrPath string) (string, error) { return urlOrPath, errors.Wrap(err, "base URL failed to parse") } + u2.RawPath = path.Join(u2.RawPath, urlOrPath) u2.Path = path.Join(u2.Path, urlOrPath) return u2.String(), nil } diff --git a/pkg/downloader/manager_test.go b/pkg/downloader/manager_test.go index b2b32bf74..8b871e66e 100644 --- a/pkg/downloader/manager_test.go +++ b/pkg/downloader/manager_test.go @@ -55,6 +55,7 @@ func TestNormalizeURL(t *testing.T) { }{ {name: "basic URL", base: "https://example.com", path: "http://helm.sh/foo", expect: "http://helm.sh/foo"}, {name: "relative path", base: "https://helm.sh/charts", path: "foo", expect: "https://helm.sh/charts/foo"}, + {name: "Encoded path", base: "https://helm.sh/a%2Fb/charts", path: "foo", expect: "https://helm.sh/a%2Fb/charts/foo"}, } for _, tt := range tests { 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") + } +}