From 02ae63297bd622bf453a930ce8dd180a58e11ed9 Mon Sep 17 00:00:00 2001
From: Jonathan Tran <jon@allspice.io>
Date: Fri, 13 Jan 2023 15:41:23 -0500
Subject: [PATCH] Log STDERR of external renderer when it fails (#22442)

When using an external renderer, STDOUT is expected to be HTML. But
anything written to STDERR is currently ignored. In cases where the
renderer fails, I would like to log any error messages that the external
program outputs to STDERR.
---
 modules/markup/external/external.go | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/modules/markup/external/external.go b/modules/markup/external/external.go
index f47776690f..ffbb6da4da 100644
--- a/modules/markup/external/external.go
+++ b/modules/markup/external/external.go
@@ -4,6 +4,7 @@
 package external
 
 import (
+	"bytes"
 	"fmt"
 	"io"
 	"os"
@@ -132,11 +133,13 @@ func (p *Renderer) Render(ctx *markup.RenderContext, input io.Reader, output io.
 	if !p.IsInputFile {
 		cmd.Stdin = input
 	}
+	var stderr bytes.Buffer
 	cmd.Stdout = output
+	cmd.Stderr = &stderr
 	process.SetSysProcAttribute(cmd)
 
 	if err := cmd.Run(); err != nil {
-		return fmt.Errorf("%s render run command %s %v failed: %w", p.Name(), commands[0], args, err)
+		return fmt.Errorf("%s render run command %s %v failed: %w\nStderr: %s", p.Name(), commands[0], args, err, stderr.String())
 	}
 	return nil
 }