mirror of
https://github.com/apricote/releaser-pleaser.git
synced 2026-01-13 13:21:00 +00:00
feat(github): mark pre-releases correctly (#110)
In theory every forge can support this, but right now only GitHub allows one to define a release as "pre-release". Closes #45
This commit is contained in:
parent
ef1d92cff0
commit
dd166ec446
4 changed files with 50 additions and 2 deletions
|
|
@ -110,3 +110,16 @@ func parseSemverWithDefault(tag *git.Tag) (semver.Version, error) {
|
||||||
|
|
||||||
return parsedVersion, nil
|
return parsedVersion, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s semVer) IsPrerelease(version string) bool {
|
||||||
|
semVersion, err := parseSemverWithDefault(&git.Tag{Hash: "", Name: version})
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(semVersion.Pre) > 0 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -388,3 +388,37 @@ func TestVersionBumpFromCommits(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSemVer_IsPrerelease(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
version string
|
||||||
|
want bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "empty string",
|
||||||
|
version: "",
|
||||||
|
want: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "stable version",
|
||||||
|
version: "v1.0.0",
|
||||||
|
want: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "pre-release version",
|
||||||
|
version: "v1.0.0-rc.1+foo",
|
||||||
|
want: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "invalid version",
|
||||||
|
version: "ajfkdafjdsfj",
|
||||||
|
want: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
assert.Equalf(t, tt.want, SemVer.IsPrerelease(tt.version), "IsSemverPrerelease(%v)", tt.version)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import (
|
||||||
|
|
||||||
type Strategy interface {
|
type Strategy interface {
|
||||||
NextVersion(git.Releases, VersionBump, NextVersionType) (string, error)
|
NextVersion(git.Releases, VersionBump, NextVersionType) (string, error)
|
||||||
|
IsPrerelease(version string) bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type VersionBump conventionalcommits.VersionBump
|
type VersionBump conventionalcommits.VersionBump
|
||||||
|
|
|
||||||
|
|
@ -122,10 +122,10 @@ func (rp *ReleaserPleaser) createPendingRelease(ctx context.Context, pr *release
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: pre-release & latest
|
// TODO: Check if version should be marked latest
|
||||||
|
|
||||||
logger.DebugContext(ctx, "Creating release on forge")
|
logger.DebugContext(ctx, "Creating release on forge")
|
||||||
err = rp.forge.CreateRelease(ctx, *pr.ReleaseCommit, version, changelogText, false, true)
|
err = rp.forge.CreateRelease(ctx, *pr.ReleaseCommit, version, changelogText, rp.versioning.IsPrerelease(version), true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to create release on forge: %w", err)
|
return fmt.Errorf("failed to create release on forge: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue