GoogleContainerTools/skaffold · error
release %s depends on non-existent release %s
Error message
release %s depends on non-existent release %s
What it means
After collecting release names, `NewDependencyGraph` verifies every entry in a release's `dependsOn` list refers to an existing release in the config. A dependency pointing to a release that is not defined causes this error, since the ordering cannot be satisfied.
Source
Thrown at pkg/skaffold/deploy/helm/dependencygraph.go:49
// NewDependencyGraph creates a new DependencyGraph from a list of helm releases
func NewDependencyGraph(releases []latest.HelmRelease) (*DependencyGraph, error) {
graph := make(map[string][]string)
releaseNames := make(map[string]bool)
for _, r := range releases {
if _, exists := releaseNames[r.Name]; exists {
return nil, fmt.Errorf("duplicate release name %s", r.Name)
}
releaseNames[r.Name] = true
}
// Check for non-existent dependencies
hasDependencies := false
for _, r := range releases {
for _, dep := range r.DependsOn {
if !releaseNames[dep] {
return nil, fmt.Errorf("release %s depends on non-existent release %s", r.Name, dep)
}
hasDependencies = true
}
graph[r.Name] = r.DependsOn
}
g := &DependencyGraph{
graph: graph,
releases: releases,
hasDependencies: hasDependencies,
}
if err := g.hasCycles(); err != nil {
return nil, err
}
return g, nil
}View on GitHub (pinned to a1189de023)
Solutions
- Add the missing release definition to `deploy.helm.releases`
- Fix the typo in the release's `dependsOn` entry so it exactly matches an existing release name
- Remove the stale dependsOn entry if the dependency release is no longer needed
Example fix
// before
releases:
- name: app
dependsOn: ["databse"]
- name: database
chartPath: charts/db
// after
releases:
- name: app
dependsOn: ["database"]
- name: database
chartPath: charts/db Defensive patterns
Strategy: validation
Validate before calling
names := map[string]bool{}
for _, r := range cfg.Deploy.Helm.Releases {
names[r.Name] = true
}
for _, r := range cfg.Deploy.Helm.Releases {
for _, dep := range r.DependsOn {
if !names[dep] {
return fmt.Errorf("release %s depends on non-existent release %s", r.Name, dep)
}
}
}
Prevention
- Keep dependsOn lists in sync with the releases block whenever adding/removing releases
- Match release names exactly (case-sensitive); avoid manual string typos
- Validate helm release dependency references in CI config checks
When it happens
Trigger: A release in `deploy.helm.releases` lists a `dependsOn` value that does not match any sibling release's `name` (typo or omitted release definition).
Common situations: Typo in dependsOn name; dependency release removed from config while dependsOn entries left behind; case-mismatch in release names.
Understand the failure class
Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.
Related errors
- duplicate release name %s
- unable to create dependency graph: %w
- cycle detected involving release %q
- unable to get releases by level: %w
- unable to expand %q: %w
AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05).
Data as JSON: /api/errors/ba72694a9bfeca60.
Report an issue: GitHub.