From 0ea3e0f57289822085e5c0b554e2b430a40b832c Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Thu, 15 Sep 2022 22:17:40 -0300 Subject: [PATCH] fix: build --single-target when using specific targets (#3381) When using specific targets in the config, single target becomes ineffective. This should fix it. This also removes other build options like gomips, goarm, goamd64, etc, as go will infer them from the current OS. In theory we should one day support all the GO* flags go build supports. --- cmd/build.go | 4 ++++ cmd/build_test.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/cmd/build.go b/cmd/build.go index dfbdd6afa5f..ab4ec1ff0d3 100644 --- a/cmd/build.go +++ b/cmd/build.go @@ -165,6 +165,10 @@ func setupBuildSingleTarget(ctx *context.Context) { build := &ctx.Config.Builds[i] build.Goos = []string{goos} build.Goarch = []string{goarch} + build.Goarm = nil + build.Gomips = nil + build.Goamd64 = nil + build.Targets = nil } } diff --git a/cmd/build_test.go b/cmd/build_test.go index 396a2ed3956..f7cc1970036 100644 --- a/cmd/build_test.go +++ b/cmd/build_test.go @@ -278,3 +278,49 @@ func TestBuildFlags(t *testing.T) { }) }) } + +func TestBuildSingleTargetWithSpecificTargets(t *testing.T) { + ctx := context.New(config.Project{ + ProjectName: "test", + Builds: []config.Build{ + { + Targets: []string{ + "linux_amd64_v1", + "darwin_arm64", + "darwin_amd64_v1", + }, + }, + }, + }) + + t.Setenv("GOOS", "linux") + t.Setenv("GOARCH", "amd64") + setupBuildSingleTarget(ctx) + require.Equal(t, config.Build{ + Goos: []string{"linux"}, + Goarch: []string{"amd64"}, + }, ctx.Config.Builds[0]) +} + +func TestBuildSingleTargetRemoveOtherOptions(t *testing.T) { + ctx := context.New(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", "linux") + t.Setenv("GOARCH", "amd64") + setupBuildSingleTarget(ctx) + require.Equal(t, config.Build{ + Goos: []string{"linux"}, + Goarch: []string{"amd64"}, + }, ctx.Config.Builds[0]) +}