diff --git a/internal/pipe/build/build.go b/internal/pipe/build/build.go index 9d755452a1a..f286908158f 100644 --- a/internal/pipe/build/build.go +++ b/internal/pipe/build/build.go @@ -195,12 +195,13 @@ func buildOptionsForTarget(ctx *context.Context, build config.Build, target stri Goamd64: goamd64, } - binary, err := tmpl.New(ctx).WithBuildOptions(buildOpts).Apply(build.Binary) - if err != nil { + if err := tmpl.New(ctx).WithBuildOptions(buildOpts).ApplyAll( + &build.Binary, + &build.GoBinary, + ); err != nil { return nil, err } - build.Binary = binary name := build.Binary + ext dir := fmt.Sprintf("%s_%s", build.ID, target) if build.NoUniqueDistDir { diff --git a/internal/pipe/build/build_test.go b/internal/pipe/build/build_test.go index dab306dad56..f1e90f0a05a 100644 --- a/internal/pipe/build/build_test.go +++ b/internal/pipe/build/build_test.go @@ -570,6 +570,24 @@ func TestPipeOnBuild_hooksRunPerTarget(t *testing.T) { require.FileExists(t, filepath.Join(tmpDir, "post-hook-windows_amd64")) } +func TestPipeOnBuild_invalidGoBinary(t *testing.T) { + build := config.Build{ + Builder: "fake", + GoBinary: "testing.v{{.XYZ}}", + Targets: []string{ + "linux_amd64", + }, + } + ctx := testctx.NewWithCfg(config.Project{ + Builds: []config.Build{ + build, + }, + }) + g := semerrgroup.New(ctx.Parallelism) + runPipeOnBuild(ctx, g, build) + testlib.RequireTemplateError(t, g.Wait()) +} + func TestPipeOnBuild_invalidBinaryTpl(t *testing.T) { build := config.Build{ Builder: "fake", diff --git a/www/docs/customization/builds.md b/www/docs/customization/builds.md index 472f70a9cd6..1db34758bc5 100644 --- a/www/docs/customization/builds.md +++ b/www/docs/customization/builds.md @@ -169,6 +169,7 @@ builds: # It is safe to ignore this option in most cases. # # Default is "go" + # Templates: allowed (since v1.23). gobinary: "go1.13.4" # Sets the command to run to build.