github.com/ahmet2mir/goreleaser@v0.180.3-0.20210927151101-8e5ee5a9b8c5/internal/pipe/release/body.go (about)

     1  package release
     2  
     3  import (
     4  	"bytes"
     5  	"strings"
     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  
    16  {{- with .DockerImages }}
    17  
    18  ## Docker images
    19  {{ range $element := . }}
    20  - ` + "`docker pull {{ . -}}`" + `
    21  {{- end -}}
    22  {{- end }}
    23  {{- with .Footer }}{{ "\n" }}{{ . }}{{ end }}
    24  `
    25  
    26  func isLatest(img string) bool {
    27  	return strings.HasSuffix(img, ":latest") || !strings.Contains(img, ":")
    28  }
    29  
    30  func describeBody(ctx *context.Context) (bytes.Buffer, error) {
    31  	var out bytes.Buffer
    32  	// nolint:prealloc
    33  	var dockers []string
    34  	for _, a := range ctx.Artifacts.Filter(artifact.ByType(artifact.DockerManifest)).List() {
    35  		if isLatest(a.Name) {
    36  			continue
    37  		}
    38  		dockers = append(dockers, a.Name)
    39  	}
    40  	if len(dockers) == 0 {
    41  		for _, a := range ctx.Artifacts.Filter(artifact.ByType(artifact.DockerImage)).List() {
    42  			if isLatest(a.Name) {
    43  				continue
    44  			}
    45  			dockers = append(dockers, a.Name)
    46  		}
    47  	}
    48  
    49  	header, err := tmpl.New(ctx).Apply(ctx.Config.Release.Header)
    50  	if err != nil {
    51  		return out, err
    52  	}
    53  	footer, err := tmpl.New(ctx).Apply(ctx.Config.Release.Footer)
    54  	if err != nil {
    55  		return out, err
    56  	}
    57  
    58  	bodyTemplate := template.Must(template.New("release").Parse(bodyTemplateText))
    59  	err = bodyTemplate.Execute(&out, struct {
    60  		Header       string
    61  		Footer       string
    62  		ReleaseNotes string
    63  		DockerImages []string
    64  	}{
    65  		Header:       header,
    66  		Footer:       footer,
    67  		ReleaseNotes: ctx.ReleaseNotes,
    68  		DockerImages: dockers,
    69  	})
    70  	return out, err
    71  }