From 4a031e11b13e0abe23c7d1e80a334283a0ef6405 Mon Sep 17 00:00:00 2001 From: Simon Kollberg Date: Tue, 3 Mar 2026 14:44:38 +0100 Subject: [PATCH] fix: Allow empty output from PostRenderer when input is empty Signed-off-by: Simon Kollberg --- pkg/postrenderer/postrenderer.go | 8 +++++--- pkg/postrenderer/postrenderer_test.go | 19 ++++++++++++++++++- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/pkg/postrenderer/postrenderer.go b/pkg/postrenderer/postrenderer.go index 55e6d3adf..ee7a6b191 100644 --- a/pkg/postrenderer/postrenderer.go +++ b/pkg/postrenderer/postrenderer.go @@ -61,6 +61,8 @@ type postRendererPlugin struct { // Run implements PostRenderer by using the plugin's Runtime func (r *postRendererPlugin) Run(renderedManifests *bytes.Buffer) (*bytes.Buffer, error) { + renderedManifestsLen := renderedManifests.Len() + input := &plugin.Input{ Message: schema.InputMessagePostRendererV1{ ExtraArgs: r.args, @@ -74,9 +76,9 @@ func (r *postRendererPlugin) Run(renderedManifests *bytes.Buffer) (*bytes.Buffer outputMessage := output.Message.(schema.OutputMessagePostRendererV1) - // If the binary returned almost nothing, it's likely that it didn't - // successfully render anything - if len(bytes.TrimSpace(outputMessage.Manifests.Bytes())) == 0 { + // If the binary returned almost nothing and the input isn't empty, it's + // likely that it didn't successfully render anything + if len(bytes.TrimSpace(outputMessage.Manifests.Bytes())) == 0 && renderedManifestsLen != 0 { return nil, fmt.Errorf("post-renderer %q produced empty output", r.plugin.Metadata().Name) } diff --git a/pkg/postrenderer/postrenderer_test.go b/pkg/postrenderer/postrenderer_test.go index 824a1d179..910d6b00d 100644 --- a/pkg/postrenderer/postrenderer_test.go +++ b/pkg/postrenderer/postrenderer_test.go @@ -40,10 +40,27 @@ func TestNewPostRenderPluginRunWithNoOutput(t *testing.T) { renderer, err := NewPostRendererPlugin(s, name, "") require.NoError(t, err) - _, err = renderer.Run(bytes.NewBufferString("")) + _, err = renderer.Run(bytes.NewBufferString("FOOTEST")) is.Error(err) } +func TestNewPostRenderPluginRunWithNoInputAndOutput(t *testing.T) { + if runtime.GOOS == "windows" { + // the actual Run test uses a basic sed example, so skip this test on windows + t.Skip("skipping on windows") + } + is := assert.New(t) + s := cli.New() + s.PluginsDirectory = "testdata/plugins" + name := "postrenderer-v1" + + renderer, err := NewPostRendererPlugin(s, name, "") + require.NoError(t, err) + + _, err = renderer.Run(bytes.NewBufferString("")) + is.NoError(err) +} + func TestNewPostRenderPluginWithOneArgsRun(t *testing.T) { if runtime.GOOS == "windows" { // the actual Run test uses a basic sed example, so skip this test on windows