1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-07-03 00:57:43 +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
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,
})
})
}