Repository: goreleaser/goreleaser
Pull request #1467 (2020-04-24 17:51:04)

feat(scoop): provide config option to change commit message
Without this change, users unable to control the resulting commit message of the
scoop update.  In some environments this may present an issue with commit
linters that require a specific commit message format in order to build proper
change logs and make decisions.  Here we include a Scoop config option to use a
format string provided by the user during the commit.

resolves: https://github.com/goreleaser/goreleaser/issues/1468

zlesnr: Thanks for the pointers.  I've updated it a bit to use the templating system that I missed at first.  Looks pretty neat.
zlesnr: Not sure about that failing test.  Master seems to be failing for the same reason.
caarlos0: yeah I'll take a look, thanks!

Patch:
diff --git a/internal/pipe/scoop/scoop.go b/internal/pipe/scoop/scoop.go
index 387ac9e1..35f26c72 100644
--- a/internal/pipe/scoop/scoop.go
+++ b/internal/pipe/scoop/scoop.go
@@ -54,6 +54,10 @@ func (Pipe) Default(ctx *context.Context) error {
 		ctx.Config.Scoop.CommitAuthor.Email = "goreleaser@carlosbecker.com"
 	}
 
+	if ctx.Config.Scoop.CommitMessageTemplate == "" {
+		ctx.Config.Scoop.CommitMessageTemplate = "Scoop update for {{ .ProjectName }} version {{ .Tag }}"
+	}
+
 	return nil
 }
 
@@ -104,13 +108,20 @@ func doRun(ctx *context.Context, client client.Client) error {
 	if ctx.Config.Release.Disable {
 		return pipe.Skip("release is disabled")
 	}
+
+	commitMessage, err := tmpl.New(ctx).
+		Apply(ctx.Config.Scoop.CommitMessageTemplate)
+	if err != nil {
+		return err
+	}
+
 	return client.CreateFile(
 		ctx,
 		ctx.Config.Scoop.CommitAuthor,
 		ctx.Config.Scoop.Bucket,
 		content.Bytes(),
 		path,
-		fmt.Sprintf("Scoop update for %s version %s", ctx.Config.ProjectName, ctx.Git.CurrentTag),
+		commitMessage,
 	)
 }
 
diff --git a/pkg/config/config.go b/pkg/config/config.go
index 53715ef4..8e937c10 100644
--- a/pkg/config/config.go
+++ b/pkg/config/config.go
@@ -73,15 +73,16 @@ type Homebrew struct {
 
 // Scoop contains the scoop.sh section
 type Scoop struct {
-	Name         string       `yaml:",omitempty"`
-	Bucket       Repo         `yaml:",omitempty"`
-	CommitAuthor CommitAuthor `yaml:"commit_author,omitempty"`
-	Homepage     string       `yaml:",omitempty"`
-	Description  string       `yaml:",omitempty"`
-	License      string       `yaml:",omitempty"`
-	URLTemplate  string       `yaml:"url_template,omitempty"`
-	Persist      []string     `yaml:"persist,omitempty"`
-	SkipUpload   string       `yaml:"skip_upload,omitempty"`
+	Name                  string       `yaml:",omitempty"`
+	Bucket                Repo         `yaml:",omitempty"`
+	CommitAuthor          CommitAuthor `yaml:"commit_author,omitempty"`
+	CommitMessageTemplate string       `yaml:"commit_msg_template,omitempty"`
+	Homepage              string       `yaml:",omitempty"`
+	Description           string       `yaml:",omitempty"`
+	License               string       `yaml:",omitempty"`
+	URLTemplate           string       `yaml:"url_template,omitempty"`
+	Persist               []string     `yaml:"persist,omitempty"`
+	SkipUpload            string       `yaml:"skip_upload,omitempty"`
 }
 
 // CommitAuthor is the author of a Git commit
diff --git a/www/content/scoop.md b/www/content/scoop.md
index 401bfbe0..e443e00e 100644
--- a/www/content/scoop.md
+++ b/www/content/scoop.md
@@ -31,6 +31,9 @@ scoop:
     name: goreleaserbot
     email: goreleaser@carlosbecker.com
 
+  # The project name and current git tag are used in the format string.
+  commit_msg_template: "Scoop update for {{ .ProjectName }} version {{ .Tag }}"
+
   # Your app's homepage.
   # Default is empty.
   homepage: "https://example.com/"


Test patch:
diff --git a/internal/pipe/scoop/scoop_test.go b/internal/pipe/scoop/scoop_test.go
index 6c901a88..7e4d6275 100644
--- a/internal/pipe/scoop/scoop_test.go
+++ b/internal/pipe/scoop/scoop_test.go
@@ -57,6 +57,7 @@ func TestDefault(t *testing.T) {
 	assert.Equal(t, ctx.Config.ProjectName, ctx.Config.Scoop.Name)
 	assert.NotEmpty(t, ctx.Config.Scoop.CommitAuthor.Name)
 	assert.NotEmpty(t, ctx.Config.Scoop.CommitAuthor.Email)
+	assert.NotEmpty(t, ctx.Config.Scoop.CommitMessageTemplate)
 }
 
 func Test_doRun(t *testing.T) {
@@ -736,6 +737,7 @@ func Test_doRun(t *testing.T) {
 				ctx.Artifacts.Add(a)
 			}
 			require.NoError(t, Pipe{}.Default(ctx))
+
 			tt.assertError(t, doRun(ctx, tt.args.client))
 		})
 	}
@@ -819,10 +821,11 @@ func Test_buildManifest(t *testing.T) {
 							Owner: "test",
 							Name:  "test",
 						},
-						Description: "A run pipe test formula",
-						Homepage:    "https://github.com/goreleaser",
-						URLTemplate: "http://github.mycompany.com/foo/bar/{{ .Tag }}/{{ .ArtifactName }}",
-						Persist:     []string{"data.cfg", "etc"},
+						Description:           "A run pipe test formula",
+						Homepage:              "https://github.com/goreleaser",
+						URLTemplate:           "http://github.mycompany.com/foo/bar/{{ .Tag }}/{{ .ArtifactName }}",
+						CommitMessageTemplate: "chore(scoop): update {{ .ProjectName }} version {{ .Tag }}",
+						Persist:               []string{"data.cfg", "etc"},
 					},
 				},
 			},
@@ -859,10 +862,11 @@ func Test_buildManifest(t *testing.T) {
 							Owner: "test",
 							Name:  "test",
 						},
-						Description: "A run pipe test formula",
-						Homepage:    "https://gitlab.com/goreleaser",
-						URLTemplate: "http://gitlab.mycompany.com/foo/bar/uploads/{{ .ArtifactUploadHash }}/{{ .ArtifactName }}",
-						Persist:     []string{"data.cfg", "etc"},
+						Description:           "A run pipe test formula",
+						Homepage:              "https://gitlab.com/goreleaser",
+						URLTemplate:           "http://gitlab.mycompany.com/foo/bar/uploads/{{ .ArtifactUploadHash }}/{{ .ArtifactName }}",
+						CommitMessageTemplate: "chore(scoop): update {{ .ProjectName }} version {{ .Tag }}",
+						Persist:               []string{"data.cfg", "etc"},
 					},
 				},
 			},
@@ -958,10 +962,11 @@ func TestWrapInDirectory(t *testing.T) {
 					Owner: "test",
 					Name:  "test",
 				},
-				Description: "A run pipe test formula",
-				Homepage:    "https://gitlab.com/goreleaser",
-				URLTemplate: "http://gitlab.mycompany.com/foo/bar/uploads/{{ .ArtifactUploadHash }}/{{ .ArtifactName }}",
-				Persist:     []string{"data.cfg", "etc"},
+				Description:           "A run pipe test formula",
+				Homepage:              "https://gitlab.com/goreleaser",
+				URLTemplate:           "http://gitlab.mycompany.com/foo/bar/uploads/{{ .ArtifactUploadHash }}/{{ .ArtifactName }}",
+				CommitMessageTemplate: "chore(scoop): update {{ .ProjectName }} version {{ .Tag }}",
+				Persist:               []string{"data.cfg", "etc"},
 			},
 		},
 	}