diff --git a/pkg/chart/dependency.go b/pkg/chart/dependency.go index da002a1fe..991dcf9e6 100644 --- a/pkg/chart/dependency.go +++ b/pkg/chart/dependency.go @@ -26,6 +26,8 @@ type Dependency struct { // // This must mach the name in the dependency's Chart.yaml. Name string `json:"name"` + // The URL to the OCI registry. + Repository string `json:"repository"` // Version is the version (range) of this chart. // // A lock file will always produce a single version, while a dependency diff --git a/pkg/downloader/manager.go b/pkg/downloader/manager.go index 4a5243cb2..3c534b6ec 100644 --- a/pkg/downloader/manager.go +++ b/pkg/downloader/manager.go @@ -184,7 +184,7 @@ func (m *Manager) downloadAll(deps []*chart.Dependency) error { fmt.Fprintf(m.Out, "Downloading %s\n", dep.Name) - ref, err := repo.ParseNameTag(dep.Name, dep.Version) + ref, err := repo.ParseRepoNameTag(dep.Repository, dep.Name, dep.Version) if err != nil { saveError = errors.Wrapf(err, "could not parse dependency %q", dep.Name) break diff --git a/pkg/repo/reference.go b/pkg/repo/reference.go index f5c7caea0..4c99be129 100644 --- a/pkg/repo/reference.go +++ b/pkg/repo/reference.go @@ -17,6 +17,8 @@ limitations under the License. package repo // import "helm.sh/helm/pkg/repo" import ( + "path" + "github.com/containerd/containerd/reference" ) @@ -28,3 +30,12 @@ func ParseNameTag(name, tag string) (reference.Spec, error) { } return reference.Parse(s) } + +// ParseRepoNameTag converts a name and a version to a reference +func ParseRepoNameTag(repo, name, tag string) (reference.Spec, error) { + s := path.Join(repo, name) + if tag != "" { + s += ":" + tag + } + return reference.Parse(s) +}