github.com/goreleaser/goreleaser@v1.25.1/internal/pipe/release/body.go (about) 1 package release 2 3 import ( 4 "bytes" 5 "os" 6 "text/template" 7 8 "github.com/goreleaser/goreleaser/internal/artifact" 9 "github.com/goreleaser/goreleaser/internal/tmpl" 10 "github.com/goreleaser/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 fields := tmpl.Fields{} 21 22 checksums := ctx.Artifacts.Filter(artifact.ByType(artifact.Checksum)) 23 24 checksumsList := checksums.List() 25 switch len(checksumsList) { 26 case 0: 27 // do nothing 28 case 1: 29 bts, err := os.ReadFile(checksumsList[0].Path) 30 if err != nil { 31 return out, err 32 } 33 fields["Checksums"] = string(bts) 34 default: 35 checkMap := map[string]string{} 36 for _, check := range checksumsList { 37 bts, err := os.ReadFile(check.Path) 38 if err != nil { 39 return out, err 40 } 41 checkMap[artifact.ExtraOr(*check, artifact.ExtraChecksumOf, "")] = string(bts) 42 } 43 fields["Checksums"] = checkMap 44 } 45 46 t := tmpl.New(ctx).WithExtraFields(fields) 47 48 header, err := t.Apply(ctx.Config.Release.Header) 49 if err != nil { 50 return out, err 51 } 52 footer, err := t.Apply(ctx.Config.Release.Footer) 53 if err != nil { 54 return out, err 55 } 56 57 bodyTemplate := template.Must(template.New("release").Parse(bodyTemplateText)) 58 err = bodyTemplate.Execute(&out, struct { 59 Header string 60 Footer string 61 ReleaseNotes string 62 }{ 63 Header: header, 64 Footer: footer, 65 ReleaseNotes: ctx.ReleaseNotes, 66 }) 67 return out, err 68 }