1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-07-17 01:42:37 +02:00

wip multiple builds

This commit is contained in:
Carlos Alexandro Becker
2017-06-27 19:20:08 -03:00
parent cf3197eb40
commit ed5ccf9bdb
7 changed files with 88 additions and 56 deletions

View File

@ -99,13 +99,15 @@ type Snapshot struct {
// Project includes all project configuration // Project includes all project configuration
type Project struct { type Project struct {
Name string `yaml:",omitempty"`
Release Release `yaml:",omitempty"` Release Release `yaml:",omitempty"`
Brew Homebrew `yaml:",omitempty"` Brew Homebrew `yaml:",omitempty"`
Build Build `yaml:",omitempty"` Builds []Build `yaml:",omitempty"`
Archive Archive `yaml:",omitempty"` Archive Archive `yaml:",omitempty"`
FPM FPM `yaml:",omitempty"` FPM FPM `yaml:",omitempty"`
Snapshot Snapshot `yaml:",omitempty"` Snapshot Snapshot `yaml:",omitempty"`
// Build Build `yaml:",omitempty"` // deprecated, remove
// test only property indicating the path to the dist folder // test only property indicating the path to the dist folder
Dist string `yaml:"-"` Dist string `yaml:"-"`
} }

View File

@ -1,17 +1,18 @@
homepage: &homepage http://goreleaser.github.io homepage: &homepage http://goreleaser.github.io
description: &description Deliver Go binaries as fast and easily as possible description: &description Deliver Go binaries as fast and easily as possible
build: builds:
env: -
- CGO_ENABLED=0 env:
goos: - CGO_ENABLED=0
- linux goos:
- darwin - linux
- windows - darwin
goarch: - windows
- 386 goarch:
- amd64 - 386
- arm - amd64
- arm64 - arm
- arm64
archive: archive:
name_template: '{{ .Binary }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}' name_template: '{{ .Binary }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}'
replacements: replacements:

View File

@ -36,7 +36,7 @@ func (c *githubClient) CreateFile(
}, },
Content: content.Bytes(), Content: content.Bytes(),
Message: github.String( Message: github.String(
ctx.Config.Build.Binary + " version " + ctx.Git.CurrentTag, ctx.Config.Name + " version " + ctx.Git.CurrentTag,
), ),
} }

View File

@ -106,7 +106,7 @@ func doRun(ctx *context.Context, client client.Client) error {
log.Warn("skipped because release is marked as draft") log.Warn("skipped because release is marked as draft")
return nil return nil
} }
path := filepath.Join(ctx.Config.Brew.Folder, ctx.Config.Build.Binary+".rb") path := filepath.Join(ctx.Config.Brew.Folder, ctx.Config.Name+".rb")
log.WithField("formula", path). log.WithField("formula", path).
WithField("repo", ctx.Config.Brew.GitHub.String()). WithField("repo", ctx.Config.Brew.GitHub.String()).
Info("pushing") Info("pushing")

View File

@ -10,6 +10,7 @@ import (
"strings" "strings"
"github.com/apex/log" "github.com/apex/log"
"github.com/goreleaser/goreleaser/config"
"github.com/goreleaser/goreleaser/context" "github.com/goreleaser/goreleaser/context"
"github.com/goreleaser/goreleaser/internal/ext" "github.com/goreleaser/goreleaser/internal/ext"
"golang.org/x/sync/errgroup" "golang.org/x/sync/errgroup"
@ -25,12 +26,21 @@ func (Pipe) Description() string {
// Run the pipe // Run the pipe
func (Pipe) Run(ctx *context.Context) error { func (Pipe) Run(ctx *context.Context) error {
if err := runHook(ctx.Config.Build.Env, ctx.Config.Build.Hooks.Pre); err != nil { for _, build := range ctx.Config.Builds {
if err := runPipeOnBuild(ctx, build); err != nil {
return err
}
}
return nil
}
func runPipeOnBuild(ctx *context.Context, build config.Build) error {
if err := runHook(build.Env, build.Hooks.Pre); err != nil {
return err return err
} }
sem := make(chan bool, 4) sem := make(chan bool, 4)
var g errgroup.Group var g errgroup.Group
for _, target := range buildTargets(ctx) { for _, target := range buildTargets(build) {
name, err := nameFor(ctx, target) name, err := nameFor(ctx, target)
if err != nil { if err != nil {
return err return err
@ -43,13 +53,13 @@ func (Pipe) Run(ctx *context.Context) error {
defer func() { defer func() {
<-sem <-sem
}() }()
return build(ctx, name, target) return doBuild(ctx, build, name, target)
}) })
} }
if err := g.Wait(); err != nil { if err := g.Wait(); err != nil {
return err return err
} }
return runHook(ctx.Config.Build.Env, ctx.Config.Build.Hooks.Post) return runHook(build.Env, build.Hooks.Post)
} }
func runHook(env []string, hook string) error { func runHook(env []string, hook string) error {
@ -61,23 +71,19 @@ func runHook(env []string, hook string) error {
return run(runtimeTarget, cmd, env) return run(runtimeTarget, cmd, env)
} }
func build(ctx *context.Context, name string, target buildTarget) error { func doBuild(ctx *context.Context, build config.Build, name string, target buildTarget) error {
output := filepath.Join( output := filepath.Join(ctx.Config.Dist, name, build.Binary+ext.For(target.goos))
ctx.Config.Dist,
name,
ctx.Config.Build.Binary+ext.For(target.goos),
)
log.WithField("binary", output).Info("building") log.WithField("binary", output).Info("building")
cmd := []string{"go", "build"} cmd := []string{"go", "build"}
if ctx.Config.Build.Flags != "" { if build.Flags != "" {
cmd = append(cmd, strings.Fields(ctx.Config.Build.Flags)...) cmd = append(cmd, strings.Fields(build.Flags)...)
} }
flags, err := ldflags(ctx) flags, err := ldflags(ctx)
if err != nil { if err != nil {
return err return err
} }
cmd = append(cmd, "-ldflags="+flags, "-o", output, ctx.Config.Build.Main) cmd = append(cmd, "-ldflags="+flags, "-o", output, build.Main)
return run(target, cmd, ctx.Config.Build.Env) return run(target, cmd, build.Env)
} }
func run(target buildTarget, command, env []string) error { func run(target buildTarget, command, env []string) error {

View File

@ -5,7 +5,7 @@ import (
"runtime" "runtime"
"github.com/apex/log" "github.com/apex/log"
"github.com/goreleaser/goreleaser/context" "github.com/goreleaser/goreleaser/config"
) )
var runtimeTarget = buildTarget{runtime.GOOS, runtime.GOARCH, ""} var runtimeTarget = buildTarget{runtime.GOOS, runtime.GOARCH, ""}
@ -23,14 +23,14 @@ func (t buildTarget) PrettyString() string {
return fmt.Sprintf("%v/%v%v", t.goos, t.goarch, t.goarm) return fmt.Sprintf("%v/%v%v", t.goos, t.goarch, t.goarm)
} }
func buildTargets(ctx *context.Context) (targets []buildTarget) { func buildTargets(build config.Build) (targets []buildTarget) {
for _, target := range allBuildTargets(ctx) { for _, target := range allBuildTargets(build) {
if !valid(target) { if !valid(target) {
log.WithField("target", target.PrettyString()). log.WithField("target", target.PrettyString()).
Warn("skipped invalid build") Warn("skipped invalid build")
continue continue
} }
if ignored(ctx, target) { if ignored(build, target) {
log.WithField("target", target.PrettyString()). log.WithField("target", target.PrettyString()).
Warn("skipped ignored build") Warn("skipped ignored build")
continue continue
@ -40,11 +40,11 @@ func buildTargets(ctx *context.Context) (targets []buildTarget) {
return return
} }
func allBuildTargets(ctx *context.Context) (targets []buildTarget) { func allBuildTargets(build config.Build) (targets []buildTarget) {
for _, goos := range ctx.Config.Build.Goos { for _, goos := range build.Goos {
for _, goarch := range ctx.Config.Build.Goarch { for _, goarch := range build.Goarch {
if goarch == "arm" { if goarch == "arm" {
for _, goarm := range ctx.Config.Build.Goarm { for _, goarm := range build.Goarm {
targets = append(targets, buildTarget{goos, goarch, goarm}) targets = append(targets, buildTarget{goos, goarch, goarm})
} }
continue continue
@ -55,8 +55,8 @@ func allBuildTargets(ctx *context.Context) (targets []buildTarget) {
return return
} }
func ignored(ctx *context.Context, target buildTarget) bool { func ignored(build config.Build, target buildTarget) bool {
for _, ig := range ctx.Config.Build.Ignore { for _, ig := range build.Ignore {
var ignored = buildTarget{ig.Goos, ig.Goarch, ig.Goarm} var ignored = buildTarget{ig.Goos, ig.Goarch, ig.Goarm}
if ignored == target { if ignored == target {
return true return true

View File

@ -4,7 +4,10 @@ package defaults
import ( import (
"fmt" "fmt"
"strings"
"github.com/apex/log"
"github.com/goreleaser/goreleaser/config"
"github.com/goreleaser/goreleaser/context" "github.com/goreleaser/goreleaser/context"
) )
@ -31,14 +34,23 @@ func (Pipe) Run(ctx *context.Context) error {
if err := setReleaseDefaults(ctx); err != nil { if err := setReleaseDefaults(ctx); err != nil {
return err return err
} }
if ctx.Config.Name == "" {
ctx.Config.Name = ctx.Config.Release.GitHub.Name
}
setBuildDefaults(ctx) setBuildDefaults(ctx)
if ctx.Config.Brew.Install == "" { if ctx.Config.Brew.Install == "" {
ctx.Config.Brew.Install = fmt.Sprintf( var installs []string
`bin.install "%s"`, for _, build := range ctx.Config.Builds {
ctx.Config.Build.Binary, installs = append(
) installs,
fmt.Sprintf(`bin.install "%s"`, build.Binary),
)
}
ctx.Config.Brew.Install = strings.Join(installs, "\n")
} }
return setArchiveDefaults(ctx) err := setArchiveDefaults(ctx)
log.WithField("config", ctx.Config).Debug("defaults set")
return err
} }
func setReleaseDefaults(ctx *context.Context) error { func setReleaseDefaults(ctx *context.Context) error {
@ -54,24 +66,35 @@ func setReleaseDefaults(ctx *context.Context) error {
} }
func setBuildDefaults(ctx *context.Context) { func setBuildDefaults(ctx *context.Context) {
if ctx.Config.Build.Binary == "" { if len(ctx.Config.Builds) == 0 {
ctx.Config.Build.Binary = ctx.Config.Release.GitHub.Name ctx.Config.Builds = append(ctx.Config.Builds, ctx.Config.Build)
} }
if ctx.Config.Build.Main == "" { ctx.Config.Build = config.Build{}
ctx.Config.Build.Main = "." for i, build := range ctx.Config.Builds {
ctx.Config.Builds[i] = buildWithDefaults(ctx, build)
} }
if len(ctx.Config.Build.Goos) == 0 { }
ctx.Config.Build.Goos = []string{"linux", "darwin"}
func buildWithDefaults(ctx *context.Context, build config.Build) config.Build {
if build.Binary == "" {
build.Binary = ctx.Config.Release.GitHub.Name
} }
if len(ctx.Config.Build.Goarch) == 0 { if build.Main == "" {
ctx.Config.Build.Goarch = []string{"amd64", "386"} build.Main = "."
} }
if len(ctx.Config.Build.Goarm) == 0 { if len(build.Goos) == 0 {
ctx.Config.Build.Goarm = []string{"6"} build.Goos = []string{"linux", "darwin"}
} }
if ctx.Config.Build.Ldflags == "" { if len(build.Goarch) == 0 {
ctx.Config.Build.Ldflags = "-s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}" build.Goarch = []string{"amd64", "386"}
} }
if len(build.Goarm) == 0 {
build.Goarm = []string{"6"}
}
if build.Ldflags == "" {
build.Ldflags = "-s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}"
}
return build
} }
func setArchiveDefaults(ctx *context.Context) error { func setArchiveDefaults(ctx *context.Context) error {