helm/helm · error
path %q not found
Error message
path %q not found
What it means
Inside LocateChart, when no --repo is set, Helm first tries os.Stat(name); if that fails and the name looks like a local path (absolute or starting with '.'), it must be a local file - so it errors with the exact path. Relative bare names fall through to downloader resolution (URL/repo lookup), but absolute or ./-prefixed names that do not exist on disk cannot proceed.
Source
Thrown at pkg/action/install.go:911
name = strings.TrimSpace(name)
version := strings.TrimSpace(c.Version)
if c.RepoURL == "" {
if _, err := os.Stat(name); err == nil {
abs, err := filepath.Abs(name)
if err != nil {
return abs, err
}
if c.Verify {
if _, err := downloader.VerifyChart(abs, abs+".prov", c.Keyring); err != nil {
return "", err
}
}
return abs, nil
}
if filepath.IsAbs(name) || strings.HasPrefix(name, ".") {
return name, fmt.Errorf("path %q not found", name)
}
}
dl := downloader.ChartDownloader{
Out: os.Stdout,
Keyring: c.Keyring,
Getters: getter.All(settings),
Options: []getter.Option{
getter.WithPassCredentialsAll(c.PassCredentialsAll),
getter.WithTLSClientConfig(c.CertFile, c.KeyFile, c.CaFile),
getter.WithInsecureSkipVerifyTLS(c.InsecureSkipTLSVerify),
getter.WithPlainHTTP(c.PlainHTTP),
getter.WithBasicAuth(c.Username, c.Password),
},
RepositoryConfig: settings.RepositoryConfig,
RepositoryCache: settings.RepositoryCache,
ContentCache: settings.ContentCache,
RegistryClient: c.registryClient,View on GitHub (pinned to 2a29f1770b)
Solutions
- Check the path exists and spelling: ls the directory you pass
- For relative paths, confirm your working directory (pwd) or run helm from the chart's parent directory
- If the chart should be fetched, use a repo reference (repo/chart) or URL instead of a local-looking path, or drop the leading ./ so the downloader treats it as a name
- In pipelines, add a guard step that verifies the download artifact exists before helm install
Example fix
# before (wrong cwd) helm install myapp ./deploy/chart # path "./deploy/chart" not found # after cd charts && helm install myapp ./mychart
Defensive patterns
Strategy: validation
Validate before calling
if filepath.IsAbs(chartRef) || strings.HasPrefix(chartRef, ".") {
if _, err := os.Stat(chartRef); err != nil {
return fmt.Errorf("chart path %s does not exist (cwd=%s)", chartRef, mustWd())
}
} Type guard
func isPathNotFoundErr(err error) bool {
return err != nil && strings.Contains(err.Error(), "not found") && strings.Contains(err.Error(), "path")
} Try / catch
if path, err := cpo.LocateChart(ref, settings); err != nil {
if isPathNotFoundErr(err) {
// fix cwd or the path itself; distinct from download failures which need network fixes
}
return path, err
} Prevention
- Resolve chart paths to absolute paths at script start (filepath.Abs) so cwd changes cannot break later steps
- Assert build artifacts exist before the helm step in CI
When it happens
Trigger: LocateChart or `helm install myapp /opt/charts/mychart` / `helm install myapp ./no-such-dir` where the path does not exist (typo, wrong working directory, not yet downloaded).
Common situations: Relative ./chart paths run from the wrong cwd (CI steps, Makefiles); referencing a chart that a previous download step failed to produce; renamed chart directories; absolute paths valid on another machine.
Related errors
- cannot load a directory
- need at least one argument, the path to the chart
- chart file %q is larger than the maximum file size %d
- error reading %s: %w
- %q is not a directory
AI-assisted analysis of helm/helm@2a29f1770b (2026-08-15).
Data as JSON: /api/errors/a6de2ddcba451cc2.
Report an issue: GitHub.