diff --git a/cli/output/table.go b/cli/output/table.go index 4b7a24e00..a2b9a87c1 100644 --- a/cli/output/table.go +++ b/cli/output/table.go @@ -147,12 +147,12 @@ func (o *Table) Write(columns []string, obj any) error { colName := strings.ToLower(col) if alias, ok := o.fieldAlias[colName]; ok { if fn, ok := o.fieldMapping[alias]; ok { - out = append(out, fn(obj)) + out = append(out, sanitizeString(fn(obj))) continue } } if fn, ok := o.fieldMapping[colName]; ok { - out = append(out, fn(obj)) + out = append(out, sanitizeString(fn(obj))) continue } if value, ok := dataL[strings.ReplaceAll(colName, "_", "")]; ok { @@ -165,10 +165,10 @@ func (o *Table) Write(columns []string, obj any) error { continue } if s, ok := value.(string); ok { - out = append(out, NA(s)) + out = append(out, NA(sanitizeString(s))) continue } - out = append(out, fmt.Sprintf("%v", value)) + out = append(out, sanitizeString(value)) } } _, _ = fmt.Fprintln(o.w, strings.Join(out, "\t")) @@ -201,3 +201,9 @@ func fieldName(name string) string { } return string(out) } + +func sanitizeString(value any) string { + str := fmt.Sprintf("%v", value) + replacer := strings.NewReplacer("\n", " ", "\r", " ") + return strings.TrimSpace(replacer.Replace(str)) +} diff --git a/cli/pipeline/pipeline_test.go b/cli/pipeline/pipeline_test.go index 9812813d0..ce69e5946 100644 --- a/cli/pipeline/pipeline_test.go +++ b/cli/pipeline/pipeline_test.go @@ -23,7 +23,7 @@ func TestPipelineOutput(t *testing.T) { { name: "table output with default columns", args: []string{}, - expected: "NUMBER STATUS EVENT BRANCH MESSAGE AUTHOR\n1 success push main message John Doe\n", + expected: "NUMBER STATUS EVENT BRANCH MESSAGE AUTHOR\n1 success push main message multiline John Doe\n", }, { name: "table output with custom columns", @@ -33,7 +33,7 @@ func TestPipelineOutput(t *testing.T) { { name: "table output with no header", args: []string{"output", "--output-no-headers"}, - expected: "1 success push main message John Doe\n", + expected: "1 success push main message multiline John Doe\n", }, { name: "go-template output", @@ -53,8 +53,8 @@ func TestPipelineOutput(t *testing.T) { Status: "success", Event: "push", Branch: "main", - Message: "message", - Author: "John Doe", + Message: "message\nmultiline", + Author: "John Doe\n", }, }