From e8da61278fe8ed78704b1fb3437d947e3c971524 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Sun, 20 Aug 2017 16:35:46 -0300 Subject: [PATCH] skipped as an error type --- goreleaserlib/goreleaser.go | 8 +++++++- pipeline/brew/brew.go | 13 +++++-------- pipeline/cleandist/dist.go | 2 +- pipeline/env/env.go | 8 +++----- pipeline/fpm/fpm.go | 4 ++-- pipeline/git/git.go | 4 ++-- pipeline/pipe.go | 19 ++++++++++++++++++- pipeline/pipe_test.go | 15 +++++++++++++++ pipeline/release/release.go | 4 ++-- pipeline/snapcraft/snapcraft.go | 13 ++++++++----- pipeline/snapcraft/snapcraft_test.go | 12 ++++++++++-- 11 files changed, 73 insertions(+), 29 deletions(-) create mode 100644 pipeline/pipe_test.go diff --git a/goreleaserlib/goreleaser.go b/goreleaserlib/goreleaser.go index 49055706b..452b42d00 100644 --- a/goreleaserlib/goreleaser.go +++ b/goreleaserlib/goreleaser.go @@ -84,7 +84,13 @@ func Release(flags Flags) error { ctx.RmDist = flags.Bool("rm-dist") for _, pipe := range pipes { log.Infof("\033[1m%s\033[0m", strings.ToUpper(pipe.Description())) - if err := pipe.Run(ctx); err != nil { + var err = pipe.Run(ctx) + if err == nil { + continue + } + if skip, ok := err.(pipeline.SkipErr); ok { + log.WithField("reason", skip.Error()).Warn("skipped") + } else { return err } } diff --git a/pipeline/brew/brew.go b/pipeline/brew/brew.go index 330628bfc..954b2154a 100644 --- a/pipeline/brew/brew.go +++ b/pipeline/brew/brew.go @@ -14,6 +14,7 @@ import ( "github.com/goreleaser/goreleaser/context" "github.com/goreleaser/goreleaser/internal/archiveformat" "github.com/goreleaser/goreleaser/internal/client" + "github.com/goreleaser/goreleaser/pipeline" ) // ErrNoDarwin64Build when there is no build for darwin_amd64 (goos doesn't @@ -37,20 +38,16 @@ func (Pipe) Run(ctx *context.Context) error { func doRun(ctx *context.Context, client client.Client) error { if !ctx.Publish { - log.Warn("skipped because --skip-publish is set") - return nil + return pipeline.Skip("--skip-publish is set") } if ctx.Config.Brew.GitHub.Name == "" { - log.Warn("skipped because brew section is not configured") - return nil + return pipeline.Skip("brew section is not configured") } if ctx.Config.Release.Draft { - log.Warn("skipped because release is marked as draft") - return nil + return pipeline.Skip("release is marked as draft") } if ctx.Config.Archive.Format == "binary" { - log.Warn("skipped because archive format is binary") - return nil + return pipeline.Skip("archive format is binary") } var group = ctx.Binaries["darwinamd64"] diff --git a/pipeline/cleandist/dist.go b/pipeline/cleandist/dist.go index f347130e1..7c4f2858b 100644 --- a/pipeline/cleandist/dist.go +++ b/pipeline/cleandist/dist.go @@ -27,7 +27,7 @@ func (Pipe) Run(ctx *context.Context) (err error) { return nil } if ctx.RmDist { - log.Warn("rm-dist is set, removing ./dist") + log.Info("rm-dist is set, removing ./dist") return os.RemoveAll(ctx.Config.Dist) } files, err := ioutil.ReadDir(ctx.Config.Dist) diff --git a/pipeline/env/env.go b/pipeline/env/env.go index 65ee81711..a2e8b72a3 100644 --- a/pipeline/env/env.go +++ b/pipeline/env/env.go @@ -6,8 +6,8 @@ import ( "errors" "os" - "github.com/apex/log" "github.com/goreleaser/goreleaser/context" + "github.com/goreleaser/goreleaser/pipeline" ) // ErrMissingToken indicates an error when GITHUB_TOKEN is missing in the environment @@ -25,12 +25,10 @@ func (Pipe) Description() string { func (Pipe) Run(ctx *context.Context) (err error) { ctx.Token = os.Getenv("GITHUB_TOKEN") if !ctx.Publish { - log.Warn("github token not validated because publishing has been disabled") - return nil + return pipeline.Skip("publishing is disabled") } if !ctx.Validate { - log.Warn("skipped validations because --skip-validate is set") - return nil + return pipeline.Skip("--skip-validate is set") } if ctx.Token == "" { return ErrMissingToken diff --git a/pipeline/fpm/fpm.go b/pipeline/fpm/fpm.go index baac077cd..c1bcd7ce1 100644 --- a/pipeline/fpm/fpm.go +++ b/pipeline/fpm/fpm.go @@ -10,6 +10,7 @@ import ( "github.com/apex/log" "github.com/goreleaser/goreleaser/context" + "github.com/goreleaser/goreleaser/pipeline" "golang.org/x/sync/errgroup" ) @@ -27,8 +28,7 @@ func (Pipe) Description() string { // Run the pipe func (Pipe) Run(ctx *context.Context) error { if len(ctx.Config.FPM.Formats) == 0 { - log.Warn("skipping because no output formats configured") - return nil + return pipeline.Skip("no output formats configured") } _, err := exec.LookPath("fpm") if err != nil { diff --git a/pipeline/git/git.go b/pipeline/git/git.go index bf433ad1a..1b36925fd 100644 --- a/pipeline/git/git.go +++ b/pipeline/git/git.go @@ -13,6 +13,7 @@ import ( "github.com/apex/log" "github.com/goreleaser/goreleaser/context" "github.com/goreleaser/goreleaser/internal/git" + "github.com/goreleaser/goreleaser/pipeline" ) // Pipe for brew deployment @@ -43,8 +44,7 @@ func (Pipe) Run(ctx *context.Context) (err error) { return } if !ctx.Validate { - log.Warn("skipped validations because --skip-validate is set") - return nil + return pipeline.Skip("--skip-validate is set") } return validate(ctx, commit, tag) } diff --git a/pipeline/pipe.go b/pipeline/pipe.go index d6ae9908c..b6848e296 100644 --- a/pipeline/pipe.go +++ b/pipeline/pipe.go @@ -1,7 +1,9 @@ // Package pipeline provides a generic pipe interface. package pipeline -import "github.com/goreleaser/goreleaser/context" +import ( + "github.com/goreleaser/goreleaser/context" +) // Pipe interface type Pipe interface { @@ -11,3 +13,18 @@ type Pipe interface { // Run the pipe Run(ctx *context.Context) error } + +// ErrSkip occurs when a pipe is skipped for some reason +type ErrSkip struct { + reason string +} + +// Error implements the error interface. returns the reason the pipe was skipped +func (e ErrSkip) Error() string { + return e.reason +} + +// Skip skips this pipe with the given reason +func Skip(reason string) ErrSkip { + return ErrSkip{reason} +} diff --git a/pipeline/pipe_test.go b/pipeline/pipe_test.go new file mode 100644 index 000000000..c7a332efe --- /dev/null +++ b/pipeline/pipe_test.go @@ -0,0 +1,15 @@ +package pipeline + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestSkipPipe(t *testing.T) { + var assert = assert.New(t) + var reason = "this is a test" + var err = Skip(reason) + assert.Error(err) + assert.Equal(reason, err.Error()) +} diff --git a/pipeline/release/release.go b/pipeline/release/release.go index 5e919da11..1d245e5e7 100644 --- a/pipeline/release/release.go +++ b/pipeline/release/release.go @@ -9,6 +9,7 @@ import ( "github.com/apex/log" "github.com/goreleaser/goreleaser/context" "github.com/goreleaser/goreleaser/internal/client" + "github.com/goreleaser/goreleaser/pipeline" "golang.org/x/sync/errgroup" ) @@ -27,8 +28,7 @@ func (Pipe) Run(ctx *context.Context) error { func doRun(ctx *context.Context, client client.Client) error { if !ctx.Publish { - log.Warn("skipped because --skip-publish is set") - return nil + return pipeline.Skip("--skip-publish is set") } log.WithField("tag", ctx.Git.CurrentTag). WithField("repo", ctx.Config.Release.GitHub.String()). diff --git a/pipeline/snapcraft/snapcraft.go b/pipeline/snapcraft/snapcraft.go index 68d202ac8..f5cd8a227 100644 --- a/pipeline/snapcraft/snapcraft.go +++ b/pipeline/snapcraft/snapcraft.go @@ -12,6 +12,7 @@ import ( "github.com/apex/log" "github.com/goreleaser/goreleaser/context" + "github.com/goreleaser/goreleaser/pipeline" "golang.org/x/sync/errgroup" yaml "gopkg.in/yaml.v2" ) @@ -55,8 +56,7 @@ func (Pipe) Description() string { // Run the pipe func (Pipe) Run(ctx *context.Context) error { if ctx.Config.Snapcraft.Summary == "" && ctx.Config.Snapcraft.Description == "" { - log.Warn("skipping because no summary nor description were provided") - return nil + return pipeline.Skip("no summary nor description were provided") } if ctx.Config.Snapcraft.Summary == "" { return ErrNoSummary @@ -100,6 +100,7 @@ func archFor(key string) string { } func create(ctx *context.Context, folder, arch string, binaries []context.Binary) error { + var log = log.WithField("arch", arch) // prime is the directory that then will be compressed to make the .snap package. folderDir := filepath.Join(ctx.Config.Dist, folder) primeDir := filepath.Join(folderDir, "prime") @@ -109,7 +110,7 @@ func create(ctx *context.Context, folder, arch string, binaries []context.Binary } var file = filepath.Join(primeDir, "meta", "snap.yaml") - log.WithField("file", file).Info("creating snap metadata") + log.WithField("file", file).Debug("creating snap metadata") var metadata = &SnapcraftMetadata{ Version: ctx.Version, @@ -129,8 +130,10 @@ func create(ctx *context.Context, folder, arch string, binaries []context.Binary for _, binary := range binaries { log.WithField("path", binary.Path). WithField("name", binary.Name). - Info("passed binary to snapcraft") - appMetadata := AppMetadata{Command: binary.Name} + Debug("passed binary to snapcraft") + appMetadata := AppMetadata{ + Command: binary.Name, + } if configAppMetadata, ok := ctx.Config.Snapcraft.Apps[binary.Name]; ok { appMetadata.Plugs = configAppMetadata.Plugs appMetadata.Daemon = configAppMetadata.Daemon diff --git a/pipeline/snapcraft/snapcraft_test.go b/pipeline/snapcraft/snapcraft_test.go index d5365337a..a73d61936 100644 --- a/pipeline/snapcraft/snapcraft_test.go +++ b/pipeline/snapcraft/snapcraft_test.go @@ -9,6 +9,7 @@ import ( "github.com/goreleaser/goreleaser/config" "github.com/goreleaser/goreleaser/context" + "github.com/goreleaser/goreleaser/pipeline" "github.com/stretchr/testify/assert" yaml "gopkg.in/yaml.v2" ) @@ -25,7 +26,7 @@ func TestRunPipeMissingInfo(t *testing.T) { ErrNoDescription: { Summary: "dummy summary", }, - nil: {}, // should skip instead of error + pipeline.Skip("no summary nor description were provided"): {}, } { t.Run(fmt.Sprintf("testing if %v happens", eerr), func(t *testing.T) { var assert = assert.New(t) @@ -145,7 +146,14 @@ func TestNoSnapcraftInPath(t *testing.T) { func addBinaries(t *testing.T, ctx *context.Context, name, dist string) { var assert = assert.New(t) - for _, plat := range []string{"linuxamd64", "linux386", "darwinamd64", "linuxarm64", "linuxarmhf"} { + for _, plat := range []string{ + "linuxamd64", + "linux386", + "darwinamd64", + "linuxarm64", + "linuxarm6", + "linuxwtf", + } { var folder = name + "_" + plat assert.NoError(os.Mkdir(filepath.Join(dist, folder), 0755)) var binPath = filepath.Join(dist, folder, name)