mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-04-13 11:50:34 +02:00
parent
c72b730258
commit
95c990b166
21
cmd/build.go
21
cmd/build.go
@ -22,6 +22,7 @@ import (
|
|||||||
"github.com/goreleaser/goreleaser/pkg/config"
|
"github.com/goreleaser/goreleaser/pkg/config"
|
||||||
"github.com/goreleaser/goreleaser/pkg/context"
|
"github.com/goreleaser/goreleaser/pkg/context"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
"golang.org/x/exp/slices"
|
||||||
)
|
)
|
||||||
|
|
||||||
type buildCmd struct {
|
type buildCmd struct {
|
||||||
@ -236,18 +237,34 @@ func setupBuildSingleTarget(ctx *context.Context) {
|
|||||||
if len(ctx.Config.Builds) == 0 {
|
if len(ctx.Config.Builds) == 0 {
|
||||||
ctx.Config.Builds = append(ctx.Config.Builds, config.Build{})
|
ctx.Config.Builds = append(ctx.Config.Builds, config.Build{})
|
||||||
}
|
}
|
||||||
for i := range ctx.Config.Builds {
|
var keep []config.Build
|
||||||
build := &ctx.Config.Builds[i]
|
for _, build := range ctx.Config.Builds {
|
||||||
|
if !shouldBuild(build, goos, goarch) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
build.Goos = []string{goos}
|
build.Goos = []string{goos}
|
||||||
build.Goarch = []string{goarch}
|
build.Goarch = []string{goarch}
|
||||||
build.Goarm = nil
|
build.Goarm = nil
|
||||||
build.Gomips = nil
|
build.Gomips = nil
|
||||||
build.Goamd64 = nil
|
build.Goamd64 = nil
|
||||||
build.Targets = nil
|
build.Targets = nil
|
||||||
|
keep = append(keep, build)
|
||||||
}
|
}
|
||||||
|
ctx.Config.Builds = keep
|
||||||
ctx.Config.UniversalBinaries = nil
|
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 {
|
func setupBuildID(ctx *context.Context, ids []string) error {
|
||||||
if len(ctx.Config.Builds) < 2 {
|
if len(ctx.Config.Builds) < 2 {
|
||||||
log.Warn("single build in config, '--id' ignored")
|
log.Warn("single build in config, '--id' ignored")
|
||||||
|
@ -133,7 +133,17 @@ func TestSetupPipeline(t *testing.T) {
|
|||||||
|
|
||||||
func TestBuildFlags(t *testing.T) {
|
func TestBuildFlags(t *testing.T) {
|
||||||
setup := func(opts buildOpts) *context.Context {
|
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))
|
require.NoError(t, setupBuildContext(ctx, opts))
|
||||||
return ctx
|
return ctx
|
||||||
}
|
}
|
||||||
@ -186,6 +196,7 @@ func TestBuildFlags(t *testing.T) {
|
|||||||
|
|
||||||
t.Run("runtime", func(t *testing.T) {
|
t.Run("runtime", func(t *testing.T) {
|
||||||
result := setup(opts)
|
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.GOOS}, result.Config.Builds[0].Goos)
|
||||||
require.Equal(t, []string{runtime.GOARCH}, result.Config.Builds[0].Goarch)
|
require.Equal(t, []string{runtime.GOARCH}, result.Config.Builds[0].Goarch)
|
||||||
})
|
})
|
||||||
@ -194,6 +205,7 @@ func TestBuildFlags(t *testing.T) {
|
|||||||
t.Setenv("GOOS", "linux")
|
t.Setenv("GOOS", "linux")
|
||||||
t.Setenv("GOARCH", "arm64")
|
t.Setenv("GOARCH", "arm64")
|
||||||
result := setup(opts)
|
result := setup(opts)
|
||||||
|
require.Len(t, result.Config.Builds, 1)
|
||||||
require.Equal(t, []string{"linux"}, result.Config.Builds[0].Goos)
|
require.Equal(t, []string{"linux"}, result.Config.Builds[0].Goos)
|
||||||
require.Equal(t, []string{"arm64"}, result.Config.Builds[0].Goarch)
|
require.Equal(t, []string{"arm64"}, result.Config.Builds[0].Goarch)
|
||||||
})
|
})
|
||||||
@ -306,6 +318,7 @@ func TestBuildSingleTargetWithSpecificTargets(t *testing.T) {
|
|||||||
t.Setenv("GOOS", "darwin")
|
t.Setenv("GOOS", "darwin")
|
||||||
t.Setenv("GOARCH", "amd64")
|
t.Setenv("GOARCH", "amd64")
|
||||||
setupBuildSingleTarget(ctx)
|
setupBuildSingleTarget(ctx)
|
||||||
|
require.Len(t, ctx.Config.Builds, 1)
|
||||||
require.Equal(t, config.Build{
|
require.Equal(t, config.Build{
|
||||||
Goos: []string{"darwin"},
|
Goos: []string{"darwin"},
|
||||||
Goarch: []string{"amd64"},
|
Goarch: []string{"amd64"},
|
||||||
@ -313,6 +326,26 @@ func TestBuildSingleTargetWithSpecificTargets(t *testing.T) {
|
|||||||
require.Nil(t, ctx.Config.UniversalBinaries)
|
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) {
|
func TestBuildSingleTargetRemoveOtherOptions(t *testing.T) {
|
||||||
ctx := testctx.NewWithCfg(config.Project{
|
ctx := testctx.NewWithCfg(config.Project{
|
||||||
ProjectName: "test",
|
ProjectName: "test",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user