You've already forked goreleaser
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:
committed by
Carlos Alexandro Becker
parent
5e3e6b2e85
commit
71abba61c3
@ -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,
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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"`
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,7 @@ type Context struct {
|
||||
SkipValidate bool
|
||||
RmDist bool
|
||||
Debug bool
|
||||
PreRelease bool
|
||||
Parallelism int
|
||||
}
|
||||
|
||||
|
@ -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 ``
|
||||
|
Reference in New Issue
Block a user