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  }