mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-01-10 03:47:03 +02:00
Merge pull request #363 from goreleaser/docker-img-on-release-notes
adding docker images into the release notes
This commit is contained in:
commit
b0e60af5e6
@ -15,6 +15,7 @@ checksum:
|
||||
name_template: '{{ .ProjectName }}_checksums.txt'
|
||||
dockers:
|
||||
- image: goreleaser/goreleaser
|
||||
latest: true
|
||||
archive:
|
||||
name_template: '{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}'
|
||||
replacements:
|
||||
|
@ -35,6 +35,7 @@ type Context struct {
|
||||
Git GitInfo
|
||||
Binaries map[string]map[string][]Binary
|
||||
Artifacts []string
|
||||
Dockers []string
|
||||
ReleaseNotes string
|
||||
Version string
|
||||
Validate bool
|
||||
@ -45,6 +46,7 @@ type Context struct {
|
||||
}
|
||||
|
||||
var artifactsLock sync.Mutex
|
||||
var dockersLock sync.Mutex
|
||||
var binariesLock sync.Mutex
|
||||
|
||||
// AddArtifact adds a file to upload list
|
||||
@ -56,6 +58,14 @@ func (ctx *Context) AddArtifact(file string) {
|
||||
log.WithField("artifact", file).Info("new release artifact")
|
||||
}
|
||||
|
||||
// AddDocker adds a docker image to the docker images list
|
||||
func (ctx *Context) AddDocker(image string) {
|
||||
dockersLock.Lock()
|
||||
defer dockersLock.Unlock()
|
||||
ctx.Dockers = append(ctx.Dockers, image)
|
||||
log.WithField("image", image).Info("new docker image")
|
||||
}
|
||||
|
||||
// AddBinary adds a built binary to the current context
|
||||
func (ctx *Context) AddBinary(platform, folder, name, path string) {
|
||||
binariesLock.Lock()
|
||||
|
@ -8,19 +8,24 @@ import (
|
||||
"golang.org/x/sync/errgroup"
|
||||
)
|
||||
|
||||
func TestMultipleArtifactAdds(t *testing.T) {
|
||||
func TestMultipleAdds(t *testing.T) {
|
||||
var assert = assert.New(t)
|
||||
var list = []string{
|
||||
var artifacts = []string{
|
||||
"dist/a",
|
||||
"dist/b",
|
||||
"dist/c",
|
||||
"dist/d",
|
||||
}
|
||||
var dockerfiles = []string{
|
||||
"a/b:1.0.0",
|
||||
"c/d:2.0.0",
|
||||
"e/f:3.0.0",
|
||||
}
|
||||
var ctx = New(config.Project{
|
||||
Dist: "dist",
|
||||
})
|
||||
var g errgroup.Group
|
||||
for _, f := range list {
|
||||
for _, f := range artifacts {
|
||||
f := f
|
||||
g.Go(func() error {
|
||||
ctx.AddArtifact(f)
|
||||
@ -28,8 +33,18 @@ func TestMultipleArtifactAdds(t *testing.T) {
|
||||
})
|
||||
}
|
||||
assert.NoError(g.Wait())
|
||||
assert.Len(ctx.Artifacts, len(list))
|
||||
for _, d := range dockerfiles {
|
||||
d := d
|
||||
g.Go(func() error {
|
||||
ctx.AddDocker(d)
|
||||
return nil
|
||||
})
|
||||
}
|
||||
assert.NoError(g.Wait())
|
||||
assert.Len(ctx.Artifacts, len(artifacts))
|
||||
assert.Contains(ctx.Artifacts, "a", "b", "c", "d")
|
||||
assert.Len(ctx.Dockers, len(dockerfiles))
|
||||
assert.Contains(ctx.Dockers, "a/b:1.0.0", "c/d:2.0.0", "e/f:3.0.0")
|
||||
}
|
||||
|
||||
func TestMultipleBinaryAdds(t *testing.T) {
|
||||
|
@ -35,8 +35,8 @@ var pipes = []pipeline.Pipe{
|
||||
fpm.Pipe{}, // archive via fpm (deb, rpm, etc)
|
||||
snapcraft.Pipe{}, // archive via snapcraft (snap)
|
||||
checksums.Pipe{}, // checksums of the files
|
||||
release.Pipe{}, // release to github
|
||||
docker.Pipe{}, // create and push docker images
|
||||
release.Pipe{}, // release to github
|
||||
brew.Pipe{}, // push to brew tap
|
||||
}
|
||||
|
||||
|
@ -95,6 +95,7 @@ func process(ctx *context.Context, folder string, docker config.Docker, binary c
|
||||
return err
|
||||
}
|
||||
}
|
||||
ctx.AddDocker(image)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -10,23 +10,36 @@ import (
|
||||
|
||||
const bodyTemplate = `{{ .ReleaseNotes }}
|
||||
|
||||
{{- if .DockerImages }}
|
||||
|
||||
Docker images:
|
||||
{{ range $element := .DockerImages }}
|
||||
- {{ . -}}
|
||||
{{ end -}}
|
||||
{{- end }}
|
||||
|
||||
---
|
||||
Automated with [GoReleaser](https://github.com/goreleaser)
|
||||
Built with {{ .GoVersion }}
|
||||
`
|
||||
Built with {{ .GoVersion }}`
|
||||
|
||||
func describeBody(ctx *context.Context) (bytes.Buffer, error) {
|
||||
var out bytes.Buffer
|
||||
bts, err := exec.Command("go", "version").CombinedOutput()
|
||||
if err != nil {
|
||||
return out, err
|
||||
return bytes.Buffer{}, err
|
||||
}
|
||||
return describeBodyVersion(ctx, string(bts))
|
||||
}
|
||||
|
||||
func describeBodyVersion(ctx *context.Context, version string) (bytes.Buffer, error) {
|
||||
var out bytes.Buffer
|
||||
var template = template.Must(template.New("release").Parse(bodyTemplate))
|
||||
err = template.Execute(&out, struct {
|
||||
err := template.Execute(&out, struct {
|
||||
ReleaseNotes, GoVersion string
|
||||
DockerImages []string
|
||||
}{
|
||||
ReleaseNotes: ctx.ReleaseNotes,
|
||||
GoVersion: string(bts),
|
||||
GoVersion: version,
|
||||
DockerImages: ctx.Dockers,
|
||||
})
|
||||
return out, err
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package release
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
@ -13,12 +14,35 @@ func TestDescribeBody(t *testing.T) {
|
||||
var changelog = "\nfeature1: description\nfeature2: other description"
|
||||
var ctx = &context.Context{
|
||||
ReleaseNotes: changelog,
|
||||
Dockers: []string{
|
||||
"goreleaser/goreleaser:0.40.0",
|
||||
"goreleaser/godownloader:0.1.0",
|
||||
},
|
||||
}
|
||||
out, err := describeBody(ctx)
|
||||
out, err := describeBodyVersion(ctx, "go version go1.9 darwin/amd64")
|
||||
assert.NoError(err)
|
||||
assert.Contains(out.String(), changelog)
|
||||
assert.Contains(out.String(), "Automated with [GoReleaser]")
|
||||
assert.Contains(out.String(), "Built with go version go1.")
|
||||
|
||||
bts, err := ioutil.ReadFile("testdata/release1.txt")
|
||||
assert.NoError(err)
|
||||
ioutil.WriteFile("testdata/release1.txt", out.Bytes(), 0755)
|
||||
|
||||
assert.Equal(string(bts), out.String())
|
||||
}
|
||||
|
||||
func TestDescribeBodyNoDockerImages(t *testing.T) {
|
||||
var assert = assert.New(t)
|
||||
var changelog = "\nfeature1: description\nfeature2: other description"
|
||||
var ctx = &context.Context{
|
||||
ReleaseNotes: changelog,
|
||||
}
|
||||
out, err := describeBodyVersion(ctx, "go version go1.9 darwin/amd64")
|
||||
assert.NoError(err)
|
||||
|
||||
bts, err := ioutil.ReadFile("testdata/release2.txt")
|
||||
assert.NoError(err)
|
||||
ioutil.WriteFile("testdata/release2.txt", out.Bytes(), 0755)
|
||||
|
||||
assert.Equal(string(bts), out.String())
|
||||
}
|
||||
|
||||
func TestDontEscapeHTML(t *testing.T) {
|
||||
|
12
pipeline/release/testdata/release1.txt
vendored
Normal file
12
pipeline/release/testdata/release1.txt
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
feature1: description
|
||||
feature2: other description
|
||||
|
||||
Docker images:
|
||||
|
||||
- goreleaser/goreleaser:0.40.0
|
||||
- goreleaser/godownloader:0.1.0
|
||||
|
||||
---
|
||||
Automated with [GoReleaser](https://github.com/goreleaser)
|
||||
Built with go version go1.9 darwin/amd64
|
7
pipeline/release/testdata/release2.txt
vendored
Executable file
7
pipeline/release/testdata/release2.txt
vendored
Executable file
@ -0,0 +1,7 @@
|
||||
|
||||
feature1: description
|
||||
feature2: other description
|
||||
|
||||
---
|
||||
Automated with [GoReleaser](https://github.com/goreleaser)
|
||||
Built with go version go1.9 darwin/amd64
|
Loading…
Reference in New Issue
Block a user