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 }