diff --git a/pipeline/archive/archive.go b/pipeline/archive/archive.go index b6b4791c5..147411ea9 100644 --- a/pipeline/archive/archive.go +++ b/pipeline/archive/archive.go @@ -58,9 +58,11 @@ func create(ctx *context.Context, platform, name string) error { return err } } - var binary = ctx.Config.Build.Binary + ext.For(platform) - if err := archive.Add(binary, filepath.Join(folder, binary)); err != nil { - return err + for _, build := range ctx.Config.Builds { + var binary = build.Binary + ext.For(platform) + if err := archive.Add(binary, filepath.Join(folder, binary)); err != nil { + return err + } } ctx.AddArtifact(file.Name()) return nil diff --git a/pipeline/brew/brew.go b/pipeline/brew/brew.go index 5a6c4e509..47fb09e71 100644 --- a/pipeline/brew/brew.go +++ b/pipeline/brew/brew.go @@ -69,7 +69,6 @@ type templateData struct { Repo config.Repo // FIXME: will not work for anything but github right now. Tag string Version string - Binary string Caveats string File string Format string @@ -127,7 +126,7 @@ func buildFormula(ctx *context.Context, client client.Client) (bytes.Buffer, err func doBuildFormula(data templateData) (bytes.Buffer, error) { var out bytes.Buffer - tmpl, err := template.New(data.Binary).Parse(formula) + tmpl, err := template.New(data.Name).Parse(formula) if err != nil { return out, err } @@ -150,13 +149,12 @@ func dataFor(ctx *context.Context, client client.Client) (result templateData, e return } return templateData{ - Name: formulaNameFor(ctx.Config.Build.Binary), + Name: formulaNameFor(ctx.Config.Name), Desc: ctx.Config.Brew.Description, Homepage: ctx.Config.Brew.Homepage, Repo: ctx.Config.Release.GitHub, Tag: ctx.Git.CurrentTag, Version: ctx.Version, - Binary: ctx.Config.Build.Binary, Caveats: ctx.Config.Brew.Caveats, File: file, Format: ctx.Config.Archive.Format, // TODO this can be broken by format_overrides diff --git a/pipeline/build/build.go b/pipeline/build/build.go index 81cea0ece..003b3982f 100644 --- a/pipeline/build/build.go +++ b/pipeline/build/build.go @@ -27,6 +27,7 @@ func (Pipe) Description() string { // Run the pipe func (Pipe) Run(ctx *context.Context) error { for _, build := range ctx.Config.Builds { + log.WithField("build", build).Debug("building") if err := runPipeOnBuild(ctx, build); err != nil { return err } @@ -41,11 +42,11 @@ 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) + name, err := nameFor(ctx, build, target) if err != nil { return err } - ctx.Archives[target.String()] = name + ctx.Archives[build.Binary+target.String()] = name sem <- true target := target @@ -78,7 +79,7 @@ func doBuild(ctx *context.Context, build config.Build, name string, target build if build.Flags != "" { cmd = append(cmd, strings.Fields(build.Flags)...) } - flags, err := ldflags(ctx) + flags, err := ldflags(ctx, build) if err != nil { return err } diff --git a/pipeline/build/ldflags.go b/pipeline/build/ldflags.go index 2dacfb3ed..cf6633616 100644 --- a/pipeline/build/ldflags.go +++ b/pipeline/build/ldflags.go @@ -5,6 +5,7 @@ import ( "text/template" "time" + "github.com/goreleaser/goreleaser/config" "github.com/goreleaser/goreleaser/context" ) @@ -15,7 +16,7 @@ type ldflagsData struct { Version string } -func ldflags(ctx *context.Context) (string, error) { +func ldflags(ctx *context.Context, build config.Build) (string, error) { var data = ldflagsData{ Commit: ctx.Git.Commit, Tag: ctx.Git.CurrentTag, @@ -23,7 +24,7 @@ func ldflags(ctx *context.Context) (string, error) { Date: time.Now().UTC().Format(time.RFC3339), } var out bytes.Buffer - t, err := template.New("ldflags").Parse(ctx.Config.Build.Ldflags) + t, err := template.New("ldflags").Parse(build.Ldflags) if err != nil { return "", err } diff --git a/pipeline/build/name.go b/pipeline/build/name.go index 89c582b17..2df4adf67 100644 --- a/pipeline/build/name.go +++ b/pipeline/build/name.go @@ -4,6 +4,7 @@ import ( "bytes" "text/template" + "github.com/goreleaser/goreleaser/config" "github.com/goreleaser/goreleaser/context" ) @@ -16,14 +17,14 @@ type nameData struct { Binary string } -func nameFor(ctx *context.Context, target buildTarget) (string, error) { +func nameFor(ctx *context.Context, build config.Build, target buildTarget) (string, error) { var data = nameData{ Os: replace(ctx.Config.Archive.Replacements, target.goos), Arch: replace(ctx.Config.Archive.Replacements, target.goarch), Arm: replace(ctx.Config.Archive.Replacements, target.goarm), Version: ctx.Version, Tag: ctx.Git.CurrentTag, - Binary: ctx.Config.Build.Binary, + Binary: build.Binary, } var out bytes.Buffer diff --git a/pipeline/checksums/checksums.go b/pipeline/checksums/checksums.go index abf33b39a..4c2060948 100644 --- a/pipeline/checksums/checksums.go +++ b/pipeline/checksums/checksums.go @@ -26,7 +26,7 @@ func (Pipe) Run(ctx *context.Context) (err error) { file, err := os.OpenFile( filepath.Join( ctx.Config.Dist, - fmt.Sprintf("%v_checksums.txt", ctx.Config.Build.Binary), + fmt.Sprintf("%v_checksums.txt", ctx.Config.Name), ), os.O_APPEND|os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644, diff --git a/pipeline/defaults/defaults.go b/pipeline/defaults/defaults.go index 375b3603f..e010b39cc 100644 --- a/pipeline/defaults/defaults.go +++ b/pipeline/defaults/defaults.go @@ -66,10 +66,6 @@ func setReleaseDefaults(ctx *context.Context) error { } func setBuildDefaults(ctx *context.Context) { - if len(ctx.Config.Builds) == 0 { - ctx.Config.Builds = append(ctx.Config.Builds, ctx.Config.Build) - } - ctx.Config.Build = config.Build{} for i, build := range ctx.Config.Builds { ctx.Config.Builds[i] = buildWithDefaults(ctx, build) } diff --git a/pipeline/fpm/fpm.go b/pipeline/fpm/fpm.go index b859826d0..4fafc846d 100644 --- a/pipeline/fpm/fpm.go +++ b/pipeline/fpm/fpm.go @@ -3,6 +3,7 @@ package fpm import ( "errors" + "fmt" "os/exec" "path/filepath" @@ -40,16 +41,19 @@ func (Pipe) Run(ctx *context.Context) error { var g errgroup.Group for _, format := range ctx.Config.FPM.Formats { - format := format - for _, goarch := range ctx.Config.Build.Goarch { - if ctx.Archives["linux"+goarch] == "" { - continue + for _, build := range ctx.Config.Builds { + for _, goarch := range build.Goarch { + var key = build.Binary + "linux" + goarch + if ctx.Archives[key] == "" { + continue + } + format := format + archive := ctx.Archives[key] + arch := goarchToUnix[goarch] + g.Go(func() error { + return create(ctx, format, archive, arch) + }) } - archive := ctx.Archives["linux"+goarch] - arch := goarchToUnix[goarch] - g.Go(func() error { - return create(ctx, format, archive, arch) - }) } } return g.Wait() @@ -58,13 +62,12 @@ func (Pipe) Run(ctx *context.Context) error { func create(ctx *context.Context, format, archive, arch string) error { var path = filepath.Join(ctx.Config.Dist, archive) var file = path + "." + format - var name = ctx.Config.Build.Binary log.WithField("file", file).Info("Creating") var options = []string{ "--input-type", "dir", "--output-type", format, - "--name", name, + "--name", ctx.Config.Name, "--version", ctx.Version, "--architecture", arch, "--chdir", path, @@ -94,9 +97,15 @@ func create(ctx *context.Context, format, archive, arch string) error { options = append(options, "--conflicts", conflict) } - // This basically tells fpm to put the binary in the /usr/local/bin - // binary=/usr/local/bin/binary - options = append(options, name+"="+filepath.Join("/usr/local/bin", name)) + for _, build := range ctx.Config.Builds { + // This basically tells fpm to put the binary in the /usr/local/bin + // binary=/usr/local/bin/binary + options = append(options, fmt.Sprintf( + "%s=%s", + build.Binary, + filepath.Join("/usr/local/bin", build.Binary), + )) + } if out, err := exec.Command("fpm", options...).CombinedOutput(); err != nil { return errors.New(string(out))