From 76ba1238109f94624f8740d59fc1df2d3de36755 Mon Sep 17 00:00:00 2001 From: qwerty287 Date: Fri, 19 Dec 2025 12:26:21 +0100 Subject: [PATCH 1/4] Allow output template with single repos --- cli/repo/repo.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/cli/repo/repo.go b/cli/repo/repo.go index cdc8949a8d6..90dc91b7d62 100644 --- a/cli/repo/repo.go +++ b/cli/repo/repo.go @@ -80,6 +80,20 @@ func repoOutput(c *cli.Command, repos []*woodpecker.Repo, fd ...io.Writer) error if err := tmpl.Execute(out, repos); err != nil { return err } + case "go-format": + if len(outOpt) < 1 { + return fmt.Errorf("%w: missing template", output.ErrOutputOptionRequired) + } + + tmpl, err := template.New("_").Parse(outOpt[0] + "\n") + if err != nil { + return err + } + for _, r := range repos { + if err := tmpl.Execute(out, r); err != nil { + return err + } + } case "table": fallthrough default: From 6eee2d6d48ca5b71a07414c8974f889a5ca6ab7f Mon Sep 17 00:00:00 2001 From: qwerty287 Date: Fri, 16 Jan 2026 18:30:01 +0100 Subject: [PATCH 2/4] also support pipelines --- cli/pipeline/pipeline.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/cli/pipeline/pipeline.go b/cli/pipeline/pipeline.go index 5f5821feea0..6a061ff4216 100644 --- a/cli/pipeline/pipeline.go +++ b/cli/pipeline/pipeline.go @@ -66,6 +66,20 @@ func pipelineOutput(c *cli.Command, pipelines []*woodpecker.Pipeline, fd ...io.W return fmt.Errorf("%w: missing template", output.ErrOutputOptionRequired) } + tmpl, err := template.New("_").Parse(outOpt[0] + "\n") + if err != nil { + return err + } + for _, p := range pipelines { + if err := tmpl.Execute(out, p); err != nil { + return err + } + } + case "go-format": + if len(outOpt) < 1 { + return fmt.Errorf("%w: missing template", output.ErrOutputOptionRequired) + } + tmpl, err := template.New("_").Parse(outOpt[0] + "\n") if err != nil { return err From 09799e62d12718f7427ce2e1d59558272f4d4231 Mon Sep 17 00:00:00 2001 From: qwerty287 Date: Fri, 16 Jan 2026 19:13:24 +0100 Subject: [PATCH 3/4] fix --- cli/pipeline/pipeline.go | 12 ++++++------ cli/pipeline/pipeline_test.go | 5 +++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/cli/pipeline/pipeline.go b/cli/pipeline/pipeline.go index 6a061ff4216..5ba1987a16a 100644 --- a/cli/pipeline/pipeline.go +++ b/cli/pipeline/pipeline.go @@ -70,10 +70,8 @@ func pipelineOutput(c *cli.Command, pipelines []*woodpecker.Pipeline, fd ...io.W if err != nil { return err } - for _, p := range pipelines { - if err := tmpl.Execute(out, p); err != nil { - return err - } + if err := tmpl.Execute(out, pipelines); err != nil { + return err } case "go-format": if len(outOpt) < 1 { @@ -84,8 +82,10 @@ func pipelineOutput(c *cli.Command, pipelines []*woodpecker.Pipeline, fd ...io.W if err != nil { return err } - if err := tmpl.Execute(out, pipelines); err != nil { - return err + for _, p := range pipelines { + if err := tmpl.Execute(out, p); err != nil { + return err + } } case "table": fallthrough diff --git a/cli/pipeline/pipeline_test.go b/cli/pipeline/pipeline_test.go index 3cf14ee2672..0abe5a78cf0 100644 --- a/cli/pipeline/pipeline_test.go +++ b/cli/pipeline/pipeline_test.go @@ -40,6 +40,11 @@ func TestPipelineOutput(t *testing.T) { args: []string{"output", "--output", "go-template={{range . }}{{.Number}} {{.Status}} {{.Branch}}{{end}}"}, expected: "1 success main\n", }, + { + name: "go-format output", + args: []string{"output", "--output", "go-format={{.Number}} {{.Status}} {{.Branch}}"}, + expected: "1 success main\n", + }, { name: "invalid go-template", args: []string{"output", "--output", "go-template={{.InvalidField}}"}, From bb35c0c50df2907166f203e888d7d1165bffec52 Mon Sep 17 00:00:00 2001 From: qwerty287 Date: Mon, 19 Jan 2026 16:48:43 +0100 Subject: [PATCH 4/4] add repo test --- cli/repo/repo_test.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/cli/repo/repo_test.go b/cli/repo/repo_test.go index bdf17e8927b..b27b0651200 100644 --- a/cli/repo/repo_test.go +++ b/cli/repo/repo_test.go @@ -40,6 +40,16 @@ func TestRepoOutput(t *testing.T) { args: []string{"output", "--output", "go-template={{range . }}{{.Name}} {{.ForgeURL}} {{.Trusted.Network}}{{end}}"}, expected: "repo1 git.example.com true\n", }, + { + name: "go-format output", + args: []string{"output", "--output", "go-format={{.Name}} {{.ForgeURL}} {{.Trusted.Network}}"}, + expected: "repo1 git.example.com true\n", + }, + { + name: "invalid go-template", + args: []string{"output", "--output", "go-template={{.InvalidField}}"}, + wantErr: true, + }, } repos := []*woodpecker.Repo{