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

feat: set github as pre-release if tag has a pre-release indicator (#871)

* Add check if tag contains indicator for pre release

* update release.md docs
This commit is contained in:
Felix Gläske
2018-11-29 19:42:14 +01:00
committed by Carlos Alexandro Becker
parent 5e3e6b2e85
commit 71abba61c3
6 changed files with 60 additions and 3 deletions

View File

@ -94,12 +94,13 @@ func (c *githubClient) CreateRelease(ctx *context.Context, body string) (int64,
if err != nil {
return 0, err
}
var data = &github.RepositoryRelease{
Name: github.String(title),
TagName: github.String(ctx.Git.CurrentTag),
Body: github.String(body),
Draft: github.Bool(ctx.Config.Release.Draft),
Prerelease: github.Bool(ctx.Config.Release.Prerelease),
Prerelease: github.Bool(ctx.PreRelease),
}
release, _, err = c.client.Repositories.GetReleaseByTag(
ctx,

View File

@ -3,12 +3,14 @@ package release
import (
"os"
"github.com/Masterminds/semver"
"github.com/apex/log"
"github.com/goreleaser/goreleaser/internal/artifact"
"github.com/goreleaser/goreleaser/internal/client"
"github.com/goreleaser/goreleaser/internal/pipe"
"github.com/goreleaser/goreleaser/internal/semerrgroup"
"github.com/goreleaser/goreleaser/pkg/context"
"github.com/pkg/errors"
)
// Pipe for github release
@ -31,6 +33,28 @@ func (Pipe) Default(ctx *context.Context) error {
return err
}
ctx.Config.Release.GitHub = repo
ctx.PreRelease = false
// Check if we have to check the git tag for an indicator to mark as pre release
switch ctx.Config.Release.Prerelease {
case "auto":
sv, err := semver.NewVersion(ctx.Git.CurrentTag)
if err != nil {
return errors.Wrapf(err, "Failed to parse tag %s as semver", ctx.Git.CurrentTag)
}
if sv.Prerelease() != "" {
ctx.PreRelease = true
}
log.Debugf("Pre-Release was detected for tag %s: %v", ctx.Git.CurrentTag, ctx.PreRelease)
case "true":
ctx.PreRelease = true
case "false":
ctx.PreRelease = false
default:
log.Warnf("Invalid value %s for prerelease. Should be auto, true or false")
}
return nil
}

View File

@ -149,6 +149,35 @@ func TestDefault(t *testing.T) {
assert.Equal(t, "goreleaser", ctx.Config.Release.GitHub.Owner)
}
func TestDefaultPreReleaseAuto(t *testing.T) {
_, back := testlib.Mktmp(t)
defer back()
testlib.GitInit(t)
testlib.GitRemoteAdd(t, "git@github.com:goreleaser/goreleaser.git")
t.Run("auto-release", func(t *testing.T) {
var ctx = context.New(config.Project{
Release: config.Release{
Prerelease: "auto",
},
})
ctx.Git.CurrentTag = "v1.0.0"
assert.NoError(t, Pipe{}.Default(ctx))
assert.Equal(t, false, ctx.PreRelease)
})
t.Run("auto-rc", func(t *testing.T) {
var ctx = context.New(config.Project{
Release: config.Release{
Prerelease: "auto",
},
})
ctx.Git.CurrentTag = "v1.0.1-rc1"
assert.NoError(t, Pipe{}.Default(ctx))
assert.Equal(t, true, ctx.PreRelease)
})
}
func TestDefaultPipeDisabled(t *testing.T) {
_, back := testlib.Mktmp(t)
defer back()

View File

@ -158,8 +158,8 @@ type Archive struct {
type Release struct {
GitHub Repo `yaml:",omitempty"`
Draft bool `yaml:",omitempty"`
Prerelease bool `yaml:",omitempty"`
Disable bool `yaml:",omitempty"`
Prerelease string `yaml:",omitempty"`
NameTemplate string `yaml:"name_template,omitempty"`
}

View File

@ -41,6 +41,7 @@ type Context struct {
SkipValidate bool
RmDist bool
Debug bool
PreRelease bool
Parallelism int
}

View File

@ -24,9 +24,11 @@ release:
# Default is false.
draft: true
# If set to auto, will mark the release as not ready for production
# in case there is an indicator for this in the tag e.g. v1.0.0.-rc1
# If set to true, will mark the release as not ready for production.
# Default is false.
prerelease: true
prerelease: auto
# You can change the name of the GitHub release.
# Default is ``