From 150ced1da8b2c14cecd92083ee1eca41bb33ee15 Mon Sep 17 00:00:00 2001 From: Carlos A Becker Date: Thu, 15 Sep 2022 15:27:20 -0300 Subject: [PATCH] fix: build --single-target when using specific targets 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]) +}