github.com/windmeup/goreleaser@v1.21.95/internal/pipe/release/body.go (about) 1 package release 2 3 import ( 4 "bytes" 5 "os" 6 "text/template" 7 8 "github.com/windmeup/goreleaser/internal/artifact" 9 "github.com/windmeup/goreleaser/internal/tmpl" 10 "github.com/windmeup/goreleaser/pkg/context" 11 ) 12 13 const bodyTemplateText = `{{ with .Header }}{{ . }}{{ "\n" }}{{ end }} 14 {{- .ReleaseNotes }} 15 {{- with .Footer }}{{ "\n" }}{{ . }}{{ end }} 16 ` 17 18 func describeBody(ctx *context.Context) (bytes.Buffer, error) { 19 var out bytes.Buffer 20 var checksum string 21 if l := ctx.Artifacts.Filter(artifact.ByType(artifact.Checksum)).List(); len(l) > 0 { 22 if err := l[0].Refresh(); err != nil { 23 return out, err 24 } 25 bts, err := os.ReadFile(l[0].Path) 26 if err != nil { 27 return out, err 28 } 29 checksum = string(bts) 30 } 31 32 t := tmpl.New(ctx).WithExtraFields(tmpl.Fields{ 33 "Checksums": checksum, 34 }) 35 36 header, err := t.Apply(ctx.Config.Release.Header) 37 if err != nil { 38 return out, err 39 } 40 footer, err := t.Apply(ctx.Config.Release.Footer) 41 if err != nil { 42 return out, err 43 } 44 45 bodyTemplate := template.Must(template.New("release").Parse(bodyTemplateText)) 46 err = bodyTemplate.Execute(&out, struct { 47 Header string 48 Footer string 49 ReleaseNotes string 50 }{ 51 Header: header, 52 Footer: footer, 53 ReleaseNotes: ctx.ReleaseNotes, 54 }) 55 return out, err 56 }