1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-07-15 01:34:21 +02:00

skip release and skip validations as separated flags

This commit is contained in:
Carlos Alexandro Becker
2017-04-18 13:10:13 -03:00
parent d9032917a9
commit e10e1aa141
10 changed files with 99 additions and 38 deletions

View File

@ -32,6 +32,8 @@ type Context struct {
Archives map[string]string Archives map[string]string
Artifacts []string Artifacts []string
Version string Version string
Validate bool
Publish bool
} }
var lock sync.Mutex var lock sync.Mutex

57
main.go
View File

@ -25,6 +25,22 @@ var (
date = "unknown" date = "unknown"
) )
var pipes = []pipeline.Pipe{
defaults.Pipe{}, // load default configs
git.Pipe{}, // get and validate git repo state
env.Pipe{}, // load and validate environment variables
build.Pipe{}, // build
archive.Pipe{}, // archive (tar.gz, zip, etc)
fpm.Pipe{}, // archive via fpm (deb, rpm, etc)
checksums.Pipe{}, // checksums of the files
release.Pipe{}, // release to github
brew.Pipe{}, // push to brew tap
}
func init() {
log.SetFlags(0)
}
func main() { func main() {
var app = cli.NewApp() var app = cli.NewApp()
app.Name = "goreleaser" app.Name = "goreleaser"
@ -37,8 +53,12 @@ func main() {
Value: "goreleaser.yml", Value: "goreleaser.yml",
}, },
cli.BoolFlag{ cli.BoolFlag{
Name: "build-only, skip-release, no-release, nr", Name: "skip-validate",
Usage: "Skip all the release processes and run only the build and packaging steps", Usage: "Skip all the validations against the release",
},
cli.BoolFlag{
Name: "skip-publish",
Usage: "Skip all publishing pipes of the release",
}, },
} }
app.Action = func(c *cli.Context) (err error) { app.Action = func(c *cli.Context) (err error) {
@ -53,8 +73,9 @@ func main() {
} }
} }
var ctx = context.New(cfg) var ctx = context.New(cfg)
log.SetFlags(0) ctx.Validate = !c.Bool("skip-validate")
for _, pipe := range pipes(c.Bool("build-only")) { ctx.Publish = !c.Bool("skip-publish")
for _, pipe := range pipes {
log.Println(pipe.Description()) log.Println(pipe.Description())
log.SetPrefix(" -> ") log.SetPrefix(" -> ")
if err := pipe.Run(ctx); err != nil { if err := pipe.Run(ctx); err != nil {
@ -69,31 +90,3 @@ func main() {
log.Fatalln(err) log.Fatalln(err)
} }
} }
func pipes(buildOnly bool) []pipeline.Pipe {
var pipes = []pipeline.Pipe{
defaults.Pipe{}, // load default configs
}
if !buildOnly {
pipes = append(
pipes,
git.Pipe{}, // get and validate git repo state
env.Pipe{}, // load and validate environment variables
)
}
pipes = append(
pipes,
build.Pipe{}, // build
archive.Pipe{}, // archive (tar.gz, zip, etc)
fpm.Pipe{}, // archive via fpm (deb, rpm, etc)
checksums.Pipe{}, // checksums of the files
)
if !buildOnly {
pipes = append(
pipes,
release.Pipe{}, // release to github
brew.Pipe{}, // push to brew tap
)
}
return pipes
}

View File

@ -103,7 +103,7 @@ func doRun(ctx *context.Context, client client.Client) error {
Name: ss[1], Name: ss[1],
} }
} }
if ctx.Config.Brew.GitHub.Name == "" { if ctx.Config.Brew.GitHub.Name == "" || !ctx.Publish {
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.Build.Binary+".rb")

View File

@ -109,6 +109,7 @@ func TestRunPipe(t *testing.T) {
Archives: map[string]string{ Archives: map[string]string{
"darwinamd64": "bin", "darwinamd64": "bin",
}, },
Publish: true,
} }
client := &DummyClient{} client := &DummyClient{}
assert.NoError(doRun(ctx, client)) assert.NoError(doRun(ctx, client))
@ -129,6 +130,7 @@ func TestRunPipeBrewNotSetup(t *testing.T) {
}, },
}, },
}, },
Publish: true,
} }
client := &DummyClient{} client := &DummyClient{}
assert.Equal(ErrNoDarwin64Build, doRun(ctx, client)) assert.Equal(ErrNoDarwin64Build, doRun(ctx, client))
@ -143,6 +145,16 @@ func TestRunPipeNoDarwinBuild(t *testing.T) {
assert.False(client.CreatedFile) assert.False(client.CreatedFile)
} }
func TestRunPipeNoPublish(t *testing.T) {
assert := assert.New(t)
var ctx = &context.Context{
Publish: false,
}
client := &DummyClient{}
assert.NoError(doRun(ctx, client))
assert.False(client.CreatedFile)
}
type DummyClient struct { type DummyClient struct {
CreatedFile bool CreatedFile bool
} }

3
pipeline/env/env.go vendored
View File

@ -22,6 +22,9 @@ func (Pipe) Description() string {
// Run the pipe // Run the pipe
func (Pipe) Run(ctx *context.Context) (err error) { func (Pipe) Run(ctx *context.Context) (err error) {
if !ctx.Validate {
return nil
}
ctx.Token = os.Getenv("GITHUB_TOKEN") ctx.Token = os.Getenv("GITHUB_TOKEN")
if ctx.Token == "" { if ctx.Token == "" {
return ErrMissingToken return ErrMissingToken

View File

@ -17,7 +17,8 @@ func TestValidEnv(t *testing.T) {
assert := assert.New(t) assert := assert.New(t)
var ctx = &context.Context{ var ctx = &context.Context{
Config: config.Project{}, Config: config.Project{},
Validate: true,
} }
assert.NoError(Pipe{}.Run(ctx)) assert.NoError(Pipe{}.Run(ctx))
} }
@ -26,7 +27,17 @@ func TestInvalidEnv(t *testing.T) {
assert := assert.New(t) assert := assert.New(t)
assert.NoError(os.Unsetenv("GITHUB_TOKEN")) assert.NoError(os.Unsetenv("GITHUB_TOKEN"))
var ctx = &context.Context{ var ctx = &context.Context{
Config: config.Project{}, Config: config.Project{},
Validate: true,
} }
assert.Error(Pipe{}.Run(ctx)) assert.Error(Pipe{}.Run(ctx))
} }
func TestSkipValidate(t *testing.T) {
assert := assert.New(t)
var ctx = &context.Context{
Config: config.Project{},
Validate: false,
}
assert.NoError(Pipe{}.Run(ctx))
}

View File

@ -59,6 +59,9 @@ func (Pipe) Run(ctx *context.Context) (err error) {
} }
// removes usual `v` prefix // removes usual `v` prefix
ctx.Version = strings.TrimPrefix(tag, "v") ctx.Version = strings.TrimPrefix(tag, "v")
if !ctx.Validate {
return nil
}
return validate(commit, tag, ctx.Version) return validate(commit, tag, ctx.Version)
} }

View File

@ -58,7 +58,8 @@ func TestInvalidTagFormat(t *testing.T) {
gitCommit(t, "commit2") gitCommit(t, "commit2")
gitTag(t, "sadasd") gitTag(t, "sadasd")
var ctx = &context.Context{ var ctx = &context.Context{
Config: config.Project{}, Config: config.Project{},
Validate: true,
} }
assert.EqualError(Pipe{}.Run(ctx), "sadasd is not in a valid version format") assert.EqualError(Pipe{}.Run(ctx), "sadasd is not in a valid version format")
assert.Equal("sadasd", ctx.Git.CurrentTag) assert.Equal("sadasd", ctx.Git.CurrentTag)
@ -76,7 +77,8 @@ func TestDirty(t *testing.T) {
gitTag(t, "v0.0.1") gitTag(t, "v0.0.1")
assert.NoError(ioutil.WriteFile(dummy.Name(), []byte("lorem ipsum"), 0644)) assert.NoError(ioutil.WriteFile(dummy.Name(), []byte("lorem ipsum"), 0644))
var ctx = &context.Context{ var ctx = &context.Context{
Config: config.Project{}, Config: config.Project{},
Validate: true,
} }
err = Pipe{}.Run(ctx) err = Pipe{}.Run(ctx)
assert.Error(err) assert.Error(err)
@ -92,13 +94,30 @@ func TestTagIsNotLastCommit(t *testing.T) {
gitTag(t, "v0.0.1") gitTag(t, "v0.0.1")
gitCommit(t, "commit4") gitCommit(t, "commit4")
var ctx = &context.Context{ var ctx = &context.Context{
Config: config.Project{}, Config: config.Project{},
Validate: true,
} }
err := Pipe{}.Run(ctx) err := Pipe{}.Run(ctx)
assert.Error(err) assert.Error(err)
assert.Contains(err.Error(), "git tag v0.0.1 was not made against commit") assert.Contains(err.Error(), "git tag v0.0.1 was not made against commit")
} }
func TestNoValidate(t *testing.T) {
var assert = assert.New(t)
_, back := createAndChdir(t)
defer back()
gitInit(t)
gitAdd(t)
gitCommit(t, "commit5")
gitTag(t, "v0.0.1")
gitCommit(t, "commit6")
var ctx = &context.Context{
Config: config.Project{},
Validate: false,
}
assert.NoError(Pipe{}.Run(ctx))
}
// //
// helper functions // helper functions
// //

View File

@ -26,6 +26,9 @@ func (Pipe) Run(ctx *context.Context) error {
} }
func doRun(ctx *context.Context, client client.Client) error { func doRun(ctx *context.Context, client client.Client) error {
if !ctx.Publish {
return nil
}
log.Println("Creating or updating release", ctx.Git.CurrentTag, "on", ctx.Config.Release.GitHub.String()) log.Println("Creating or updating release", ctx.Git.CurrentTag, "on", ctx.Config.Release.GitHub.String())
releaseID, err := client.CreateRelease(ctx) releaseID, err := client.CreateRelease(ctx)
if err != nil { if err != nil {

View File

@ -39,6 +39,7 @@ func TestRunPipe(t *testing.T) {
}, },
}, },
}, },
Publish: true,
} }
ctx.AddArtifact(tarfile.Name()) ctx.AddArtifact(tarfile.Name())
ctx.AddArtifact(debfile.Name()) ctx.AddArtifact(debfile.Name())
@ -62,6 +63,7 @@ func TestRunPipeReleaseCreationFailed(t *testing.T) {
}, },
}, },
}, },
Publish: true,
} }
client := &DummyClient{ client := &DummyClient{
FailToCreateRelease: true, FailToCreateRelease: true,
@ -85,6 +87,7 @@ func TestRunPipeWithFileThatDontExist(t *testing.T) {
}, },
}, },
}, },
Publish: true,
} }
ctx.AddArtifact("this-file-wont-exist-hopefuly") ctx.AddArtifact("this-file-wont-exist-hopefuly")
client := &DummyClient{} client := &DummyClient{}
@ -112,6 +115,7 @@ func TestRunPipeUploadFailure(t *testing.T) {
}, },
}, },
}, },
Publish: true,
} }
ctx.AddArtifact(tarfile.Name()) ctx.AddArtifact(tarfile.Name())
client := &DummyClient{ client := &DummyClient{
@ -122,6 +126,17 @@ func TestRunPipeUploadFailure(t *testing.T) {
assert.False(client.UploadedFile) assert.False(client.UploadedFile)
} }
func TestSkipPublish(t *testing.T) {
var assert = assert.New(t)
var ctx = &context.Context{
Publish: false,
}
client := &DummyClient{}
assert.NoError(doRun(ctx, client))
assert.False(client.CreatedRelease)
assert.False(client.UploadedFile)
}
type DummyClient struct { type DummyClient struct {
FailToCreateRelease bool FailToCreateRelease bool
FailToUpload bool FailToUpload bool