{"record":{"id":"2908afe1b4b3ed22","repo":"GoogleContainerTools/skaffold","slug":"unable-to-get-releases-by-level-w","errorCode":null,"errorMessage":"unable to get releases by level: %w","messagePattern":"unable to get releases by level: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/skaffold/deploy/helm/helm.go","lineNumber":270,"sourceCode":"\t}\n\n\tchildCtx, endTrace := instrumentation.StartTrace(ctx, \"Deploy_LoadImages\")\n\tif err := h.imageLoader.LoadImages(childCtx, out, h.localImages, h.originalImages, builds); err != nil {\n\t\tendTrace(instrumentation.TraceEndError(err))\n\t\treturn err\n\t}\n\tendTrace()\n\n\tolog.Entry(ctx).Infof(\"Deploying with helm v%s ...\", h.helmVersion)\n\n\tdependencyGraph, err := NewDependencyGraph(h.Releases)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"unable to create dependency graph: %w\", err)\n\t}\n\n\tlevelByLevelReleases, err := dependencyGraph.GetReleasesByLevel()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"unable to get releases by level: %w\", err)\n\t}\n\n\tvar mu sync2.Mutex\n\tnsMap := map[string]struct{}{}\n\tmanifests := manifest.ManifestList{}\n\n\tconcurrency := 1\n\tif h.Concurrency != nil {\n\t\tif *h.Concurrency == 0 {\n\t\t\tconcurrency = -1 // unlimited\n\t\t} else {\n\t\t\tconcurrency = *h.Concurrency\n\t\t}\n\t}\n\n\tif concurrency == 1 {\n\t\tolog.Entry(ctx).Infof(\"Installing %d releases sequentially\", len(h.Releases))\n\t} else {","sourceCodeStart":252,"sourceCodeEnd":288,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/pkg/skaffold/deploy/helm/helm.go#L252-L288","documentation":"Wraps GetReleasesByLevel failure while topologically sorting the release dependency graph during Deploy. This happens when the graph built from helm.releases contains a cycle, making level (wave) ordering impossible.","triggerScenarios":"Calling Deploy with releases whose chartDependency links form a cycle after NewDependencyGraph succeeded structurally but topological sort detects no zero-indegree nodes.","commonSituations":"Mutual or self chartDependency references in skaffold.yaml; programmatically generated release lists creating loops.","solutions":["Break the cycle in helm.releases chartDependency entries","Remove a release's chartDependency that points back at an ancestor","Validate the dependency chain manually with a diagram before deploying"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// reuse the same cycle-detection as error 221; ensure indegree-0 releases exist\nhasRoot := false\nfor _, r := range releases {\n  if len(r.ChartDependency) == 0 { hasRoot = true }\n}\nif !hasRoot { return errors.New(\"no release without dependencies: cycle present\") }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Ensure at least one release has no chartDependency (a root)","Document the intended deploy order for release sets","Test multi-release configs with `skaffold render` before deploy"],"tags":["helm","config","topological-sort"],"backgroundTag":"helm-release-dependency-cycle","analyzedSha":"a1189de023efc32d4b8e11f395acc678aa555011","analyzedAt":"2026-09-05T12:09:27.064Z","contentChangedAt":"2026-09-05T12:09:27.064Z","schemaVersion":2},"datasetVersion":"2026-09-12T17:17:11.597Z"}