gitee.com/mirrors_opencollective/goreleaser@v0.45.0/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 bodyTemplate = `{{ .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  func describeBody(ctx *context.Context) (bytes.Buffer, error) {
    27  	/* #nosec */
    28  	bts, err := exec.CommandContext(ctx, "go", "version").CombinedOutput()
    29  	if err != nil {
    30  		return bytes.Buffer{}, err
    31  	}
    32  	return describeBodyVersion(ctx, string(bts))
    33  }
    34  
    35  func describeBodyVersion(ctx *context.Context, version string) (bytes.Buffer, error) {
    36  	var out bytes.Buffer
    37  	var template = template.Must(template.New("release").Parse(bodyTemplate))
    38  	var dockers []string
    39  	for _, a := range ctx.Artifacts.Filter(artifact.ByType(artifact.DockerImage)).List() {
    40  		dockers = append(dockers, a.Name)
    41  	}
    42  	err := template.Execute(&out, struct {
    43  		ReleaseNotes, GoVersion string
    44  		DockerImages            []string
    45  	}{
    46  		ReleaseNotes: ctx.ReleaseNotes,
    47  		GoVersion:    version,
    48  		DockerImages: dockers,
    49  	})
    50  	return out, err
    51  }