diff --git a/docs/helm/helm_dependency.md b/docs/helm/helm_dependency.md index 4b05101f8..a3fc9d60d 100644 --- a/docs/helm/helm_dependency.md +++ b/docs/helm/helm_dependency.md @@ -39,6 +39,16 @@ appending '/index.yaml' to the URL, it should be able to retrieve the chart repository's index. Note: 'repository' cannot be a repository alias. It must be a URL. +Starting from 2.2.0, repository can be defined as the path to the directory of +the dependency charts stored locally. The path should start with a prefix of "file://". +For example, + # requirements.yaml + dependencies: + - name: nginx + version: "1.2.3" + repository: "file://../depedency_chart/nginx" +If the dependency chart is retrieved locally, it is not required to have the repository +added to helm by "helm add repo". Version matching is also supported for this case. ### Options inherited from parent commands diff --git a/pkg/downloader/manager.go b/pkg/downloader/manager.go index 60b8518ff..dc6508d42 100644 --- a/pkg/downloader/manager.go +++ b/pkg/downloader/manager.go @@ -313,13 +313,13 @@ func (m *Manager) getRepoNames(deps []*chartutil.Dependency) (map[string]string, for _, dd := range deps { // if dep chart is from local path, verify the path is valid if strings.HasPrefix(dd.Repository, "file://") { - depPath, err := filepath.Abs(dd.Repository[7:]) + depPath, err := filepath.Abs(strings.TrimPrefix(dd.Repository, "file://")) if err != nil { return nil, err } if _, err = os.Stat(depPath); os.IsNotExist(err) { - return nil, fmt.Errorf("directory %s not found: %s", depPath, err) + return nil, fmt.Errorf("directory %s not found", depPath) } fmt.Fprintf(m.Out, "Repository from local path: %s\n", dd.Repository) diff --git a/pkg/resolver/resolver.go b/pkg/resolver/resolver.go index 294ff33e7..b0b2000fb 100644 --- a/pkg/resolver/resolver.go +++ b/pkg/resolver/resolver.go @@ -58,7 +58,7 @@ func (r *Resolver) Resolve(reqs *chartutil.Requirements, repoNames map[string]st missing := []string{} for i, d := range reqs.Dependencies { if strings.HasPrefix(d.Repository, "file://") { - depPath, err := filepath.Abs(d.Repository[7:]) + depPath, err := filepath.Abs(strings.TrimPrefix(d.Repository, "file://")) if err != nil { return nil, err } diff --git a/pkg/resolver/resolver_test.go b/pkg/resolver/resolver_test.go index c284597a1..b4b77794f 100644 --- a/pkg/resolver/resolver_test.go +++ b/pkg/resolver/resolver_test.go @@ -78,7 +78,20 @@ func TestResolve(t *testing.T) { }, }, { - name: "repo from local invalid path", + name: "repo from valid local path", + req: &chartutil.Requirements{ + Dependencies: []*chartutil.Dependency{ + {Name: "signtest", Repository: "file://../testdata/testcharts/signtest", Version: "0.1.0"}, + }, + }, + expect: &chartutil.RequirementsLock{ + Dependencies: []*chartutil.Dependency{ + {Name: "signtest", Repository: "file://../testdata/testcharts/signtest", Version: "0.1.0"}, + }, + }, + }, + { + name: "repo from invalid local path", req: &chartutil.Requirements{ Dependencies: []*chartutil.Dependency{ {Name: "notexist", Repository: "file://../testdata/notexist", Version: "0.1.0"},