1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-03-25 21:29:14 +02:00

improved build

This commit is contained in:
Carlos Alexandro Becker 2017-07-01 12:27:13 -03:00
parent d286dffd52
commit 45a24a1101
No known key found for this signature in database
GPG Key ID: E61E2F7DC14AB940
2 changed files with 27 additions and 14 deletions

View File

@ -36,18 +36,26 @@ type Context struct {
Snapshot bool
}
var lock sync.Mutex
var artifactLock sync.Mutex
var archiveLock sync.Mutex
// AddArtifact adds a file to upload list
func (ctx *Context) AddArtifact(file string) {
lock.Lock()
defer lock.Unlock()
artifactLock.Lock()
defer artifactLock.Unlock()
file = strings.TrimPrefix(file, ctx.Config.Dist)
file = strings.Replace(file, "/", "", -1)
ctx.Artifacts = append(ctx.Artifacts, file)
log.WithField("artifact", file).Info("registered")
}
func (ctx *Context) AddArchive(key, file string) {
archiveLock.Lock()
defer archiveLock.Unlock()
ctx.Archives[key] = file
log.WithField("key", key).WithField("archive", file).Info("added")
}
// New context
func New(config config.Project) *Context {
return &Context{

View File

@ -13,6 +13,7 @@ import (
"github.com/goreleaser/goreleaser/config"
"github.com/goreleaser/goreleaser/context"
"github.com/goreleaser/goreleaser/internal/ext"
"github.com/goreleaser/goreleaser/internal/name"
"golang.org/x/sync/errgroup"
)
@ -42,19 +43,14 @@ func runPipeOnBuild(ctx *context.Context, build config.Build) error {
sem := make(chan bool, 4)
var g errgroup.Group
for _, target := range buildTargets(build) {
name, err := nameFor(ctx, target)
if err != nil {
return err
}
ctx.Archives[build.Binary+target.String()] = name
sem <- true
target := target
build := build
g.Go(func() error {
defer func() {
<-sem
}()
return doBuild(ctx, build, name, target)
return doBuild(ctx, build, target)
})
}
if err := g.Wait(); err != nil {
@ -72,9 +68,18 @@ func runHook(env []string, hook string) error {
return run(runtimeTarget, cmd, env)
}
func doBuild(ctx *context.Context, build config.Build, name string, target buildTarget) error {
output := filepath.Join(ctx.Config.Dist, name, build.Binary+ext.For(target.goos))
log.WithField("binary", output).Info("building")
func doBuild(ctx *context.Context, build config.Build, target buildTarget) error {
folder, err := name.For(ctx, target.goos, target.goarch, target.goarm)
if err != nil {
return err
}
var binary = filepath.Join(
ctx.Config.Dist,
folder,
build.Binary+ext.For(target.goos),
)
ctx.AddArchive(build.Binary+target.String(), binary)
log.WithField("binary", binary).Info("building")
cmd := []string{"go", "build"}
if build.Flags != "" {
cmd = append(cmd, strings.Fields(build.Flags)...)
@ -83,7 +88,7 @@ func doBuild(ctx *context.Context, build config.Build, name string, target build
if err != nil {
return err
}
cmd = append(cmd, "-ldflags="+flags, "-o", output, build.Main)
cmd = append(cmd, "-ldflags="+flags, "-o", binary, build.Main)
return run(target, cmd, build.Env)
}