GoogleContainerTools/skaffold · error
unable to get releases by level: %w
Error message
unable to get releases by level: %w
What it means
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.
Source
Thrown at pkg/skaffold/deploy/helm/helm.go:270
}
childCtx, endTrace := instrumentation.StartTrace(ctx, "Deploy_LoadImages")
if err := h.imageLoader.LoadImages(childCtx, out, h.localImages, h.originalImages, builds); err != nil {
endTrace(instrumentation.TraceEndError(err))
return err
}
endTrace()
olog.Entry(ctx).Infof("Deploying with helm v%s ...", h.helmVersion)
dependencyGraph, err := NewDependencyGraph(h.Releases)
if err != nil {
return fmt.Errorf("unable to create dependency graph: %w", err)
}
levelByLevelReleases, err := dependencyGraph.GetReleasesByLevel()
if err != nil {
return fmt.Errorf("unable to get releases by level: %w", err)
}
var mu sync2.Mutex
nsMap := map[string]struct{}{}
manifests := manifest.ManifestList{}
concurrency := 1
if h.Concurrency != nil {
if *h.Concurrency == 0 {
concurrency = -1 // unlimited
} else {
concurrency = *h.Concurrency
}
}
if concurrency == 1 {
olog.Entry(ctx).Infof("Installing %d releases sequentially", len(h.Releases))
} else {View on GitHub (pinned to a1189de023)
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
Defensive patterns
Strategy: validation
Validate before calling
// reuse the same cycle-detection as error 221; ensure indegree-0 releases exist
hasRoot := false
for _, r := range releases {
if len(r.ChartDependency) == 0 { hasRoot = true }
}
if !hasRoot { return errors.New("no release without dependencies: cycle present") } Prevention
- 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
When it happens
Trigger: Calling Deploy with releases whose chartDependency links form a cycle after NewDependencyGraph succeeded structurally but topological sort detects no zero-indegree nodes.
Common situations: Mutual or self chartDependency references in skaffold.yaml; programmatically generated release lists creating loops.
Related errors
- duplicate release name %s
- release %s depends on non-existent release %s
- unable to create dependency graph: %w
- unable to expand %q: %w
- cannot parse the release namespace template: %w
AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05).
Data as JSON: /api/errors/2908afe1b4b3ed22.
Report an issue: GitHub.