in release/release.go [158:214]
func calculateNextVersion(parsed semver.Parsed, increment changelog.SemVerIncrement, config repotools.ModuleConfig) (string, error) {
if increment == changelog.ReleaseBump {
// Release Bumps are used to elevate pre-release tag versions to released versions
// Examples:
// v1.4.0-preview => v1.4.0
// v1.4.0-preview.1 => v1.4.0
if len(parsed.Prerelease) == 0 {
return "", fmt.Errorf("changelog annotation requests release bump, but latest tag is not a pre-release")
}
parsed.Prerelease = ""
} else if len(parsed.Prerelease) > 0 {
// The existing tag is a pre-release so just increment the pre-release tag number
// Examples:
// v1.4.0-preview => v1.4.0-preview.1
// v1.4.0-preview.2 => v1.4.0-preview.3
// v1.4.0-preview => v1.4.0-rc (if different pre-release identifier is configured)
if err := incrementPrerelease(&parsed.Prerelease, config.PreRelease); err != nil {
return "", err
}
} else if len(parsed.Prerelease) == 0 && len(config.PreRelease) > 0 {
// The latest tag was not a pre-release but module is configured for pre-release
// It is assumed that the target final version is intended to be a minor bump, so we simulate that here
// when constructing the pre-release tag.
// Example: v1.3.6 => v1.3.6-preview
if err := incrementStrInt(&parsed.Patch); err != nil {
return "", err
}
identifier := config.PreRelease
if !strings.HasPrefix(identifier, "-") {
identifier = "-" + identifier
}
parsed.Prerelease = identifier
} else if increment == changelog.MinorBump {
// Module should be bumped by a minor version
// Example: v1.2.3 => v1.3.0
if err := incrementStrInt(&parsed.Minor); err != nil {
return "", err
}
parsed.Patch = "0"
} else {
// Patch Bump
// Example: v1.2.3 => v1.2.4
if err := incrementStrInt(&parsed.Patch); err != nil {
return "", err
}
}
return parsed.String(), nil
}