GoogleContainerTools/skaffold · error

loading manifests: %w

Error message

loading manifests: %w

What it means

Fires in `skaffold filter` when the Kubernetes manifests passed on stdin (or produced by a post-renderer) cannot be parsed by manifest.Load. Wraps the underlying parse failure, typically malformed YAML, non-manifest documents, or a crashing post-renderer producing invalid output.

Source

Thrown at cmd/skaffold/app/cmd/filter.go:94

			stdoutPipe, err := cmd.StdoutPipe()
			if err != nil {
				return fmt.Errorf("running post-renderer: %w", err)
			}
			err = cmd.Start()
			if err != nil {
				return fmt.Errorf("running post-renderer: %w", err)
			}

			manifestList, err = manifest.Load(stdoutPipe)
			if err != nil {
				return fmt.Errorf("loading post-renderer result: %w", err)
			}
			stdoutPipe.Close()
		} else {
			manifestList, err = manifest.Load(os.Stdin)
		}
		if err != nil {
			return fmt.Errorf("loading manifests: %w", err)
		}
		var ass applysetters.ApplySetters
		manifestOverrides := pkgutil.EnvSliceToMap(opts.ManifestsOverrides, "=")
		for k, v := range manifestOverrides {
			ass.Setters = append(ass.Setters, applysetters.Setter{Name: k, Value: v})
		}
		manifestList, err = ass.Apply(ctx, manifestList)
		if err != nil {
			return err
		}
		allow, deny := getTransformList(configs)

		manifestList, err = manifestList.SetLabels(pkgutil.EnvSliceToMap(opts.CustomLabels, "="),
			manifest.NewResourceSelectorLabels(allow, deny))
		if err != nil {
			return err
		}
		manifestList, err = manifestList.ReplaceImages(ctx, buildArtifacts, manifest.NewResourceSelectorImages(allow, deny))

View on GitHub (pinned to a1189de023)

Solutions

  1. Pipe valid manifest YAML into the command: kustomize build . | skaffold filter ...
  2. Check that the upstream command in the pipeline succeeded
  3. Validate the YAML independently (e.g. kubectl apply --dry-run=client -f -)
  4. Inspect the wrapped error for the exact parse problem

Example fix

// before
skaffold filter   # no stdin, empty input
// after
kustomize build . | skaffold filter
Defensive patterns

Strategy: validation

Validate before calling

// before running skaffold filter
info, _ := os.Stdin.Stat()
if (info.Mode() & os.ModeCharDevice) != 0 {
    return fmt.Errorf("skaffold filter requires manifests piped on stdin")
}

Try / catch

if err != nil {
    return fmt.Errorf("loading manifests: %w", err)
}

Prevention

When it happens

Trigger: --post-renderer is not set (or the post-renderer branch completed) and manifest.Load(os.Stdin) returns an error because stdin contains invalid/empty YAML, wrapped at filter.go:94.

Common situations: Running `skaffold filter` without piping manifests into stdin, upstream command in a pipe failed silently, or the upstream output is not valid Kubernetes YAML.

Related errors


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