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  }