Skip to content

Commit

Permalink
fix: build env overrides (#3232)
Browse files Browse the repository at this point in the history
* fix: build env overrides

Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>

* fix: review

Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>

* test: fix

Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
  • Loading branch information
caarlos0 committed Jul 8, 2022
1 parent 02a3486 commit de3f381
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 15 deletions.
19 changes: 11 additions & 8 deletions internal/builders/golang/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,12 @@ func (*Builder) Build(ctx *context.Context, build config.Build, options api.Opti
},
}

env := append(ctx.Env.Strings(), build.Env...)
details, err := withOverrides(ctx, build, options)
if err != nil {
return err
}

env := append(ctx.Env.Strings(), details.Env...)
env = append(
env,
"GOOS="+options.Goos,
Expand All @@ -162,7 +167,7 @@ func (*Builder) Build(ctx *context.Context, build config.Build, options api.Opti
"GOAMD64="+options.Goamd64,
)

cmd, err := buildGoBuildLine(ctx, build, options, artifact, env)
cmd, err := buildGoBuildLine(ctx, build, details, options, artifact, env)
if err != nil {
return err
}
Expand Down Expand Up @@ -206,25 +211,23 @@ func withOverrides(ctx *context.Context, build config.Build, options api.Options
Flags: build.BuildDetails.Flags,
Asmflags: build.BuildDetails.Asmflags,
Gcflags: build.BuildDetails.Gcflags,
Env: build.BuildDetails.Env,
}
if err := mergo.Merge(&dets, o.BuildDetails, mergo.WithOverride); err != nil {
return build.BuildDetails, err
}

dets.Env = context.ToEnv(append(build.Env, o.BuildDetails.Env...)).Strings()
log.WithField("details", dets).Infof("overridden build details for %s", optsTarget)
return dets, nil
}
}

return build.BuildDetails, nil
}

func buildGoBuildLine(ctx *context.Context, build config.Build, options api.Options, artifact *artifact.Artifact, env []string) ([]string, error) {
func buildGoBuildLine(ctx *context.Context, build config.Build, details config.BuildDetails, options api.Options, artifact *artifact.Artifact, env []string) ([]string, error) {
cmd := []string{build.GoBinary, build.Command}

details, err := withOverrides(ctx, build, options)
if err != nil {
return cmd, err
}
flags, err := processFlags(ctx, artifact, env, details.Flags, "")
if err != nil {
return cmd, err
Expand Down
30 changes: 23 additions & 7 deletions internal/builders/golang/build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1047,18 +1047,30 @@ func TestBuildModTimestamp(t *testing.T) {
func TestBuildGoBuildLine(t *testing.T) {
requireEqualCmd := func(tb testing.TB, build config.Build, expected []string) {
tb.Helper()
config := config.Project{
cfg := config.Project{
Builds: []config.Build{build},
}
ctx := context.New(config)
ctx := context.New(cfg)
ctx.Version = "1.2.3"
ctx.Git.Commit = "aaa"

line, err := buildGoBuildLine(ctx, config.Builds[0], api.Options{
Path: config.Builds[0].Binary,
options := api.Options{
Path: cfg.Builds[0].Binary,
Goos: "linux",
Goarch: "amd64",
}, &artifact.Artifact{}, []string{})
}

dets, err := withOverrides(ctx, build, options)
require.NoError(t, err)

line, err := buildGoBuildLine(
ctx,
build,
dets,
options,
&artifact.Artifact{},
[]string{},
)
require.NoError(t, err)
require.Equal(t, expected, line)
}
Expand Down Expand Up @@ -1181,7 +1193,7 @@ func TestOverrides(t *testing.T) {
config.Build{
BuildDetails: config.BuildDetails{
Ldflags: []string{"original"},
Env: []string{"FOO=bar"},
Env: []string{"BAR=foo", "FOO=bar"},
},
BuildDetailsOverrides: []config.BuildDetailsOverride{
{
Expand All @@ -1201,7 +1213,7 @@ func TestOverrides(t *testing.T) {
require.NoError(t, err)
require.Equal(t, dets, config.BuildDetails{
Ldflags: []string{"overridden"},
Env: []string{"FOO=overridden"},
Env: []string{"BAR=foo", "FOO=overridden"},
})
})

Expand Down Expand Up @@ -1233,6 +1245,7 @@ func TestOverrides(t *testing.T) {
Gcflags: []string{"gcflag1"},
Asmflags: []string{"asm1"},
Tags: []string{"tag1"},
Env: []string{},
})
})

Expand Down Expand Up @@ -1262,6 +1275,7 @@ func TestOverrides(t *testing.T) {
require.Equal(t, dets, config.BuildDetails{
Ldflags: []string{"overridden"},
Asmflags: []string{"asm1"},
Env: []string{},
})
})

Expand Down Expand Up @@ -1308,6 +1322,7 @@ func TestOverrides(t *testing.T) {
require.NoError(t, err)
require.Equal(t, dets, config.BuildDetails{
Ldflags: []string{"overridden"},
Env: []string{},
})
})

Expand Down Expand Up @@ -1337,6 +1352,7 @@ func TestOverrides(t *testing.T) {
require.NoError(t, err)
require.Equal(t, dets, config.BuildDetails{
Ldflags: []string{"overridden"},
Env: []string{},
})
})
}
Expand Down

0 comments on commit de3f381

Please sign in to comment.