diff --git a/internal/chart/v3/metadata.go b/internal/chart/v3/metadata.go index 4629d571b..30f433a29 100644 --- a/internal/chart/v3/metadata.go +++ b/internal/chart/v3/metadata.go @@ -81,6 +81,8 @@ type Metadata struct { Dependencies []*Dependency `json:"dependencies,omitempty"` // Specifies the chart type: application or library Type string `json:"type,omitempty"` + // Specifies the chart URL that was used to initially install a chart. + RepoURL string `json:"repoURL,omitempty"` } // Validate checks the metadata for known issues and sanitizes string @@ -98,6 +100,7 @@ func (md *Metadata) Validate() error { md.Tags = sanitizeString(md.Tags) md.AppVersion = sanitizeString(md.AppVersion) md.KubeVersion = sanitizeString(md.KubeVersion) + md.RepoURL = sanitizeString(md.RepoURL) for i := range md.Sources { md.Sources[i] = sanitizeString(md.Sources[i]) } diff --git a/pkg/action/install.go b/pkg/action/install.go index 50df13c05..ce5069e36 100644 --- a/pkg/action/install.go +++ b/pkg/action/install.go @@ -979,6 +979,7 @@ func (c *ChartPathOptions) LocateChart(name string, settings *cli.EnvSettings) ( if err != nil { return "", err } + c.RepoURL = dl.RepositoryURL lname, err := filepath.Abs(filename) if err != nil { diff --git a/pkg/cmd/install.go b/pkg/cmd/install.go index ed10513c9..85ef48708 100644 --- a/pkg/cmd/install.go +++ b/pkg/cmd/install.go @@ -263,6 +263,12 @@ func runInstall(args []string, client *action.Install, valueOpts *values.Options return nil, err } + if client.ChartPathOptions.RepoURL != "" { + chartRequested.Metadata.RepoURL = client.ChartPathOptions.RepoURL + } else { + chartRequested.Metadata.RepoURL = "path" + } + ac, err := chart.NewAccessor(chartRequested) if err != nil { return nil, err diff --git a/pkg/cmd/upgrade.go b/pkg/cmd/upgrade.go index b71c4ae2d..8588fbf3c 100644 --- a/pkg/cmd/upgrade.go +++ b/pkg/cmd/upgrade.go @@ -198,6 +198,11 @@ func newUpgradeCmd(cfg *action.Configuration, out io.Writer) *cobra.Command { if err != nil { return err } + if client.ChartPathOptions.RepoURL != "" { + ch.Metadata.RepoURL = client.ChartPathOptions.RepoURL + } else { + ch.Metadata.RepoURL = "path" + } ac, err := ci.NewAccessor(ch) if err != nil { diff --git a/pkg/downloader/chart_downloader.go b/pkg/downloader/chart_downloader.go index 9c26f925e..57820fdb2 100644 --- a/pkg/downloader/chart_downloader.go +++ b/pkg/downloader/chart_downloader.go @@ -84,7 +84,8 @@ type ChartDownloader struct { ContentCache string // Cache specifies the cache implementation to use. - Cache Cache + Cache Cache + RepositoryURL string } // DownloadTo retrieves a chart. Depending on the settings, it may also download a provenance file. @@ -445,6 +446,9 @@ func (c *ChartDownloader) ResolveChartVersion(ref, version string) (string, *url } if r != nil && r.Config != nil { + if r.Config.URL != "" { + c.RepositoryURL = r.Config.URL + } if r.Config.CertFile != "" || r.Config.KeyFile != "" || r.Config.CAFile != "" { c.Options = append(c.Options, getter.WithTLSClientConfig(r.Config.CertFile, r.Config.KeyFile, r.Config.CAFile)) }