1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-11-06 09:09:29 +02:00

feat: allow to template main (#2574)

Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
This commit is contained in:
Carlos Alexandro Becker
2021-11-21 12:32:05 -03:00
committed by GitHub
parent 77b62757fc
commit 66cfa25f94
2 changed files with 52 additions and 0 deletions

View File

@@ -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
}

View File

@@ -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) {
@@ -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) {