1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-03-11 14:39:28 +02:00

feat: allow to template commit author (#2826)

* feat: allow to template commit author

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

* chore: fmt

Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
This commit is contained in:
Carlos Alexandro Becker 2022-01-11 09:15:28 -03:00 committed by GitHub
parent 9af798b993
commit b28a28efb6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 142 additions and 28 deletions

View File

@ -0,0 +1,37 @@
// Package commitauthor provides common commit author functionality.
package commitauthor
import (
"github.com/goreleaser/goreleaser/internal/tmpl"
"github.com/goreleaser/goreleaser/pkg/config"
"github.com/goreleaser/goreleaser/pkg/context"
)
const (
defaultName = "goreleaserbot"
defaultEmail = "goreleaser@carlosbecker.com"
)
// Get templates the commit author and returns the filled fields.
func Get(ctx *context.Context, og config.CommitAuthor) (config.CommitAuthor, error) {
var author config.CommitAuthor
var err error
author.Name, err = tmpl.New(ctx).Apply(og.Name)
if err != nil {
return author, err
}
author.Email, err = tmpl.New(ctx).Apply(og.Email)
return author, err
}
// Default sets the default commit author name and email.
func Default(og config.CommitAuthor) config.CommitAuthor {
if og.Name == "" {
og.Name = defaultName
}
if og.Email == "" {
og.Email = defaultEmail
}
return og
}

View File

@ -0,0 +1,72 @@
package commitauthor
import (
"testing"
"github.com/goreleaser/goreleaser/pkg/config"
"github.com/goreleaser/goreleaser/pkg/context"
"github.com/stretchr/testify/require"
)
func TestGet(t *testing.T) {
t.Run("valid", func(t *testing.T) {
author, err := Get(context.New(config.Project{
Env: []string{"NAME=foo", "MAIL=foo@bar"},
}), config.CommitAuthor{
Name: "{{.Env.NAME}}",
Email: "{{.Env.MAIL}}",
})
require.NoError(t, err)
require.Equal(t, config.CommitAuthor{
Name: "foo",
Email: "foo@bar",
}, author)
})
t.Run("invalid name tmpl", func(t *testing.T) {
_, err := Get(
context.New(config.Project{}),
config.CommitAuthor{
Name: "{{.Env.NOPE}}",
Email: "a",
})
require.Error(t, err)
})
t.Run("invalid email tmpl", func(t *testing.T) {
_, err := Get(
context.New(config.Project{}),
config.CommitAuthor{
Name: "a",
Email: "{{.Env.NOPE}}",
})
require.Error(t, err)
})
}
func TestDefault(t *testing.T) {
t.Run("empty", func(t *testing.T) {
require.Equal(t, Default(config.CommitAuthor{}), config.CommitAuthor{
Name: defaultName,
Email: defaultEmail,
})
})
t.Run("no name", func(t *testing.T) {
require.Equal(t, Default(config.CommitAuthor{
Email: "a",
}), config.CommitAuthor{
Name: defaultName,
Email: "a",
})
})
t.Run("no email", func(t *testing.T) {
require.Equal(t, Default(config.CommitAuthor{
Name: "a",
}), config.CommitAuthor{
Name: "a",
Email: defaultEmail,
})
})
}

View File

@ -15,6 +15,7 @@ import (
"github.com/apex/log"
"github.com/goreleaser/goreleaser/internal/artifact"
"github.com/goreleaser/goreleaser/internal/client"
"github.com/goreleaser/goreleaser/internal/commitauthor"
"github.com/goreleaser/goreleaser/internal/pipe"
"github.com/goreleaser/goreleaser/internal/tmpl"
"github.com/goreleaser/goreleaser/pkg/config"
@ -42,12 +43,8 @@ func (Pipe) Default(ctx *context.Context) error {
for i := range ctx.Config.Brews {
brew := &ctx.Config.Brews[i]
if brew.CommitAuthor.Name == "" {
brew.CommitAuthor.Name = "goreleaserbot"
}
if brew.CommitAuthor.Email == "" {
brew.CommitAuthor.Email = "goreleaser@carlosbecker.com"
}
brew.CommitAuthor = commitauthor.Default(brew.CommitAuthor)
if brew.CommitMessageTemplate == "" {
brew.CommitMessageTemplate = "Brew formula update for {{ .ProjectName }} version {{ .Tag }}"
}
@ -135,12 +132,17 @@ func doPublish(ctx *context.Context, formula *artifact.Artifact, cl client.Clien
return err
}
author, err := commitauthor.Get(ctx, brew.CommitAuthor)
if err != nil {
return err
}
content, err := os.ReadFile(formula.Path)
if err != nil {
return err
}
return cl.CreateFile(ctx, brew.CommitAuthor, repo, content, gpath, msg)
return cl.CreateFile(ctx, author, repo, content, gpath, msg)
}
func doRun(ctx *context.Context, brew config.Homebrew, cl client.Client) error {

View File

@ -14,6 +14,7 @@ import (
"github.com/apex/log"
"github.com/goreleaser/goreleaser/internal/artifact"
"github.com/goreleaser/goreleaser/internal/client"
"github.com/goreleaser/goreleaser/internal/commitauthor"
"github.com/goreleaser/goreleaser/internal/pipe"
"github.com/goreleaser/goreleaser/internal/tmpl"
"github.com/goreleaser/goreleaser/pkg/config"
@ -37,12 +38,7 @@ func (Pipe) Default(ctx *context.Context) error {
for i := range ctx.Config.Rigs {
goFish := &ctx.Config.Rigs[i]
if goFish.CommitAuthor.Name == "" {
goFish.CommitAuthor.Name = "goreleaserbot"
}
if goFish.CommitAuthor.Email == "" {
goFish.CommitAuthor.Email = "goreleaser@carlosbecker.com"
}
goFish.CommitAuthor = commitauthor.Default(goFish.CommitAuthor)
if goFish.CommitMessageTemplate == "" {
goFish.CommitMessageTemplate = "GoFish fish food update for {{ .ProjectName }} version {{ .Tag }}"
}
@ -297,12 +293,17 @@ func doPublish(ctx *context.Context, food *artifact.Artifact, cl client.Client)
return err
}
author, err := commitauthor.Get(ctx, rig.CommitAuthor)
if err != nil {
return err
}
content, err := os.ReadFile(food.Path)
if err != nil {
return err
}
return cl.CreateFile(ctx, rig.CommitAuthor, repo, content, gpath, msg)
return cl.CreateFile(ctx, author, repo, content, gpath, msg)
}
func buildFoodPath(folder, filename string) string {

View File

@ -16,6 +16,7 @@ import (
"github.com/apex/log"
"github.com/goreleaser/goreleaser/internal/artifact"
"github.com/goreleaser/goreleaser/internal/client"
"github.com/goreleaser/goreleaser/internal/commitauthor"
"github.com/goreleaser/goreleaser/internal/pipe"
"github.com/goreleaser/goreleaser/internal/tmpl"
"github.com/goreleaser/goreleaser/pkg/config"
@ -42,12 +43,7 @@ func (Pipe) Default(ctx *context.Context) error {
for i := range ctx.Config.Krews {
krew := &ctx.Config.Krews[i]
if krew.CommitAuthor.Name == "" {
krew.CommitAuthor.Name = "goreleaserbot"
}
if krew.CommitAuthor.Email == "" {
krew.CommitAuthor.Email = "goreleaser@carlosbecker.com"
}
krew.CommitAuthor = commitauthor.Default(krew.CommitAuthor)
if krew.CommitMessageTemplate == "" {
krew.CommitMessageTemplate = "Krew manifest update for {{ .ProjectName }} version {{ .Tag }}"
}
@ -308,12 +304,17 @@ func doPublish(ctx *context.Context, manifest *artifact.Artifact, cl client.Clie
return err
}
author, err := commitauthor.Get(ctx, cfg.CommitAuthor)
if err != nil {
return err
}
content, err := os.ReadFile(manifest.Path)
if err != nil {
return err
}
return cl.CreateFile(ctx, cfg.CommitAuthor, repo, content, gpath, msg)
return cl.CreateFile(ctx, author, repo, content, gpath, msg)
}
func buildManifestPath(folder, filename string) string {

View File

@ -14,6 +14,7 @@ import (
"github.com/apex/log"
"github.com/goreleaser/goreleaser/internal/artifact"
"github.com/goreleaser/goreleaser/internal/client"
"github.com/goreleaser/goreleaser/internal/commitauthor"
"github.com/goreleaser/goreleaser/internal/pipe"
"github.com/goreleaser/goreleaser/internal/tmpl"
"github.com/goreleaser/goreleaser/pkg/config"
@ -54,12 +55,7 @@ func (Pipe) Default(ctx *context.Context) error {
if ctx.Config.Scoop.Name == "" {
ctx.Config.Scoop.Name = ctx.Config.ProjectName
}
if ctx.Config.Scoop.CommitAuthor.Name == "" {
ctx.Config.Scoop.CommitAuthor.Name = "goreleaserbot"
}
if ctx.Config.Scoop.CommitAuthor.Email == "" {
ctx.Config.Scoop.CommitAuthor.Email = "goreleaser@carlosbecker.com"
}
ctx.Config.Scoop.CommitAuthor = commitauthor.Default(ctx.Config.Scoop.CommitAuthor)
if ctx.Config.Scoop.CommitMessageTemplate == "" {
ctx.Config.Scoop.CommitMessageTemplate = "Scoop update for {{ .ProjectName }} version {{ .Tag }}"
}
@ -145,6 +141,11 @@ func doPublish(ctx *context.Context, cl client.Client) error {
return err
}
author, err := commitauthor.Get(ctx, scoop.CommitAuthor)
if err != nil {
return err
}
content, err := os.ReadFile(manifest.Path)
if err != nil {
return err
@ -153,7 +154,7 @@ func doPublish(ctx *context.Context, cl client.Client) error {
repo := client.RepoFromRef(scoop.Bucket)
return cl.CreateFile(
ctx,
scoop.CommitAuthor,
author,
repo,
content,
path.Join(scoop.Folder, manifest.Name),