1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-10-30 23:58:09 +02:00

fix: several review suggestions

This commit is contained in:
Carlos Alexandro Becker
2018-01-26 21:54:08 -02:00
parent fc7f33be98
commit 96a431c6a8
4 changed files with 40 additions and 10 deletions

View File

@@ -13,14 +13,14 @@ var (
lock sync.Mutex
)
// Register register a builder to a given lang
// Register registers a builder to a given lang
func Register(lang string, builder Builder) {
lock.Lock()
builders[lang] = builder
lock.Unlock()
}
// For gets the previously register builder for the given lang
// For gets the previously registered builder for the given lang
func For(lang string) Builder {
return builders[lang]
}

View File

@@ -30,7 +30,7 @@ func init() {
// Builder is golang builder
type Builder struct{}
// WithDefaults set the defaults for a golang build
// WithDefaults sets the defaults for a golang build and returns it
func (*Builder) WithDefaults(build config.Build) config.Build {
if build.Main == "" {
build.Main = "."
@@ -67,7 +67,10 @@ func (*Builder) Build(ctx *context.Context, build config.Build, options api.Opti
return err
}
cmd = append(cmd, "-ldflags="+flags, "-o", options.Path, build.Main)
var target = newBuildTarget(options.Target)
target, err := newBuildTarget(options.Target)
if err != nil {
return err
}
var env = append(build.Env, target.Env()...)
if err := run(ctx, cmd, env); err != nil {
return errors.Wrapf(err, "failed to build for %s", options.Target)
@@ -130,15 +133,18 @@ type buildTarget struct {
os, arch, arm string
}
func newBuildTarget(s string) buildTarget {
func newBuildTarget(s string) (buildTarget, error) {
var t = buildTarget{}
parts := strings.Split(s, "_")
if len(parts) < 2 {
return t, fmt.Errorf("%s is not a valid build target", s)
}
t.os = parts[0]
t.arch = parts[1]
if len(parts) == 3 {
t.arm = parts[2]
}
return t
return t, nil
}
func (b buildTarget) Env() []string {
@@ -172,9 +178,9 @@ func checkMain(ctx *context.Context, build config.Build) error {
}
return fmt.Errorf("build for %s does not contain a main function", build.Binary)
}
file, err := parser.ParseFile(token.NewFileSet(), build.Main, nil, 0)
file, err := parser.ParseFile(token.NewFileSet(), main, nil, 0)
if err != nil {
return errors.Wrapf(err, "failed to parse file: %s", build.Main)
return errors.Wrapf(err, "failed to parse file: %s", main)
}
if hasMain(file) {
return nil

View File

@@ -68,7 +68,7 @@ func TestWithDefaults(t *testing.T) {
}
}
func TestDefaultAndBuild(t *testing.T) {
func TestBuild(t *testing.T) {
folder, back := testlib.Mktmp(t)
defer back()
writeGoodMain(t, folder)
@@ -120,6 +120,30 @@ func TestBuildFailed(t *testing.T) {
assert.Empty(t, ctx.Artifacts.List())
}
func TestBuildInvalidTarget(t *testing.T) {
folder, back := testlib.Mktmp(t)
defer back()
writeGoodMain(t, folder)
var target = "linux"
var config = config.Project{
Builds: []config.Build{
{
Binary: "foo",
Targets: []string{target},
},
},
}
var ctx = context.New(config)
var build = ctx.Config.Builds[0]
var err = Default.Build(ctx, build, api.Options{
Target: target,
Name: build.Binary,
Path: filepath.Join(folder, "dist", target, build.Binary),
})
assert.EqualError(t, err, "linux is not a valid build target")
assert.Len(t, ctx.Artifacts.List(), 0)
}
func TestRunInvalidLdflags(t *testing.T) {
folder, back := testlib.Mktmp(t)
defer back()

View File

@@ -1,2 +1,2 @@
// Package golang providers a Builder implementation for golang.
// Package golang provides a Builder implementation for golang.
package golang