GoogleContainerTools/skaffold · error

rendering manifests: %w

Error message

rendering manifests: %w

What it means

In `skaffold render`, after obtaining build results, render templates the manifests via `r.Render`. This wrapper reports failures in that templating step. It means skaffold could not produce the final Kubernetes manifests — usually an invalid manifest template, unresolved image references, or an error writing/rendering for the given renderer (kubectl/kustomize/helm).

Source

Thrown at cmd/skaffold/app/cmd/render.go:80

		var bRes []graph.Artifact
		var err error

		if fromBuildOutputFile.String() != "" || len(preBuiltImages.GetSlice()) > 0 {
			// pass `nil` as render shouldn't build if provided --build-artifacts or --images
			bRes, err = getBuildArtifactsAndSetTags(nil, r.ApplyDefaultRepo)
			if err != nil {
				return fmt.Errorf("loading artifacts: %w", err)
			}
		} else {
			bRes, err = r.Build(ctx, buildOut, targetArtifacts(opts, configs))
			if err != nil {
				return fmt.Errorf("executing build: %w", err)
			}
		}

		manifests, err := r.Render(ctx, out, bRes, offline)
		if err != nil {
			return fmt.Errorf("rendering manifests: %w", err)
		}
		return manifest.Write(manifests.String(), opts.RenderOutput, out)
	})
}

View on GitHub (pinned to a1189de023)

Solutions

  1. Run `kubectl apply --dry-run=client -f <manifest>` or `kustomize build` on the manifests to find YAML/kustomize errors.
  2. Verify all manifest paths in the deploy section of skaffold.yaml exist and are valid YAML.
  3. If using --offline, ensure the manifests have no remote dependencies, or drop --offline.
  4. Run with -vdebug to see which manifest/renderer step failed and fix that template.

Example fix

# before: deploy.manifests points at a missing file
deploy:
  kubectl:
    manifests:
      - manifests/deploy.yaml  # deleted
# after: correct path
deploy:
  kubectl:
    manifests:
      - k8s/deployment.yaml
Defensive patterns

Strategy: validation

Validate before calling

// Validate manifests referenced by skaffold.yaml before rendering
const cfg = require('js-yaml').load(require('fs').readFileSync('skaffold.yaml', 'utf8'));
const manifests = cfg.deploy?.kubectl?.manifests ?? cfg.manifests ?? [];
const fs = require('fs');
for (const raw of manifests) {
  const p = typeof raw === 'string' ? raw : Object.values(raw)[0];
  if (!fs.existsSync(p)) throw new Error(`manifest not found: ${p}`);
}
execSync('kustomize build overlays/prod > /dev/null', {stdio: 'pipe'}); // catches kustomize errors early

Try / catch

try {
  execFileSync('skaffold', ['render', '--output', 'rendered.yaml']);
} catch (e) {
  const msg = e.stderr?.toString() ?? '';
  if (msg.includes('rendering manifests')) {
    console.error('Manifest templating failed; validate YAML/kustomize/helm inputs.');
    console.error(e.stdout?.toString() ?? '');
  } else throw e;
}

Prevention

When it happens

Trigger: `skaffold render --output <file>` / default render where r.Render fails: manifest files listed in the deploy section are missing or invalid YAML, kustomize overlays broken, helm chart values invalid, or templated image placeholders don't match built artifacts.

Common situations: Renamed/deleted manifest paths in skaffold.yaml; kustomization.yaml referencing missing resources; helm charts with bad values; running `skaffold render --offline` while required remote resources are absent; placeholders like {{.IMAGE_NAME_x}} left unresolvable.

Related errors


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