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:
parent
9af798b993
commit
b28a28efb6
37
internal/commitauthor/author.go
Normal file
37
internal/commitauthor/author.go
Normal 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
|
||||
}
|
72
internal/commitauthor/author_test.go
Normal file
72
internal/commitauthor/author_test.go
Normal 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,
|
||||
})
|
||||
})
|
||||
}
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -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),
|
||||
|
Loading…
x
Reference in New Issue
Block a user