github.com/jasei/goreleaser@v0.62.4-0.20180312171904-62cb6a8963a6/pipeline/release/body.go (about)

     1  package release
     2  
     3  import (
     4  	"bytes"
     5  	"os/exec"
     6  	"text/template"
     7  
     8  	"github.com/goreleaser/goreleaser/context"
     9  	"github.com/goreleaser/goreleaser/internal/artifact"
    10  )
    11  
    12  const bodyTemplateText = `{{ .ReleaseNotes }}
    13  
    14  {{- if .DockerImages }}
    15  
    16  ## Docker images
    17  {{ range $element := .DockerImages }}
    18  - ` + "`docker pull {{ . -}}`" + `
    19  {{- end -}}
    20  {{- end }}
    21  
    22  ---
    23  Automated with [GoReleaser](https://github.com/goreleaser)
    24  Built with {{ .GoVersion }}`
    25  
    26  var bodyTemplate *template.Template
    27  
    28  func init() {
    29  	bodyTemplate = template.Must(template.New("release").Parse(bodyTemplateText))
    30  }
    31  
    32  func describeBody(ctx *context.Context) (bytes.Buffer, error) {
    33  	/* #nosec */
    34  	bts, err := exec.CommandContext(ctx, "go", "version").CombinedOutput()
    35  	if err != nil {
    36  		return bytes.Buffer{}, err
    37  	}
    38  	return describeBodyVersion(ctx, string(bts))
    39  }
    40  
    41  func describeBodyVersion(ctx *context.Context, version string) (bytes.Buffer, error) {
    42  	var out bytes.Buffer
    43  	var dockers []string
    44  	for _, a := range ctx.Artifacts.Filter(artifact.ByType(artifact.DockerImage)).List() {
    45  		dockers = append(dockers, a.Name)
    46  	}
    47  	err := bodyTemplate.Execute(&out, struct {
    48  		ReleaseNotes, GoVersion string
    49  		DockerImages            []string
    50  	}{
    51  		ReleaseNotes: ctx.ReleaseNotes,
    52  		GoVersion:    version,
    53  		DockerImages: dockers,
    54  	})
    55  	return out, err
    56  }