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

  1. Check the path exists and spelling: ls the directory you pass
  2. For relative paths, confirm your working directory (pwd) or run helm from the chart's parent directory
  3. 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
  4. 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

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


AI-assisted analysis of helm/helm@2a29f1770b (2026-08-15). Data as JSON: /api/errors/a6de2ddcba451cc2. Report an issue: GitHub.