mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-03-17 20:47:50 +02:00
fix: prevent folder collisions in builds and universal binaries (#3063)
- on universal binaries, use the build id instead of the binary name to create the folder in the dist folder - on builds, default the id the to the binary name instead of project name. The binary name already defaults to the project id if empty, so this should only prevent having to specify the id + binary name in some cases. closes #3061 Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
This commit is contained in:
parent
30630bfc7f
commit
5aeb8ace61
@ -73,7 +73,7 @@ func buildWithDefaults(ctx *context.Context, build config.Build) (config.Build,
|
||||
build.Binary = ctx.Config.ProjectName
|
||||
}
|
||||
if build.ID == "" {
|
||||
build.ID = ctx.Config.ProjectName
|
||||
build.ID = build.Binary
|
||||
}
|
||||
for k, v := range build.Env {
|
||||
build.Env[k] = os.ExpandEnv(v)
|
||||
|
@ -288,6 +288,7 @@ func TestDefaultBuildID(t *testing.T) {
|
||||
Builds: []config.Build{
|
||||
{
|
||||
Binary: "{{.Env.FOO}}",
|
||||
ID: "bar",
|
||||
},
|
||||
{
|
||||
Binary: "bar",
|
||||
@ -295,9 +296,11 @@ func TestDefaultBuildID(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
require.EqualError(t, Pipe{}.Default(ctx), "found 2 builds with the ID 'foo', please fix your config")
|
||||
build := ctx.Config.Builds[0]
|
||||
require.Equal(t, ctx.Config.ProjectName, build.ID)
|
||||
require.EqualError(t, Pipe{}.Default(ctx), "found 2 builds with the ID 'bar', please fix your config")
|
||||
build1 := ctx.Config.Builds[0].ID
|
||||
build2 := ctx.Config.Builds[1].ID
|
||||
require.Equal(t, build1, build2)
|
||||
require.Equal(t, "bar", build2)
|
||||
}
|
||||
|
||||
func TestSeveralBuildsWithTheSameID(t *testing.T) {
|
||||
|
@ -140,7 +140,7 @@ func makeUniversalBinary(ctx *context.Context, opts *build.Options, unibin confi
|
||||
}
|
||||
opts.Name = name
|
||||
|
||||
path := filepath.Join(ctx.Config.Dist, name+"_darwin_all", name)
|
||||
path := filepath.Join(ctx.Config.Dist, unibin.ID+"_darwin_all", name)
|
||||
opts.Path = path
|
||||
if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
|
||||
return err
|
||||
@ -151,7 +151,9 @@ func makeUniversalBinary(ctx *context.Context, opts *build.Options, unibin confi
|
||||
return pipe.Skip(fmt.Sprintf("no darwin binaries found with id %q", unibin.ID))
|
||||
}
|
||||
|
||||
log.WithField("binary", path).Infof("creating from %d binaries", len(binaries))
|
||||
log.WithField("id", unibin.ID).
|
||||
WithField("binary", path).
|
||||
Infof("creating from %d binaries", len(binaries))
|
||||
|
||||
var inputs []input
|
||||
offset := int64(align)
|
||||
|
@ -353,7 +353,7 @@ func TestRun(t *testing.T) {
|
||||
func checkUniversalBinary(tb testing.TB, unibin *artifact.Artifact) {
|
||||
tb.Helper()
|
||||
|
||||
require.True(tb, strings.HasSuffix(unibin.Path, "foo_darwin_all/foo"))
|
||||
require.True(tb, strings.HasSuffix(unibin.Path, unibin.ID()+"_darwin_all/foo"))
|
||||
f, err := macho.OpenFat(unibin.Path)
|
||||
require.NoError(tb, err)
|
||||
require.Len(tb, f.Arches, 2)
|
||||
|
@ -13,7 +13,7 @@ builds:
|
||||
# You can have multiple builds defined as a yaml list
|
||||
-
|
||||
# ID of the build.
|
||||
# Defaults to the project name.
|
||||
# Defaults to the binary name.
|
||||
id: "my-build"
|
||||
|
||||
# Path to project's (sub)directory containing Go code.
|
||||
|
Loading…
x
Reference in New Issue
Block a user