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 { if err != nil {
return 0, err return 0, err
} }
var data = &github.RepositoryRelease{ var data = &github.RepositoryRelease{
Name: github.String(title), Name: github.String(title),
TagName: github.String(ctx.Git.CurrentTag), TagName: github.String(ctx.Git.CurrentTag),
Body: github.String(body), Body: github.String(body),
Draft: github.Bool(ctx.Config.Release.Draft), 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( release, _, err = c.client.Repositories.GetReleaseByTag(
ctx, ctx,

View File

@ -3,12 +3,14 @@ package release
import ( import (
"os" "os"
"github.com/Masterminds/semver"
"github.com/apex/log" "github.com/apex/log"
"github.com/goreleaser/goreleaser/internal/artifact" "github.com/goreleaser/goreleaser/internal/artifact"
"github.com/goreleaser/goreleaser/internal/client" "github.com/goreleaser/goreleaser/internal/client"
"github.com/goreleaser/goreleaser/internal/pipe" "github.com/goreleaser/goreleaser/internal/pipe"
"github.com/goreleaser/goreleaser/internal/semerrgroup" "github.com/goreleaser/goreleaser/internal/semerrgroup"
"github.com/goreleaser/goreleaser/pkg/context" "github.com/goreleaser/goreleaser/pkg/context"
"github.com/pkg/errors"
) )
// Pipe for github release // Pipe for github release
@ -31,6 +33,28 @@ func (Pipe) Default(ctx *context.Context) error {
return err return err
} }
ctx.Config.Release.GitHub = repo 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 return nil
} }

View File

@ -149,6 +149,35 @@ func TestDefault(t *testing.T) {
assert.Equal(t, "goreleaser", ctx.Config.Release.GitHub.Owner) 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) { func TestDefaultPipeDisabled(t *testing.T) {
_, back := testlib.Mktmp(t) _, back := testlib.Mktmp(t)
defer back() defer back()

View File

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

View File

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

View File

@ -24,9 +24,11 @@ release:
# Default is false. # Default is false.
draft: true 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. # If set to true, will mark the release as not ready for production.
# Default is false. # Default is false.
prerelease: true prerelease: auto
# You can change the name of the GitHub release. # You can change the name of the GitHub release.
# Default is `` # Default is ``