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 {
|
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,
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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()
|
||||||
|
@ -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"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 ``
|
||||||
|
Reference in New Issue
Block a user