Merge pull request #419 from helmfile/405-helmfile-deps-cannot-create-a-lock-file-for-an-oci-repo
fix: helmfile deps issue with oci repo
This commit is contained in:
		
						commit
						ad257554c9
					
				|  | @ -217,16 +217,13 @@ func (st *HelmState) updateDependenciesInTempDir(shell helmexec.DependencyUpdate | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func getUnresolvedDependenciess(st *HelmState) (string, *UnresolvedDependencies, error) { | func getUnresolvedDependenciess(st *HelmState) (string, *UnresolvedDependencies, error) { | ||||||
| 	repoToURL := map[string]string{} | 	repoToURL := map[string]RepositorySpec{} | ||||||
| 
 | 
 | ||||||
| 	for _, r := range st.Repositories { | 	for _, r := range st.Repositories { | ||||||
| 		repoToURL[r.Name] = r.URL | 		repoToURL[r.Name] = r | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	unresolved := &UnresolvedDependencies{deps: map[string][]unresolvedChartDependency{}} | 	unresolved := &UnresolvedDependencies{deps: map[string][]unresolvedChartDependency{}} | ||||||
| 	// if err := unresolved.Add("stable/envoy", "https://kubernetes-charts.storage.googleapis.com", ""); err != nil {
 |  | ||||||
| 	//	 panic(err)
 |  | ||||||
| 	// }
 |  | ||||||
| 
 | 
 | ||||||
| 	for _, r := range st.Releases { | 	for _, r := range st.Releases { | ||||||
| 		repo, chart, ok := resolveRemoteChart(r.Chart) | 		repo, chart, ok := resolveRemoteChart(r.Chart) | ||||||
|  | @ -234,13 +231,19 @@ func getUnresolvedDependenciess(st *HelmState) (string, *UnresolvedDependencies, | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		url, ok := repoToURL[repo] | 		repoSpec, ok := repoToURL[repo] | ||||||
| 		// Skip this chart from dependency management, as there's no matching `repository` in the helmfile state,
 | 		// Skip this chart from dependency management, as there's no matching `repository` in the helmfile state,
 | ||||||
| 		// which may imply that this is a local chart within a directory, like `charts/myapp`
 | 		// which may imply that this is a local chart within a directory, like `charts/myapp`
 | ||||||
| 		if !ok { | 		if !ok { | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		url := repoSpec.URL | ||||||
|  | 
 | ||||||
|  | 		if repoSpec.OCI { | ||||||
|  | 			url = fmt.Sprintf("oci://%s", url) | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		if err := unresolved.Add(chart, url, r.Version); err != nil { | 		if err := unresolved.Add(chart, url, r.Version); err != nil { | ||||||
| 			return "", nil, err | 			return "", nil, err | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -0,0 +1,66 @@ | ||||||
|  | package state | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"testing" | ||||||
|  | 
 | ||||||
|  | 	"github.com/stretchr/testify/require" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func TestGetUnresolvedDependenciess(t *testing.T) { | ||||||
|  | 	tests := []struct { | ||||||
|  | 		name       string | ||||||
|  | 		helmState  *HelmState | ||||||
|  | 		wantErr    bool | ||||||
|  | 		expectfile string | ||||||
|  | 		expectDeps *UnresolvedDependencies | ||||||
|  | 	}{ | ||||||
|  | 		{ | ||||||
|  | 			name: "oci chart", | ||||||
|  | 			helmState: &HelmState{ | ||||||
|  | 				FilePath: "helmfile.yaml", | ||||||
|  | 				ReleaseSetSpec: ReleaseSetSpec{ | ||||||
|  | 					Releases: []ReleaseSpec{ | ||||||
|  | 						{ | ||||||
|  | 							Name:    "foo", | ||||||
|  | 							Chart:   "charts/abc", | ||||||
|  | 							Version: "0.1.0", | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					Repositories: []RepositorySpec{ | ||||||
|  | 						{ | ||||||
|  | 							Name: "charts", | ||||||
|  | 							URL:  "localhost:5000/aaa", | ||||||
|  | 							OCI:  true, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			wantErr:    false, | ||||||
|  | 			expectfile: "helmfile", | ||||||
|  | 			expectDeps: &UnresolvedDependencies{ | ||||||
|  | 				deps: map[string][]unresolvedChartDependency{ | ||||||
|  | 					"abc": { | ||||||
|  | 						{ | ||||||
|  | 							ChartName:         "abc", | ||||||
|  | 							Repository:        "oci://localhost:5000/aaa", | ||||||
|  | 							VersionConstraint: "0.1.0", | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	for _, tt := range tests { | ||||||
|  | 		t.Run(tt.name, func(t *testing.T) { | ||||||
|  | 			f, ds, err := getUnresolvedDependenciess(tt.helmState) | ||||||
|  | 			if tt.wantErr { | ||||||
|  | 				require.Error(t, err, "getUnresolvedDependenciess() error = nil, wantErr") | ||||||
|  | 			} else { | ||||||
|  | 				require.NoErrorf(t, err, "getUnresolvedDependenciess() want no error, got %v", err) | ||||||
|  | 			} | ||||||
|  | 			require.Equalf(t, tt.expectfile, f, "getUnresolvedDependenciess() expect file %s, got %s", tt.expectfile, f) | ||||||
|  | 			require.Equalf(t, tt.expectDeps, ds, "getUnresolvedDependenciess() expect deps %v, got %v", tt.expectDeps, ds) | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue