diff --git a/internal/pipe/build/build.go b/internal/pipe/build/build.go index 04635f374..b3a01c28d 100644 --- a/internal/pipe/build/build.go +++ b/internal/pipe/build/build.go @@ -198,7 +198,11 @@ func buildOptionsForTarget(ctx *context.Context, build config.Build, target stri name := bin + ext dir := fmt.Sprintf("%s_%s", build.ID, target) - if build.NoUniqueDistDir { + noUnique, err := tmpl.New(ctx).Bool(build.NoUniqueDistDir) + if err != nil { + return nil, err + } + if noUnique { dir = "" } relpath := filepath.Join(ctx.Config.Dist, dir, name) diff --git a/internal/pipe/build/build_test.go b/internal/pipe/build/build_test.go index 208024f3c..4d11b9671 100644 --- a/internal/pipe/build/build_test.go +++ b/internal/pipe/build/build_test.go @@ -623,18 +623,37 @@ func TestBuildOptionsForTarget(t *testing.T) { }, }, { - name: "overriding dist path", + name: "no unique dist path evals true", build: config.Build{ ID: "testid", - Binary: "distpath/{{.Os}}/{{.Arch}}/testbinary_{{.Os}}_{{.Arch}}", + Binary: "distpath/{{.Os}}/{{.Arch}}/testbinary", Targets: []string{ "linux_amd64", }, - NoUniqueDistDir: true, + NoUniqueDistDir: `{{ printf "true"}}`, }, expectedOpts: &api.Options{ - Name: "distpath/linux/amd64/testbinary_linux_amd64", - Path: filepath.Join(tmpDir, "distpath", "linux", "amd64", "testbinary_linux_amd64"), + Name: "distpath/linux/amd64/testbinary", + Path: filepath.Join(tmpDir, "distpath", "linux", "amd64", "testbinary"), + Target: "linux_amd64_v1", + Goos: "linux", + Goarch: "amd64", + Goamd64: "v1", + }, + }, + { + name: "no unique dist path evals false", + build: config.Build{ + ID: "testid", + Binary: "testbinary", + Targets: []string{ + "linux_amd64", + }, + NoUniqueDistDir: `{{ printf "false"}}`, + }, + expectedOpts: &api.Options{ + Name: "testbinary", + Path: filepath.Join(tmpDir, "testid_linux_amd64_v1", "testbinary"), Target: "linux_amd64_v1", Goos: "linux", Goarch: "amd64", diff --git a/pkg/config/config.go b/pkg/config/config.go index b4bb776d2..3bdf6db57 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -504,7 +504,7 @@ type Build struct { Skip string `yaml:"skip,omitempty" json:"skip,omitempty" jsonschema:"oneof_type=string;boolean"` GoBinary string `yaml:"gobinary,omitempty" json:"gobinary,omitempty"` Command string `yaml:"command,omitempty" json:"command,omitempty"` - NoUniqueDistDir bool `yaml:"no_unique_dist_dir,omitempty" json:"no_unique_dist_dir,omitempty"` + NoUniqueDistDir string `yaml:"no_unique_dist_dir,omitempty" json:"no_unique_dist_dir,omitempty" jsonschema:"oneof_type:string;boolean"` NoMainCheck bool `yaml:"no_main_check,omitempty" json:"no_main_check,omitempty"` UnproxiedMain string `yaml:"-" json:"-"` // used by gomod.proxy UnproxiedDir string `yaml:"-" json:"-"` // used by gomod.proxy diff --git a/www/docs/customization/builds.md b/www/docs/customization/builds.md index 8d496ddc5..7bc5c689b 100644 --- a/www/docs/customization/builds.md +++ b/www/docs/customization/builds.md @@ -207,6 +207,8 @@ builds: # created, you can set this property. # If you do, you are responsible for keeping different builds from # overriding each other. + # + # Templates: allowed (since v2.3). no_unique_dist_dir: true # By default, GoReleaser will check if the main filepath has a main