public static SemanticVersion IncrementPatchVersion(this SemanticVersion version) { if (version.IsPrerelease) { var prereleaseIdentifier = PrereleaseIdentifier.Parse(version); return(version.IncrementPrerelease(prereleaseIdentifier.Label)); } else { return(new SemanticVersion(version.Major, version.Minor, version.Patch + 1)); } }
public SemanticVersion NextVersion(SemanticVersion version, string prereleaseLabel = null) { var versionImpact = CalculateVersionImpact(); var isPrerelease = !string.IsNullOrEmpty(prereleaseLabel); var nextVersion = versionImpact switch { VersionImpact.Patch => new SemanticVersion(version.Major, version.Minor, version.Patch + 1), VersionImpact.Minor => new SemanticVersion(version.Major, version.Minor + 1, 0), VersionImpact.Major => new SemanticVersion(version.Major + 1, 0, 0), VersionImpact.None => version, _ => throw new InvalidOperationException($"Version impact of {versionImpact} cannot be handled"), }; if (version.IsPrerelease && isPrerelease) { if (versionImpact == VersionImpact.None) { return(version); } return(IsWithinPrereleaseVersionRange(version, versionImpact)?version.IncrementPrerelease(prereleaseLabel):nextVersion.AsPrerelease(prereleaseLabel, 0)); } else if (!version.IsPrerelease && isPrerelease) { return(nextVersion.AsPrerelease(prereleaseLabel, 0)); } else if (version.IsPrerelease && !isPrerelease) { return((IsWithinPrereleaseVersionRange(version, versionImpact)?version:nextVersion).AsRelease()); } else { return(nextVersion); } }