From c76c12721f37d95c425e89e0e4dba6648e2775e3 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Thu, 29 Dec 2016 14:12:54 -0200 Subject: [PATCH] multiple builds --- build/build.go | 57 ++++++++++++++++++++++++++++++-------------------- glide.lock | 10 +++++++-- glide.yaml | 3 +++ 3 files changed, 45 insertions(+), 25 deletions(-) diff --git a/build/build.go b/build/build.go index fac3226f2..4976df269 100644 --- a/build/build.go +++ b/build/build.go @@ -2,42 +2,53 @@ package build import ( "bytes" + "errors" "fmt" "os" "os/exec" "github.com/goreleaser/releaser/config" "github.com/goreleaser/releaser/uname" + "golang.org/x/sync/errgroup" ) func Build(version string, config config.ProjectConfig) error { + var g errgroup.Group for _, bos := range config.Build.Oses { for _, arch := range config.Build.Arches { - fmt.Println("Building", bos+"/"+arch, "...") - cmd := exec.Command( - "go", - "build", - "-ldflags=-s -w -X main.version="+version, - "-o", target(bos, arch, config.BinaryName), - config.Build.Main, - ) - cmd.Env = append( - cmd.Env, - "GOOS="+bos, - "GOARCH="+arch, - "GOROOT="+os.Getenv("GOROOT"), - "GOPATH="+os.Getenv("GOPATH"), - ) - var stdout bytes.Buffer - cmd.Stdout = &stdout - cmd.Stderr = &stdout - err := cmd.Run() - if err != nil { - fmt.Println(stdout.String()) - return err - } + bos := bos + arch := arch + g.Go(func() error { + return build(bos, arch, version, config) + }) } } + return g.Wait() +} + +func build(bos, arch, version string, config config.ProjectConfig) error { + fmt.Println("Building", bos+"/"+arch, "...") + cmd := exec.Command( + "go", + "build", + "-ldflags=-s -w -X main.version="+version, + "-o", target(bos, arch, config.BinaryName), + config.Build.Main, + ) + cmd.Env = append( + cmd.Env, + "GOOS="+bos, + "GOARCH="+arch, + "GOROOT="+os.Getenv("GOROOT"), + "GOPATH="+os.Getenv("GOPATH"), + ) + var stdout bytes.Buffer + cmd.Stdout = &stdout + cmd.Stderr = &stdout + err := cmd.Run() + if err != nil { + return errors.New(stdout.String()) + } return nil } diff --git a/glide.lock b/glide.lock index e3bbbb7d4..0b890c8a0 100644 --- a/glide.lock +++ b/glide.lock @@ -1,5 +1,5 @@ -hash: d994e2b869e9f8e43e94f45a805e7443c459a8357f4d0935c4c96171bb54265f -updated: 2016-12-28T23:26:07.891361125-02:00 +hash: 99aa967804549d50c1b897c28c555c0bb10a3045f68b3024f926758be9d0a5f8 +updated: 2016-12-29T14:09:53.896252195-02:00 imports: - name: github.com/golang/protobuf version: df1d3ca07d2d07bba352d5b73c4313b4e2a6203e @@ -13,6 +13,8 @@ imports: version: 9235644dd9e52eeae6fa48efd539fdc351a0af53 subpackages: - query +- name: github.com/pkg/errors + version: 248dadf4e9068a0b3e79f02ed0a610d935de5302 - name: golang.org/x/net version: 6d3beaea10370160dea67f5c9327ed791afd5389 subpackages: @@ -21,6 +23,10 @@ imports: version: 1e695b1c8febf17aad3bfa7bf0a819ef94b98ad5 subpackages: - internal +- name: golang.org/x/sync + version: 316e794f7b5e3df4e95175a45a5fb8b12f85cb4f + subpackages: + - errgroup - name: google.golang.org/appengine version: 3f4dbbc0ec153a39878fd524ece9f39732bd4998 subpackages: diff --git a/glide.yaml b/glide.yaml index 80dcc98a6..f7711b939 100644 --- a/glide.yaml +++ b/glide.yaml @@ -5,6 +5,9 @@ import: - github - package: golang.org/x/oauth2 - package: gopkg.in/yaml.v1 +- package: golang.org/x/sync + subpackages: + - errgroup testImport: - package: github.com/stretchr/testify version: ~1.1.4