improve chart URL parsing and tag handling

Signed-off-by: Suleiman Dibirov <idsulik@gmail.com>
pull/13242/head
Suleiman Dibirov 12 months ago
parent b35ab1aa20
commit c17302824d

@ -346,9 +346,14 @@ func (c *ChartDownloader) DownloadToCache(ref, version string) (string, *provena
// //
// TODO: support OCI hash // TODO: support OCI hash
func (c *ChartDownloader) ResolveChartVersion(ref, version string) (string, *url.URL, error) { func (c *ChartDownloader) ResolveChartVersion(ref, version string) (string, *url.URL, error) {
u, err := c.parseChartURL(ref, version) u, err := url.Parse(ref)
if err != nil { if err != nil {
return "", u, err return "", nil, err
}
u, err = c.appendTagToUrlIfNeeded(u, version)
if err != nil {
return "", nil, err
} }
if registry.IsOCI(u.String()) { if registry.IsOCI(u.String()) {
@ -577,27 +582,24 @@ func (c *ChartDownloader) getChartName(url string) string {
return name return name
} }
func (c *ChartDownloader) parseChartURL(ref string, version string) (*url.URL, error) { func (c *ChartDownloader) appendTagToUrlIfNeeded(chartUrl *url.URL, version string) (*url.URL, error) {
u, err := url.Parse(ref) if !registry.IsOCI(chartUrl.String()) {
if err != nil { return chartUrl, nil
return nil, fmt.Errorf("invalid chart URL format: %s", ref)
} }
if registry.IsOCI(u.String()) { refAlreadyHasTagOrDigest := strings.Contains(chartUrl.Path, ":") || strings.Contains(chartUrl.Path, "@")
refAlreadyHasTagOrDigest := strings.Contains(u.Path, ":") || strings.Contains(u.Path, "@")
if refAlreadyHasTagOrDigest { if refAlreadyHasTagOrDigest {
return u, nil return chartUrl, nil
} }
tag, err := c.getOciTag(ref, version) tag, err := c.getOciTag(chartUrl.String(), version)
if err != nil { if err != nil {
return nil, err return nil, err
} }
u.Path = fmt.Sprintf("%s:%s", u.Path, tag) chartUrl.Path = fmt.Sprintf("%s:%s", chartUrl.Path, tag)
}
return u, nil return chartUrl, nil
} }
func (c *ChartDownloader) getOciTag(ref, version string) (string, error) { func (c *ChartDownloader) getOciTag(ref, version string) (string, error) {

@ -359,8 +359,12 @@ func (m *Manager) downloadAll(deps []*chart.Dependency) error {
} }
if m.SkipDownloadIfExists { if m.SkipDownloadIfExists {
u, err := dl.parseChartURL(churl, version) u, err := url.Parse(churl)
if err != nil {
return err
}
u, err = dl.appendTagToUrlIfNeeded(u, version)
if err != nil { if err != nil {
return err return err
} }

Loading…
Cancel
Save