public static VersionIncrementStrategy CreateFrom(IEnumerable <ConventionalCommit> conventionalCommits) { // TODO: Quick and dirty implementation - Conventions? Better comparison? var versionImpact = VersionImpact.None; foreach (var conventionalCommit in conventionalCommits) { if (!string.IsNullOrWhiteSpace(conventionalCommit.Type)) { if (conventionalCommit.IsFix) { versionImpact = MaxVersionImpact(versionImpact, VersionImpact.Patch); } else if (conventionalCommit.IsFeature) { versionImpact = MaxVersionImpact(versionImpact, VersionImpact.Minor); } } if (conventionalCommit.IsBreakingChange) { versionImpact = MaxVersionImpact(versionImpact, VersionImpact.Major); } } return(new VersionIncrementStrategy(versionImpact)); }
private bool IsWithinPrereleaseVersionRange(SemanticVersion version, VersionImpact versionImpact) { return(versionImpact switch { VersionImpact.None => true, VersionImpact.Patch => true, VersionImpact.Minor => version.Patch == 0, VersionImpact.Major => version.Patch == 0 && version.Minor == 0, _ => throw new InvalidOperationException($"Version impact of {versionImpact} cannot be handled"), });
private static VersionImpact MaxVersionImpact(VersionImpact impact1, VersionImpact impact2) { return((VersionImpact)Math.Max((int)impact1, (int)impact2)); }
private VersionIncrementStrategy(VersionImpact versionImpact) { _versionImpact = versionImpact; }
private VersionIncrementStrategy(VersionImpact impact, bool isMaster) { _impact = impact; _isMaster = isMaster; }
private static VersionImpact MaxImpact(VersionImpact left, VersionImpact right) { return((VersionImpact)Math.Max((int)left, (int)right)); }