fix: OCI Url and Version parse error
Signed-off-by: xiaomudk <xiaomudk@gmail.com>
This commit is contained in:
		
							parent
							
								
									6dc1736f15
								
							
						
					
					
						commit
						59ffa687df
					
				|  | @ -423,9 +423,7 @@ func (helm *execer) ChartPull(chart string, flags ...string) error { | ||||||
| 	helmVersionConstraint, _ := semver.NewConstraint(">= 3.7.0") | 	helmVersionConstraint, _ := semver.NewConstraint(">= 3.7.0") | ||||||
| 	var helmArgs []string | 	var helmArgs []string | ||||||
| 	if helmVersionConstraint.Check(&helm.version) { | 	if helmVersionConstraint.Check(&helm.version) { | ||||||
| 		ociChartURLSplit := strings.Split(chart, ":") | 		ociChartURL, ociChartTag := resolveOciChart(chart) | ||||||
| 		ociChartURL := fmt.Sprintf("oci://%s", ociChartURLSplit[0]) |  | ||||||
| 		ociChartTag := ociChartURLSplit[1] |  | ||||||
| 		tempDir, err := os.MkdirTemp("", "chart*") | 		tempDir, err := os.MkdirTemp("", "chart*") | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return err | 			return err | ||||||
|  | @ -447,9 +445,7 @@ func (helm *execer) ChartExport(chart string, path string, flags ...string) erro | ||||||
| 	helmVersionConstraint, _ := semver.NewConstraint(">= 3.7.0") | 	helmVersionConstraint, _ := semver.NewConstraint(">= 3.7.0") | ||||||
| 	var helmArgs []string | 	var helmArgs []string | ||||||
| 	if helmVersionConstraint.Check(&helm.version) { | 	if helmVersionConstraint.Check(&helm.version) { | ||||||
| 		ociChartURLSplit := strings.Split(chart, ":") | 		ociChartURL, ociChartTag := resolveOciChart(chart) | ||||||
| 		ociChartURL := fmt.Sprintf("oci://%s", ociChartURLSplit[0]) |  | ||||||
| 		ociChartTag := ociChartURLSplit[1] |  | ||||||
| 		helmArgs = []string{"pull", ociChartURL, "--version", ociChartTag, "--untar"} | 		helmArgs = []string{"pull", ociChartURL, "--version", ociChartTag, "--untar"} | ||||||
| 	} else { | 	} else { | ||||||
| 		helmArgs = []string{"chart", "export", chart} | 		helmArgs = []string{"chart", "export", chart} | ||||||
|  | @ -546,3 +542,21 @@ func (helm *execer) IsVersionAtLeast(versionStr string) bool { | ||||||
| 	ver := semver.MustParse(versionStr) | 	ver := semver.MustParse(versionStr) | ||||||
| 	return helm.version.Equal(ver) || helm.version.GreaterThan(ver) | 	return helm.version.Equal(ver) || helm.version.GreaterThan(ver) | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func resolveOciChart(ociChart string) (ociChartURL, ociChartTag string) { | ||||||
|  | 	var urlTagIndex int | ||||||
|  | 	// Get the last : index
 | ||||||
|  | 	// e.g.,
 | ||||||
|  | 	// 1. registry:443/helm-charts
 | ||||||
|  | 	// 2. registry/helm-charts:latest
 | ||||||
|  | 	// 3. registry:443/helm-charts:latest
 | ||||||
|  | 	if strings.LastIndex(ociChart, ":") <= strings.LastIndex(ociChart, "/") { | ||||||
|  | 		urlTagIndex = len(ociChart) | ||||||
|  | 		ociChartTag = "" | ||||||
|  | 	} else { | ||||||
|  | 		urlTagIndex = strings.LastIndex(ociChart, ":") | ||||||
|  | 		ociChartTag = ociChart[urlTagIndex+1:] | ||||||
|  | 	} | ||||||
|  | 	ociChartURL = fmt.Sprintf("oci://%s", ociChart[:urlTagIndex]) | ||||||
|  | 	return ociChartURL, ociChartTag | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -843,3 +843,42 @@ func Test_IsVersionAtLeast(t *testing.T) { | ||||||
| 		t.Error("helmexec.IsVersionAtLeast - 2.16.1 is atleast 3.2") | 		t.Error("helmexec.IsVersionAtLeast - 2.16.1 is atleast 3.2") | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func Test_resolveOciChart(t *testing.T) { | ||||||
|  | 	tests := []struct { | ||||||
|  | 		name        string | ||||||
|  | 		chartPath   string | ||||||
|  | 		ociChartURL string | ||||||
|  | 		ociChartTag string | ||||||
|  | 	}{ | ||||||
|  | 		{ | ||||||
|  | 			name:        "normal", | ||||||
|  | 			chartPath:   "chart/nginx:v1", | ||||||
|  | 			ociChartURL: "oci://chart/nginx", | ||||||
|  | 			ociChartTag: "v1", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name:        "contains the port", | ||||||
|  | 			chartPath:   "chart:5000/nginx:v1", | ||||||
|  | 			ociChartURL: "oci://chart:5000/nginx", | ||||||
|  | 			ociChartTag: "v1", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name:        "no tag", | ||||||
|  | 			chartPath:   "chart:5000/nginx", | ||||||
|  | 			ociChartURL: "oci://chart:5000/nginx", | ||||||
|  | 			ociChartTag: "", | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 	for i := range tests { | ||||||
|  | 		tt := tests[i] | ||||||
|  | 		t.Run(tt.name, func(t *testing.T) { | ||||||
|  | 			url, tag := resolveOciChart(tt.chartPath) | ||||||
|  | 			if tt.ociChartURL != url || tt.ociChartTag != tag { | ||||||
|  | 				actual := fmt.Sprintf("ociChartURL->%s  ociChartTag->%s", url, tag) | ||||||
|  | 				expected := fmt.Sprintf("ociChartURL->%s ociChartTag->%s", tt.ociChartURL, tt.ociChartTag) | ||||||
|  | 				t.Errorf("resolveOciChart()\nactual = %v\nexpect = %v", actual, expected) | ||||||
|  | 			} | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue