mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-06-02 23:27:44 +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/apex/log"
|
||||||
"github.com/goreleaser/goreleaser/internal/artifact"
|
"github.com/goreleaser/goreleaser/internal/artifact"
|
||||||
"github.com/goreleaser/goreleaser/internal/client"
|
"github.com/goreleaser/goreleaser/internal/client"
|
||||||
|
"github.com/goreleaser/goreleaser/internal/commitauthor"
|
||||||
"github.com/goreleaser/goreleaser/internal/pipe"
|
"github.com/goreleaser/goreleaser/internal/pipe"
|
||||||
"github.com/goreleaser/goreleaser/internal/tmpl"
|
"github.com/goreleaser/goreleaser/internal/tmpl"
|
||||||
"github.com/goreleaser/goreleaser/pkg/config"
|
"github.com/goreleaser/goreleaser/pkg/config"
|
||||||
@ -42,12 +43,8 @@ func (Pipe) Default(ctx *context.Context) error {
|
|||||||
for i := range ctx.Config.Brews {
|
for i := range ctx.Config.Brews {
|
||||||
brew := &ctx.Config.Brews[i]
|
brew := &ctx.Config.Brews[i]
|
||||||
|
|
||||||
if brew.CommitAuthor.Name == "" {
|
brew.CommitAuthor = commitauthor.Default(brew.CommitAuthor)
|
||||||
brew.CommitAuthor.Name = "goreleaserbot"
|
|
||||||
}
|
|
||||||
if brew.CommitAuthor.Email == "" {
|
|
||||||
brew.CommitAuthor.Email = "goreleaser@carlosbecker.com"
|
|
||||||
}
|
|
||||||
if brew.CommitMessageTemplate == "" {
|
if brew.CommitMessageTemplate == "" {
|
||||||
brew.CommitMessageTemplate = "Brew formula update for {{ .ProjectName }} version {{ .Tag }}"
|
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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
author, err := commitauthor.Get(ctx, brew.CommitAuthor)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
content, err := os.ReadFile(formula.Path)
|
content, err := os.ReadFile(formula.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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 {
|
func doRun(ctx *context.Context, brew config.Homebrew, cl client.Client) error {
|
||||||
|
@ -14,6 +14,7 @@ import (
|
|||||||
"github.com/apex/log"
|
"github.com/apex/log"
|
||||||
"github.com/goreleaser/goreleaser/internal/artifact"
|
"github.com/goreleaser/goreleaser/internal/artifact"
|
||||||
"github.com/goreleaser/goreleaser/internal/client"
|
"github.com/goreleaser/goreleaser/internal/client"
|
||||||
|
"github.com/goreleaser/goreleaser/internal/commitauthor"
|
||||||
"github.com/goreleaser/goreleaser/internal/pipe"
|
"github.com/goreleaser/goreleaser/internal/pipe"
|
||||||
"github.com/goreleaser/goreleaser/internal/tmpl"
|
"github.com/goreleaser/goreleaser/internal/tmpl"
|
||||||
"github.com/goreleaser/goreleaser/pkg/config"
|
"github.com/goreleaser/goreleaser/pkg/config"
|
||||||
@ -37,12 +38,7 @@ func (Pipe) Default(ctx *context.Context) error {
|
|||||||
for i := range ctx.Config.Rigs {
|
for i := range ctx.Config.Rigs {
|
||||||
goFish := &ctx.Config.Rigs[i]
|
goFish := &ctx.Config.Rigs[i]
|
||||||
|
|
||||||
if goFish.CommitAuthor.Name == "" {
|
goFish.CommitAuthor = commitauthor.Default(goFish.CommitAuthor)
|
||||||
goFish.CommitAuthor.Name = "goreleaserbot"
|
|
||||||
}
|
|
||||||
if goFish.CommitAuthor.Email == "" {
|
|
||||||
goFish.CommitAuthor.Email = "goreleaser@carlosbecker.com"
|
|
||||||
}
|
|
||||||
if goFish.CommitMessageTemplate == "" {
|
if goFish.CommitMessageTemplate == "" {
|
||||||
goFish.CommitMessageTemplate = "GoFish fish food update for {{ .ProjectName }} version {{ .Tag }}"
|
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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
author, err := commitauthor.Get(ctx, rig.CommitAuthor)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
content, err := os.ReadFile(food.Path)
|
content, err := os.ReadFile(food.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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 {
|
func buildFoodPath(folder, filename string) string {
|
||||||
|
@ -16,6 +16,7 @@ import (
|
|||||||
"github.com/apex/log"
|
"github.com/apex/log"
|
||||||
"github.com/goreleaser/goreleaser/internal/artifact"
|
"github.com/goreleaser/goreleaser/internal/artifact"
|
||||||
"github.com/goreleaser/goreleaser/internal/client"
|
"github.com/goreleaser/goreleaser/internal/client"
|
||||||
|
"github.com/goreleaser/goreleaser/internal/commitauthor"
|
||||||
"github.com/goreleaser/goreleaser/internal/pipe"
|
"github.com/goreleaser/goreleaser/internal/pipe"
|
||||||
"github.com/goreleaser/goreleaser/internal/tmpl"
|
"github.com/goreleaser/goreleaser/internal/tmpl"
|
||||||
"github.com/goreleaser/goreleaser/pkg/config"
|
"github.com/goreleaser/goreleaser/pkg/config"
|
||||||
@ -42,12 +43,7 @@ func (Pipe) Default(ctx *context.Context) error {
|
|||||||
for i := range ctx.Config.Krews {
|
for i := range ctx.Config.Krews {
|
||||||
krew := &ctx.Config.Krews[i]
|
krew := &ctx.Config.Krews[i]
|
||||||
|
|
||||||
if krew.CommitAuthor.Name == "" {
|
krew.CommitAuthor = commitauthor.Default(krew.CommitAuthor)
|
||||||
krew.CommitAuthor.Name = "goreleaserbot"
|
|
||||||
}
|
|
||||||
if krew.CommitAuthor.Email == "" {
|
|
||||||
krew.CommitAuthor.Email = "goreleaser@carlosbecker.com"
|
|
||||||
}
|
|
||||||
if krew.CommitMessageTemplate == "" {
|
if krew.CommitMessageTemplate == "" {
|
||||||
krew.CommitMessageTemplate = "Krew manifest update for {{ .ProjectName }} version {{ .Tag }}"
|
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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
author, err := commitauthor.Get(ctx, cfg.CommitAuthor)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
content, err := os.ReadFile(manifest.Path)
|
content, err := os.ReadFile(manifest.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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 {
|
func buildManifestPath(folder, filename string) string {
|
||||||
|
@ -14,6 +14,7 @@ import (
|
|||||||
"github.com/apex/log"
|
"github.com/apex/log"
|
||||||
"github.com/goreleaser/goreleaser/internal/artifact"
|
"github.com/goreleaser/goreleaser/internal/artifact"
|
||||||
"github.com/goreleaser/goreleaser/internal/client"
|
"github.com/goreleaser/goreleaser/internal/client"
|
||||||
|
"github.com/goreleaser/goreleaser/internal/commitauthor"
|
||||||
"github.com/goreleaser/goreleaser/internal/pipe"
|
"github.com/goreleaser/goreleaser/internal/pipe"
|
||||||
"github.com/goreleaser/goreleaser/internal/tmpl"
|
"github.com/goreleaser/goreleaser/internal/tmpl"
|
||||||
"github.com/goreleaser/goreleaser/pkg/config"
|
"github.com/goreleaser/goreleaser/pkg/config"
|
||||||
@ -54,12 +55,7 @@ func (Pipe) Default(ctx *context.Context) error {
|
|||||||
if ctx.Config.Scoop.Name == "" {
|
if ctx.Config.Scoop.Name == "" {
|
||||||
ctx.Config.Scoop.Name = ctx.Config.ProjectName
|
ctx.Config.Scoop.Name = ctx.Config.ProjectName
|
||||||
}
|
}
|
||||||
if ctx.Config.Scoop.CommitAuthor.Name == "" {
|
ctx.Config.Scoop.CommitAuthor = commitauthor.Default(ctx.Config.Scoop.CommitAuthor)
|
||||||
ctx.Config.Scoop.CommitAuthor.Name = "goreleaserbot"
|
|
||||||
}
|
|
||||||
if ctx.Config.Scoop.CommitAuthor.Email == "" {
|
|
||||||
ctx.Config.Scoop.CommitAuthor.Email = "goreleaser@carlosbecker.com"
|
|
||||||
}
|
|
||||||
if ctx.Config.Scoop.CommitMessageTemplate == "" {
|
if ctx.Config.Scoop.CommitMessageTemplate == "" {
|
||||||
ctx.Config.Scoop.CommitMessageTemplate = "Scoop update for {{ .ProjectName }} version {{ .Tag }}"
|
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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
author, err := commitauthor.Get(ctx, scoop.CommitAuthor)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
content, err := os.ReadFile(manifest.Path)
|
content, err := os.ReadFile(manifest.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -153,7 +154,7 @@ func doPublish(ctx *context.Context, cl client.Client) error {
|
|||||||
repo := client.RepoFromRef(scoop.Bucket)
|
repo := client.RepoFromRef(scoop.Bucket)
|
||||||
return cl.CreateFile(
|
return cl.CreateFile(
|
||||||
ctx,
|
ctx,
|
||||||
scoop.CommitAuthor,
|
author,
|
||||||
repo,
|
repo,
|
||||||
content,
|
content,
|
||||||
path.Join(scoop.Folder, manifest.Name),
|
path.Join(scoop.Folder, manifest.Name),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user