{"record":{"id":"e46d32b502ca7b69","repo":"GoogleContainerTools/skaffold","slug":"loading-post-renderer-result-w","errorCode":null,"errorMessage":"loading post-renderer result: %w","messagePattern":"loading post-renderer result: %w","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/skaffold/app/cmd/filter.go","lineNumber":87,"sourceCode":"func runFilter(ctx context.Context, out io.Writer, debuggingFilters bool, postRenderer string, buildArtifacts []graph.Artifact) error {\n\treturn withRunner(ctx, out, func(r runner.Runner, configs []util.VersionedConfig) error {\n\t\tvar manifestList manifest.ManifestList\n\t\tvar err error\n\t\tif postRenderer != \"\" {\n\t\t\tcmd := exec.CommandContext(ctx, postRenderer)\n\t\t\tcmd.Stdin = os.Stdin\n\t\t\tstdoutPipe, err := cmd.StdoutPipe()\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"running post-renderer: %w\", err)\n\t\t\t}\n\t\t\terr = cmd.Start()\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"running post-renderer: %w\", err)\n\t\t\t}\n\n\t\t\tmanifestList, err = manifest.Load(stdoutPipe)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"loading post-renderer result: %w\", err)\n\t\t\t}\n\t\t\tstdoutPipe.Close()\n\t\t} else {\n\t\t\tmanifestList, err = manifest.Load(os.Stdin)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"loading manifests: %w\", err)\n\t\t}\n\t\tvar ass applysetters.ApplySetters\n\t\tmanifestOverrides := pkgutil.EnvSliceToMap(opts.ManifestsOverrides, \"=\")\n\t\tfor k, v := range manifestOverrides {\n\t\t\tass.Setters = append(ass.Setters, applysetters.Setter{Name: k, Value: v})\n\t\t}\n\t\tmanifestList, err = ass.Apply(ctx, manifestList)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tallow, deny := getTransformList(configs)","sourceCodeStart":69,"sourceCodeEnd":105,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/cmd/skaffold/app/cmd/filter.go#L69-L105","documentation":"Wraps a failure from manifest.Load(stdoutPipe) when parsing the output of the post-renderer process. It indicates the post-renderer ran but produced output Skaffold cannot parse as Kubernetes manifests.","triggerScenarios":"--post-renderer is set, cmd.Start() succeeded, and manifest.Load(stdoutPipe) fails (invalid YAML, empty output, post-renderer wrote errors/diagnostics to stdout), wrapped at filter.go:87.","commonSituations":"Post-renderer emits non-manifest text (logs, progress), exits early producing truncated YAML, or outputs a format Skaffold's manifest parser rejects.","solutions":["Run the post-renderer manually on the same stdin and inspect its output","Silence or redirect any non-manifest logging the post-renderer emits to stdout","Ensure the post-renderer exits 0 and emits only valid YAML manifests","Check the wrapped error for the parse failure location"],"exampleFix":"// before: post-renderer prints banners to stdout\n# my-post-renderer.sh\necho \"processing...\"\nfilter_output\n// after: log to stderr only\n# my-post-renderer.sh\necho \"processing...\" >&2\nfilter_output","handlingStrategy":"validation","validationCode":"// test the post-renderer before piping into skaffold\nout, err := exec.Command(postRenderer).Input(stdinBytes).Output()\nif err != nil || len(out) == 0 {\n    return fmt.Errorf(\"post-renderer produced no/invalid output\")\n}","typeGuard":null,"tryCatchPattern":"if err != nil {\n    return fmt.Errorf(\"loading post-renderer result: %w\", err)\n}","preventionTips":["Post-renderer must write only YAML manifests to stdout","Send logs/diagnostics to stderr","Verify the post-renderer exits non-zero on failure so errors are not parsed as manifests"],"tags":["cli","manifest","post-renderer","yaml"],"backgroundTag":"manifest-parse-failed","analyzedSha":"a1189de023efc32d4b8e11f395acc678aa555011","analyzedAt":"2026-09-05T12:09:27.064Z","contentChangedAt":"2026-09-05T12:09:27.064Z","schemaVersion":2},"datasetVersion":"2026-09-12T17:17:11.597Z"}