Skip to content

Commit

Permalink
feat: add docker manifests to release notes (#1925)
Browse files Browse the repository at this point in the history
* feat: add docker manifests to release notes

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>

* chore: fmt

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>

* refactor: improve code a bit

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>

* test: cover artifact.Type.String() with tests

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
  • Loading branch information
caarlos0 committed Nov 29, 2020
1 parent 3fb2366 commit 397ff3b
Show file tree
Hide file tree
Showing 7 changed files with 69 additions and 12 deletions.
4 changes: 4 additions & 0 deletions internal/artifact/artifact.go
Expand Up @@ -40,6 +40,8 @@ const (
PublishableDockerImage
// DockerImage is a published Docker image.
DockerImage
// DockerManifest is a published Docker manifest.
DockerManifest
// Checksum is a checksums file.
Checksum
// Signature is a signature file.
Expand All @@ -60,6 +62,8 @@ func (t Type) String() string {
return "Linux Package"
case PublishableDockerImage, DockerImage:
return "Docker Image"
case DockerManifest:
return "Docker Manifest"
case PublishableSnapcraft, Snapcraft:
return "Snap"
case Checksum:
Expand Down
25 changes: 25 additions & 0 deletions internal/artifact/artifact_test.go
Expand Up @@ -288,3 +288,28 @@ func TestByFormats(t *testing.T) {
require.Len(t, artifacts.Filter(ByFormats("zip")).items, 2)
require.Len(t, artifacts.Filter(ByFormats("zip", "tar.gz")).items, 3)
}

func TestTypeToString(t *testing.T) {
for _, a := range []Type{
UploadableArchive,
UploadableBinary,
UploadableFile,
Binary,
LinuxPackage,
PublishableSnapcraft,
Snapcraft,
PublishableDockerImage,
DockerImage,
DockerManifest,
Checksum,
Signature,
UploadableSourceArchive,
} {
t.Run(a.String(), func(t *testing.T) {
require.NotEqual(t, "unknown", a.String())
})
}
t.Run("unknown", func(t *testing.T) {
require.Equal(t, "unknown", Type(9999).String())
})
}
24 changes: 12 additions & 12 deletions internal/pipe/docker/docker_test.go
Expand Up @@ -152,10 +152,10 @@ func TestRunPipe(t *testing.T) {
},
manifests: []config.DockerManifest{
{
NameTemplate: registry + "goreleaser/test_multiarch_fail:test",
ImageTemplates: []string{registry + "goreleaser/test_multiarch_fail:latest-amd64"},
CreateFlags: []string{"--insecure"},
PushFlags: []string{"--insecure"},
NameTemplate: registry + "goreleaser/test_multiarch_fail:test",
ImageTemplates: []string{registry + "goreleaser/test_multiarch_fail:latest-amd64"},
CreateFlags: []string{"--insecure"},
PushFlags: []string{"--insecure"},
},
},
expect: []string{registry + "goreleaser/test_multiarch_fail:latest-arm64v8"},
Expand All @@ -176,8 +176,8 @@ func TestRunPipe(t *testing.T) {
},
manifests: []config.DockerManifest{
{
NameTemplate: registry + "goreleaser/test_multiarch_manifest_tmpl_error:{{ .Goos }",
ImageTemplates: []string{registry + "goreleaser/test_multiarch_manifest_tmpl_error"},
NameTemplate: registry + "goreleaser/test_multiarch_manifest_tmpl_error:{{ .Goos }",
ImageTemplates: []string{registry + "goreleaser/test_multiarch_manifest_tmpl_error"},
},
},
expect: []string{registry + "goreleaser/test_multiarch_manifest_tmpl_error"},
Expand All @@ -198,8 +198,8 @@ func TestRunPipe(t *testing.T) {
},
manifests: []config.DockerManifest{
{
NameTemplate: registry + "goreleaser/test_multiarch_img_tmpl_error",
ImageTemplates: []string{registry + "goreleaser/test_multiarch_img_tmpl_error:{{ .Goos }"},
NameTemplate: registry + "goreleaser/test_multiarch_img_tmpl_error",
ImageTemplates: []string{registry + "goreleaser/test_multiarch_img_tmpl_error:{{ .Goos }"},
},
},
expect: []string{registry + "goreleaser/test_multiarch_img_tmpl_error"},
Expand All @@ -220,8 +220,8 @@ func TestRunPipe(t *testing.T) {
},
manifests: []config.DockerManifest{
{
NameTemplate: " ",
ImageTemplates: []string{registry + "goreleaser/test_multiarch_no_mainifest_name"},
NameTemplate: " ",
ImageTemplates: []string{registry + "goreleaser/test_multiarch_no_mainifest_name"},
},
},
expect: []string{registry + "goreleaser/test_multiarch_no_mainifest_name"},
Expand All @@ -242,8 +242,8 @@ func TestRunPipe(t *testing.T) {
},
manifests: []config.DockerManifest{
{
NameTemplate: "ignored",
ImageTemplates: []string{" ", " ", ""},
NameTemplate: "ignored",
ImageTemplates: []string{" ", " ", ""},
},
},
expect: []string{registry + "goreleaser/test_multiarch_no_mainifest_images"},
Expand Down
6 changes: 6 additions & 0 deletions internal/pipe/docker/manifest.go
Expand Up @@ -6,6 +6,7 @@ import (
"strings"

"github.com/apex/log"
"github.com/goreleaser/goreleaser/internal/artifact"
"github.com/goreleaser/goreleaser/internal/pipe"
"github.com/goreleaser/goreleaser/internal/semerrgroup"
"github.com/goreleaser/goreleaser/internal/tmpl"
Expand Down Expand Up @@ -41,6 +42,11 @@ func (ManifestPipe) Publish(ctx *context.Context) error {
if err := dockerManifestCreate(ctx, name, images, manifest.CreateFlags); err != nil {
return err
}
ctx.Artifacts.Add(&artifact.Artifact{
Type: artifact.DockerManifest,
Name: name,
Path: name,
})
return dockerManifestPush(ctx, name, manifest.PushFlags)
})
}
Expand Down
3 changes: 3 additions & 0 deletions internal/pipe/release/body.go
Expand Up @@ -23,6 +23,9 @@ func describeBody(ctx *context.Context) (bytes.Buffer, error) {
var out bytes.Buffer
// nolint:prealloc
var dockers []string
for _, a := range ctx.Artifacts.Filter(artifact.ByType(artifact.DockerManifest)).List() {
dockers = append(dockers, a.Name)
}
for _, a := range ctx.Artifacts.Filter(artifact.ByType(artifact.DockerImage)).List() {
dockers = append(dockers, a.Name)
}
Expand Down
13 changes: 13 additions & 0 deletions internal/pipe/release/body_test.go
Expand Up @@ -21,6 +21,19 @@ func TestDescribeBody(t *testing.T) {
"goreleaser/goreleaser:0.40.0",
"goreleaser/goreleaser:latest",
"goreleaser/godownloader:v0.1.0",
} {
ctx.Artifacts.Add(&artifact.Artifact{
Name: d,
Type: artifact.DockerManifest,
})
}
for _, d := range []string{
"goreleaser/goreleaser:0.40.0-amd64",
"goreleaser/goreleaser:latest-amd64",
"goreleaser/godownloader:v0.1.0-amd64",
"goreleaser/goreleaser:0.40.0-arm64",
"goreleaser/goreleaser:latest-arm64",
"goreleaser/godownloader:v0.1.0-arm64",
} {
ctx.Artifacts.Add(&artifact.Artifact{
Name: d,
Expand Down
6 changes: 6 additions & 0 deletions internal/pipe/release/testdata/release1.golden
Expand Up @@ -6,3 +6,9 @@ feature2: other description
- `docker pull goreleaser/goreleaser:0.40.0`
- `docker pull goreleaser/goreleaser:latest`
- `docker pull goreleaser/godownloader:v0.1.0`
- `docker pull goreleaser/goreleaser:0.40.0-amd64`
- `docker pull goreleaser/goreleaser:latest-amd64`
- `docker pull goreleaser/godownloader:v0.1.0-amd64`
- `docker pull goreleaser/goreleaser:0.40.0-arm64`
- `docker pull goreleaser/goreleaser:latest-arm64`
- `docker pull goreleaser/godownloader:v0.1.0-arm64`

1 comment on commit 397ff3b

@vercel
Copy link

@vercel vercel bot commented on 397ff3b Nov 29, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.