You've already forked goreleaser
mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-07-15 01:34:21 +02:00
wip multiple builds
This commit is contained in:
@ -99,13 +99,15 @@ type Snapshot struct {
|
||||
|
||||
// Project includes all project configuration
|
||||
type Project struct {
|
||||
Name string `yaml:",omitempty"`
|
||||
Release Release `yaml:",omitempty"`
|
||||
Brew Homebrew `yaml:",omitempty"`
|
||||
Build Build `yaml:",omitempty"`
|
||||
Builds []Build `yaml:",omitempty"`
|
||||
Archive Archive `yaml:",omitempty"`
|
||||
FPM FPM `yaml:",omitempty"`
|
||||
Snapshot Snapshot `yaml:",omitempty"`
|
||||
|
||||
// Build Build `yaml:",omitempty"` // deprecated, remove
|
||||
// test only property indicating the path to the dist folder
|
||||
Dist string `yaml:"-"`
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
homepage: &homepage http://goreleaser.github.io
|
||||
description: &description Deliver Go binaries as fast and easily as possible
|
||||
build:
|
||||
builds:
|
||||
-
|
||||
env:
|
||||
- CGO_ENABLED=0
|
||||
goos:
|
||||
|
@ -36,7 +36,7 @@ func (c *githubClient) CreateFile(
|
||||
},
|
||||
Content: content.Bytes(),
|
||||
Message: github.String(
|
||||
ctx.Config.Build.Binary + " version " + ctx.Git.CurrentTag,
|
||||
ctx.Config.Name + " version " + ctx.Git.CurrentTag,
|
||||
),
|
||||
}
|
||||
|
||||
|
@ -106,7 +106,7 @@ func doRun(ctx *context.Context, client client.Client) error {
|
||||
log.Warn("skipped because release is marked as draft")
|
||||
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).
|
||||
WithField("repo", ctx.Config.Brew.GitHub.String()).
|
||||
Info("pushing")
|
||||
|
@ -10,6 +10,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/apex/log"
|
||||
"github.com/goreleaser/goreleaser/config"
|
||||
"github.com/goreleaser/goreleaser/context"
|
||||
"github.com/goreleaser/goreleaser/internal/ext"
|
||||
"golang.org/x/sync/errgroup"
|
||||
@ -25,12 +26,21 @@ func (Pipe) Description() string {
|
||||
|
||||
// Run the pipe
|
||||
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
|
||||
}
|
||||
sem := make(chan bool, 4)
|
||||
var g errgroup.Group
|
||||
for _, target := range buildTargets(ctx) {
|
||||
for _, target := range buildTargets(build) {
|
||||
name, err := nameFor(ctx, target)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -43,13 +53,13 @@ func (Pipe) Run(ctx *context.Context) error {
|
||||
defer func() {
|
||||
<-sem
|
||||
}()
|
||||
return build(ctx, name, target)
|
||||
return doBuild(ctx, build, name, target)
|
||||
})
|
||||
}
|
||||
if err := g.Wait(); err != nil {
|
||||
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 {
|
||||
@ -61,23 +71,19 @@ func runHook(env []string, hook string) error {
|
||||
return run(runtimeTarget, cmd, env)
|
||||
}
|
||||
|
||||
func build(ctx *context.Context, name string, target buildTarget) error {
|
||||
output := filepath.Join(
|
||||
ctx.Config.Dist,
|
||||
name,
|
||||
ctx.Config.Build.Binary+ext.For(target.goos),
|
||||
)
|
||||
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")
|
||||
cmd := []string{"go", "build"}
|
||||
if ctx.Config.Build.Flags != "" {
|
||||
cmd = append(cmd, strings.Fields(ctx.Config.Build.Flags)...)
|
||||
if build.Flags != "" {
|
||||
cmd = append(cmd, strings.Fields(build.Flags)...)
|
||||
}
|
||||
flags, err := ldflags(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
cmd = append(cmd, "-ldflags="+flags, "-o", output, ctx.Config.Build.Main)
|
||||
return run(target, cmd, ctx.Config.Build.Env)
|
||||
cmd = append(cmd, "-ldflags="+flags, "-o", output, build.Main)
|
||||
return run(target, cmd, build.Env)
|
||||
}
|
||||
|
||||
func run(target buildTarget, command, env []string) error {
|
||||
|
@ -5,7 +5,7 @@ import (
|
||||
"runtime"
|
||||
|
||||
"github.com/apex/log"
|
||||
"github.com/goreleaser/goreleaser/context"
|
||||
"github.com/goreleaser/goreleaser/config"
|
||||
)
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
func buildTargets(ctx *context.Context) (targets []buildTarget) {
|
||||
for _, target := range allBuildTargets(ctx) {
|
||||
func buildTargets(build config.Build) (targets []buildTarget) {
|
||||
for _, target := range allBuildTargets(build) {
|
||||
if !valid(target) {
|
||||
log.WithField("target", target.PrettyString()).
|
||||
Warn("skipped invalid build")
|
||||
continue
|
||||
}
|
||||
if ignored(ctx, target) {
|
||||
if ignored(build, target) {
|
||||
log.WithField("target", target.PrettyString()).
|
||||
Warn("skipped ignored build")
|
||||
continue
|
||||
@ -40,11 +40,11 @@ func buildTargets(ctx *context.Context) (targets []buildTarget) {
|
||||
return
|
||||
}
|
||||
|
||||
func allBuildTargets(ctx *context.Context) (targets []buildTarget) {
|
||||
for _, goos := range ctx.Config.Build.Goos {
|
||||
for _, goarch := range ctx.Config.Build.Goarch {
|
||||
func allBuildTargets(build config.Build) (targets []buildTarget) {
|
||||
for _, goos := range build.Goos {
|
||||
for _, goarch := range build.Goarch {
|
||||
if goarch == "arm" {
|
||||
for _, goarm := range ctx.Config.Build.Goarm {
|
||||
for _, goarm := range build.Goarm {
|
||||
targets = append(targets, buildTarget{goos, goarch, goarm})
|
||||
}
|
||||
continue
|
||||
@ -55,8 +55,8 @@ func allBuildTargets(ctx *context.Context) (targets []buildTarget) {
|
||||
return
|
||||
}
|
||||
|
||||
func ignored(ctx *context.Context, target buildTarget) bool {
|
||||
for _, ig := range ctx.Config.Build.Ignore {
|
||||
func ignored(build config.Build, target buildTarget) bool {
|
||||
for _, ig := range build.Ignore {
|
||||
var ignored = buildTarget{ig.Goos, ig.Goarch, ig.Goarm}
|
||||
if ignored == target {
|
||||
return true
|
||||
|
@ -4,7 +4,10 @@ package defaults
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/apex/log"
|
||||
"github.com/goreleaser/goreleaser/config"
|
||||
"github.com/goreleaser/goreleaser/context"
|
||||
)
|
||||
|
||||
@ -31,14 +34,23 @@ func (Pipe) Run(ctx *context.Context) error {
|
||||
if err := setReleaseDefaults(ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
if ctx.Config.Name == "" {
|
||||
ctx.Config.Name = ctx.Config.Release.GitHub.Name
|
||||
}
|
||||
setBuildDefaults(ctx)
|
||||
if ctx.Config.Brew.Install == "" {
|
||||
ctx.Config.Brew.Install = fmt.Sprintf(
|
||||
`bin.install "%s"`,
|
||||
ctx.Config.Build.Binary,
|
||||
var installs []string
|
||||
for _, build := range ctx.Config.Builds {
|
||||
installs = append(
|
||||
installs,
|
||||
fmt.Sprintf(`bin.install "%s"`, build.Binary),
|
||||
)
|
||||
}
|
||||
return setArchiveDefaults(ctx)
|
||||
ctx.Config.Brew.Install = strings.Join(installs, "\n")
|
||||
}
|
||||
err := setArchiveDefaults(ctx)
|
||||
log.WithField("config", ctx.Config).Debug("defaults set")
|
||||
return err
|
||||
}
|
||||
|
||||
func setReleaseDefaults(ctx *context.Context) error {
|
||||
@ -54,24 +66,35 @@ func setReleaseDefaults(ctx *context.Context) error {
|
||||
}
|
||||
|
||||
func setBuildDefaults(ctx *context.Context) {
|
||||
if ctx.Config.Build.Binary == "" {
|
||||
ctx.Config.Build.Binary = ctx.Config.Release.GitHub.Name
|
||||
if len(ctx.Config.Builds) == 0 {
|
||||
ctx.Config.Builds = append(ctx.Config.Builds, ctx.Config.Build)
|
||||
}
|
||||
if ctx.Config.Build.Main == "" {
|
||||
ctx.Config.Build.Main = "."
|
||||
ctx.Config.Build = config.Build{}
|
||||
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 {
|
||||
ctx.Config.Build.Goarch = []string{"amd64", "386"}
|
||||
if build.Main == "" {
|
||||
build.Main = "."
|
||||
}
|
||||
if len(ctx.Config.Build.Goarm) == 0 {
|
||||
ctx.Config.Build.Goarm = []string{"6"}
|
||||
if len(build.Goos) == 0 {
|
||||
build.Goos = []string{"linux", "darwin"}
|
||||
}
|
||||
if ctx.Config.Build.Ldflags == "" {
|
||||
ctx.Config.Build.Ldflags = "-s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}"
|
||||
if len(build.Goarch) == 0 {
|
||||
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 {
|
||||
|
Reference in New Issue
Block a user