Merge pull request #258 from xiaomudk/patch-4
fix: OCI Url and Version parse error
This commit is contained in:
		
						commit
						4e9b99d10e
					
				| 
						 | 
					@ -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
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -928,3 +928,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