fix(prerelease): calculate right version if branch is set to alpha,beta or rc

This commit is contained in:
Nightapes
2020-01-26 17:08:57 +01:00
parent 6a375f3bab
commit c361744a35
5 changed files with 82 additions and 56 deletions

View File

@@ -19,9 +19,9 @@ func New() *Calculator {
}
//IncPrerelease increase prerelease by one
func (c *Calculator) IncPrerelease(preReleaseType string, version *semver.Version) (semver.Version, error) {
func (c *Calculator) IncPrerelease(preReleaseType string, version semver.Version) (semver.Version, error) {
defaultPrerelease := preReleaseType + ".0"
if version.Prerelease() == "" || !strings.HasPrefix(version.Prerelease(), preReleaseType) {
if !c.hasPrerelease(version, preReleaseType) {
return version.SetPrerelease(defaultPrerelease)
}
@@ -32,19 +32,31 @@ func (c *Calculator) IncPrerelease(preReleaseType string, version *semver.Versio
log.Warnf("Could not parse release tag %s, use version %s", version.Prerelease(), version.String())
return version.SetPrerelease(defaultPrerelease)
}
return version.SetPrerelease(preReleaseType + "." + strconv.Itoa((i + 1)))
return version.SetPrerelease(preReleaseType + "." + strconv.Itoa(i+1))
}
log.Warnf("Could not parse release tag %s, use version %s", version.Prerelease(), version.String())
return version.SetPrerelease(defaultPrerelease)
}
func (c *Calculator) hasPrerelease(version semver.Version, preReleaseType string) bool {
if version.Prerelease() == "" || !strings.HasPrefix(version.Prerelease(), preReleaseType) {
return false
}
return true
}
//CalculateNewVersion from given commits and lastversion
func (c *Calculator) CalculateNewVersion(commits map[shared.Release][]shared.AnalyzedCommit, lastVersion *semver.Version, releaseType string, firstRelease bool) semver.Version {
switch releaseType {
case "beta", "alpha", "rc":
var version = *lastVersion
if !c.hasPrerelease(*lastVersion, releaseType) {
version, _ = c.inc(commits, lastVersion)
}
if len(commits["major"]) > 0 || len(commits["minor"]) > 0 || len(commits["patch"]) > 0 {
version, _ := c.IncPrerelease(releaseType, lastVersion)
version, _ := c.IncPrerelease(releaseType, version)
return version
}
case "release":
@@ -53,16 +65,23 @@ func (c *Calculator) CalculateNewVersion(commits map[shared.Release][]shared.Ana
newVersion, _ := lastVersion.SetPrerelease("")
return newVersion
}
if len(commits["major"]) > 0 {
return lastVersion.IncMajor()
} else if len(commits["minor"]) > 0 {
return lastVersion.IncMinor()
} else if len(commits["patch"]) > 0 {
return lastVersion.IncPatch()
version, done := c.inc(commits, lastVersion)
if done {
return version
}
}
}
return *lastVersion
}
func (c *Calculator) inc(commits map[shared.Release][]shared.AnalyzedCommit, lastVersion *semver.Version) (semver.Version, bool) {
if len(commits["major"]) > 0 {
return lastVersion.IncMajor(), true
} else if len(commits["minor"]) > 0 {
return lastVersion.IncMinor(), true
} else if len(commits["patch"]) > 0 {
return lastVersion.IncPatch(), true
}
return semver.Version{}, false
}