Skip to content

Commit

Permalink
feat: allow to template main (#2574)
Browse files Browse the repository at this point in the history
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
  • Loading branch information
caarlos0 committed Nov 21, 2021
1 parent 77b6275 commit 66cfa25
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 0 deletions.
16 changes: 16 additions & 0 deletions internal/builders/golang/build.go
Expand Up @@ -71,6 +71,22 @@ func (*Builder) WithDefaults(build config.Build) (config.Build, error) {

// Build builds a golang build.
func (*Builder) Build(ctx *context.Context, build config.Build, options api.Options) error {
tpl := tmpl.New(ctx)
if build.Main != "" {
m, err := tpl.Apply(build.Main)
if err != nil {
return err
}
build.Main = m
}
if build.UnproxiedMain != "" {
m, err := tpl.Apply(build.UnproxiedMain)
if err != nil {
return err
}
build.UnproxiedMain = m
}

if err := checkMain(build); err != nil {
return err
}
Expand Down
36 changes: 36 additions & 0 deletions internal/builders/golang/build_test.go
Expand Up @@ -615,6 +615,29 @@ func TestRunPipeWithoutMainFunc(t *testing.T) {
Target: runtimeTarget,
}), `build for no-main does not contain a main function`)
})
t.Run("using gomod.proxy and template", func(t *testing.T) {
ctx := newCtx(t)
ctx.Config.GoMod.Proxy = true
ctx.Env["Main"] = "."
ctx.Config.Builds[0].Dir = "dist/proxy/test"
ctx.Config.Builds[0].Main = "github.com/caarlos0/test"
ctx.Config.Builds[0].UnproxiedDir = "."
ctx.Config.Builds[0].UnproxiedMain = "{{ .Env.Main }}"
require.EqualError(t, Default.Build(ctx, ctx.Config.Builds[0], api.Options{
Target: runtimeTarget,
}), `build for no-main does not contain a main function`)
})
t.Run("using gomod.proxy and invalid template", func(t *testing.T) {
ctx := newCtx(t)
ctx.Config.GoMod.Proxy = true
ctx.Config.Builds[0].Dir = "dist/proxy/test"
ctx.Config.Builds[0].Main = "github.com/caarlos0/test"
ctx.Config.Builds[0].UnproxiedDir = "."
ctx.Config.Builds[0].UnproxiedMain = "{{ .Env.NOPE }}"
require.EqualError(t, Default.Build(ctx, ctx.Config.Builds[0], api.Options{
Target: runtimeTarget,
}), `template: tmpl:1:7: executing "tmpl" at <.Env.NOPE>: map has no entry for key "NOPE"`)
})
}

func TestRunPipeWithProxiedRepo(t *testing.T) {
Expand Down Expand Up @@ -708,6 +731,19 @@ func TestRunPipeWithMainFuncNotInMainGoFile(t *testing.T) {
Target: runtimeTarget,
}))
})
t.Run("with template", func(t *testing.T) {
ctx.Config.Builds[0].Main = "{{ .Env.Main }}"
ctx.Env["Main"] = "."
require.NoError(t, Default.Build(ctx, ctx.Config.Builds[0], api.Options{
Target: runtimeTarget,
}))
})
t.Run("with invalid template", func(t *testing.T) {
ctx.Config.Builds[0].Main = "{{ .Env.NOPE }}"
require.EqualError(t, Default.Build(ctx, ctx.Config.Builds[0], api.Options{
Target: runtimeTarget,
}), `template: tmpl:1:7: executing "tmpl" at <.Env.NOPE>: map has no entry for key "NOPE"`)
})
}

func TestLdFlagsFullTemplate(t *testing.T) {
Expand Down

0 comments on commit 66cfa25

Please sign in to comment.