GoogleContainerTools/skaffold · error

watching files for renderer: %w

Error message

watching files for renderer: %w

What it means

Dev() registers the renderer's manifest dependencies (e.g. kustomize/helm files) with the file monitor so edits trigger a redeploy. Failure emits DEVINIT_REGISTER_RENDER_DEPS and returns 'watching files for renderer'. This aborts dev mode during initialization.

Source

Thrown at pkg/skaffold/runner/dev.go:433

			func() ([]string, error) { return r.tester.TestDependencies(ctx, artifact) },
			func(filemon.Events) { r.changeSet.AddRetest(artifact) },
		); err != nil {
			event.DevLoopFailedWithErrorCode(r.devIteration, proto.StatusCode_DEVINIT_REGISTER_TEST_DEPS, err)
			eventV2.TaskFailed(constants.DevLoop, err)
			endTrace()
			return fmt.Errorf("watching test files: %w", err)
		}
	}

	// Watch render configuration
	if err := r.monitor.Register(
		r.renderer.ManifestDeps,
		func(filemon.Events) { r.changeSet.Redeploy() },
	); err != nil {
		event.DevLoopFailedWithErrorCode(r.devIteration, proto.StatusCode_DEVINIT_REGISTER_RENDER_DEPS, err)
		eventV2.TaskFailed(constants.DevLoop, err)
		endTrace()
		return fmt.Errorf("watching files for renderer: %w", err)
	}

	// Watch deployment configuration
	if err := r.monitor.Register(
		r.deployer.Dependencies,
		func(filemon.Events) { r.changeSet.Redeploy() },
	); err != nil {
		event.DevLoopFailedWithErrorCode(r.devIteration, proto.StatusCode_DEVINIT_REGISTER_DEPLOY_DEPS, err)
		eventV2.TaskFailed(constants.DevLoop, err)
		endTrace()
		return fmt.Errorf("watching files for deployer: %w", err)
	}

	// Watch Skaffold configuration
	if err := r.monitor.Register(
		func() ([]string, error) { return []string{r.runCtx.ConfigurationFile()}, nil },
		func(filemon.Events) { r.changeSet.Reload() },
	); err != nil {

View on GitHub (pinned to a1189de023)

Solutions

  1. Verify the manifest sources (kustomization.yaml / helm chart paths) exist and are readable
  2. Run `skaffold render` separately to surface the manifest resolution error clearly
  3. Fix the `manifests:`/`render:` config in skaffold.yaml
  4. Raise inotify watch limits if registration fails due to watcher exhaustion

Example fix

// before
manifests:
  kustomize:
    paths: ['k8s/overlays/dev']  # overlay doesn't exist
// after
manifests:
  kustomize:
    paths: ['k8s/overlays/local']
Defensive patterns

Strategy: validation

Validate before calling

// validate manifest sources resolve before dev
for _, p := range renderPaths {
    if _, err := os.Stat(p); err != nil {
        return fmt.Errorf("render dep missing: %s", p)
    }
}
// and check kustomize builds: exec "kustomize build <dir>"

Prevention

When it happens

Trigger: `r.monitor.Register(r.renderer.ManifestDeps, ...)` errors — ManifestDeps() fails to enumerate manifest inputs (missing kustomization.yaml, unreadable helm chart, bad render config) or the watcher cannot register the paths.

Common situations: kustomization.yaml missing or malformed references; helm chart path in skaffold.yaml incorrect; render-remote manifests unreachable (remote kustomize base); permission problems.

Related errors


AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05). Data as JSON: /api/errors/3010959eee2dfe04. Report an issue: GitHub.