Skip to content

Commit

Permalink
fix: build --single-target (#4370)
Browse files Browse the repository at this point in the history
closes #4369
  • Loading branch information
caarlos0 committed Oct 14, 2023
1 parent c72b730 commit 95c990b
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 3 deletions.
21 changes: 19 additions & 2 deletions cmd/build.go
Expand Up @@ -22,6 +22,7 @@ import (
"github.com/goreleaser/goreleaser/pkg/config"
"github.com/goreleaser/goreleaser/pkg/context"
"github.com/spf13/cobra"
"golang.org/x/exp/slices"
)

type buildCmd struct {
Expand Down Expand Up @@ -236,18 +237,34 @@ func setupBuildSingleTarget(ctx *context.Context) {
if len(ctx.Config.Builds) == 0 {
ctx.Config.Builds = append(ctx.Config.Builds, config.Build{})
}
for i := range ctx.Config.Builds {
build := &ctx.Config.Builds[i]
var keep []config.Build
for _, build := range ctx.Config.Builds {
if !shouldBuild(build, goos, goarch) {
continue
}
build.Goos = []string{goos}
build.Goarch = []string{goarch}
build.Goarm = nil
build.Gomips = nil
build.Goamd64 = nil
build.Targets = nil
keep = append(keep, build)
}
ctx.Config.Builds = keep
ctx.Config.UniversalBinaries = nil
}

func shouldBuild(build config.Build, goos, goarch string) bool {
fmt.Println("AQUI", build)
if len(build.Targets) > 0 {
return slices.ContainsFunc(build.Targets, func(e string) bool {
return strings.HasPrefix(e, fmt.Sprintf("%s_%s", goos, goarch))
})
}
return slices.Contains(build.Goos, goos) &&
slices.Contains(build.Goarch, goarch)
}

func setupBuildID(ctx *context.Context, ids []string) error {
if len(ctx.Config.Builds) < 2 {
log.Warn("single build in config, '--id' ignored")
Expand Down
35 changes: 34 additions & 1 deletion cmd/build_test.go
Expand Up @@ -133,7 +133,17 @@ func TestSetupPipeline(t *testing.T) {

func TestBuildFlags(t *testing.T) {
setup := func(opts buildOpts) *context.Context {
ctx := testctx.New()
ctx := testctx.NewWithCfg(config.Project{
Builds: []config.Build{
{
Goos: []string{runtime.GOOS},
Goarch: []string{runtime.GOARCH},
},
{
Targets: []string{"linux_arm64"},
},
},
})
require.NoError(t, setupBuildContext(ctx, opts))
return ctx
}
Expand Down Expand Up @@ -186,6 +196,7 @@ func TestBuildFlags(t *testing.T) {

t.Run("runtime", func(t *testing.T) {
result := setup(opts)
require.Len(t, result.Config.Builds, 1)
require.Equal(t, []string{runtime.GOOS}, result.Config.Builds[0].Goos)
require.Equal(t, []string{runtime.GOARCH}, result.Config.Builds[0].Goarch)
})
Expand All @@ -194,6 +205,7 @@ func TestBuildFlags(t *testing.T) {
t.Setenv("GOOS", "linux")
t.Setenv("GOARCH", "arm64")
result := setup(opts)
require.Len(t, result.Config.Builds, 1)
require.Equal(t, []string{"linux"}, result.Config.Builds[0].Goos)
require.Equal(t, []string{"arm64"}, result.Config.Builds[0].Goarch)
})
Expand Down Expand Up @@ -306,13 +318,34 @@ func TestBuildSingleTargetWithSpecificTargets(t *testing.T) {
t.Setenv("GOOS", "darwin")
t.Setenv("GOARCH", "amd64")
setupBuildSingleTarget(ctx)
require.Len(t, ctx.Config.Builds, 1)
require.Equal(t, config.Build{
Goos: []string{"darwin"},
Goarch: []string{"amd64"},
}, ctx.Config.Builds[0])
require.Nil(t, ctx.Config.UniversalBinaries)
}

func TestBuildSingleTargetNoMatch(t *testing.T) {
ctx := testctx.NewWithCfg(config.Project{
ProjectName: "test",
Builds: []config.Build{
{
Goos: []string{"linux", "darwin"},
Goarch: []string{"amd64", "arm64"},
Goamd64: []string{"v1", "v2"},
Goarm: []string{"6"},
Gomips: []string{"anything"},
},
},
})

t.Setenv("GOOS", "windows")
t.Setenv("GOARCH", "amd64")
setupBuildSingleTarget(ctx)
require.Empty(t, ctx.Config.Builds)
}

func TestBuildSingleTargetRemoveOtherOptions(t *testing.T) {
ctx := testctx.NewWithCfg(config.Project{
ProjectName: "test",
Expand Down

0 comments on commit 95c990b

Please sign in to comment.