diff --git a/Versionize.Tests/VersionIncrementStrategyTests.cs b/Versionize.Tests/VersionIncrementStrategyTests.cs index 6682782..e0d8e18 100644 --- a/Versionize.Tests/VersionIncrementStrategyTests.cs +++ b/Versionize.Tests/VersionIncrementStrategyTests.cs @@ -21,7 +21,7 @@ public void ShouldNotIncrementPatchVersionForInsignificantCommitsIfIgnoreInsigni new ConventionalCommit { Type = "chore" } }); - strategy.NextVersion(new SemanticVersion(1, 1, 1)).ShouldBe(new SemanticVersion(1, 1, 1)); + strategy.NextVersion(new SemanticVersion(1, 1, 1), null, false).ShouldBe(new SemanticVersion(1, 1, 1)); } [Fact] @@ -82,7 +82,7 @@ public void ShouldIncrementVersionFromPrereleaseToPrerelease(TestScenario testSc { var strategy = new VersionIncrementStrategy(testScenario.Commits); - var nextVersion = strategy.NextVersion(testScenario.FromVersion, testScenario.PrereleaseLabel); + var nextVersion = strategy.NextVersion(testScenario.FromVersion, testScenario.PrereleaseLabel, !testScenario.IgnoreInsignificantCommits); nextVersion.ShouldBe(testScenario.ExpectedVersion); } @@ -118,6 +118,12 @@ public static IEnumerable StableToPrerelease() .GivenCommit("fix") .Prerelease("alpha") .ExpectVersion("1.0.1-alpha.0"); + + yield return Scenario("release number increment from major with chore commit to patch alpha") + .FromVersion("1.0.0") + .GivenCommit("chore") + .Prerelease("alpha") + .ExpectVersion("1.0.1-alpha.0"); } public static IEnumerable PrereleaseToPrerelease() @@ -150,6 +156,7 @@ public static IEnumerable PrereleaseToPrerelease() .FromVersion("1.0.0-alpha.0") .GivenCommit("chore") .Prerelease("alpha") + .IgnoreInsignificantCommits() .ExpectVersion("1.0.0-alpha.0"); yield return Scenario("pre-release number increment from minor with fix commit with new pre-release label") @@ -162,6 +169,7 @@ public static IEnumerable PrereleaseToPrerelease() .FromVersion("1.0.0-alpha.0") .GivenCommit("chore") .Prerelease("alpha") + .IgnoreInsignificantCommits() .ExpectVersion("1.0.0-alpha.0"); } @@ -202,6 +210,7 @@ public class TestScenarioBuilder private string _prereleaseLabel; private SemanticVersion _fromVersion; private string _description; + private bool _ignoreInsignificantCommits; public TestScenarioBuilder FromVersion(string version) { @@ -241,6 +250,12 @@ public TestScenarioBuilder DescribedBy(string description) return this; } + public TestScenarioBuilder IgnoreInsignificantCommits() + { + _ignoreInsignificantCommits = true; + return this; + } + public object[] ExpectVersion(string expectedVersion) { _expectedVersion = SemanticVersion.Parse(expectedVersion); @@ -258,6 +273,7 @@ public object[] Build() FromVersion = _fromVersion, PrereleaseLabel = _prereleaseLabel, Description = _description, + IgnoreInsignificantCommits = _ignoreInsignificantCommits, } }; } @@ -271,6 +287,7 @@ public class TestScenario public SemanticVersion FromVersion { get; set; } public string Description { get; set; } + public bool IgnoreInsignificantCommits { get; internal set; } public override string ToString() { diff --git a/Versionize/VersionIncrementStrategy.cs b/Versionize/VersionIncrementStrategy.cs index 76a5892..d4d9be2 100644 --- a/Versionize/VersionIncrementStrategy.cs +++ b/Versionize/VersionIncrementStrategy.cs @@ -12,9 +12,12 @@ public VersionIncrementStrategy(IEnumerable conventionalComm _conventionalCommits = conventionalCommits; } - public SemanticVersion NextVersion(SemanticVersion version, string prereleaseLabel = null) + public SemanticVersion NextVersion( + SemanticVersion version, + string prereleaseLabel = null, + bool allowInsignificantCommits = true) { - var versionImpact = CalculateVersionImpact(); + var versionImpact = CalculateVersionImpact(allowInsignificantCommits); var isPrerelease = !string.IsNullOrEmpty(prereleaseLabel); var nextVersion = versionImpact switch @@ -61,7 +64,7 @@ public SemanticVersion NextVersion(SemanticVersion version, string prereleaseLab }; } - private VersionImpact CalculateVersionImpact() + private VersionImpact CalculateVersionImpact(bool allowInsignificantCommits) { // TODO: Quick and dirty implementation - Conventions? Better comparison? var versionImpact = VersionImpact.None; @@ -78,6 +81,10 @@ private VersionImpact CalculateVersionImpact() { versionImpact = MaxVersionImpact(versionImpact, VersionImpact.Minor); } + else if (allowInsignificantCommits) + { + versionImpact = MaxVersionImpact(versionImpact, VersionImpact.Patch); + } } if (conventionalCommit.IsBreakingChange) diff --git a/Versionize/WorkingCopy.cs b/Versionize/WorkingCopy.cs index 06b0b80..356b1f8 100644 --- a/Versionize/WorkingCopy.cs +++ b/Versionize/WorkingCopy.cs @@ -106,7 +106,10 @@ public SemanticVersion Versionize(VersionizeOptions options) var versionIncrement = new VersionIncrementStrategy(conventionalCommits); - var nextVersion = isInitialRelease ? projects.Version : versionIncrement.NextVersion(projects.Version, options.Prerelease); + var allowInsignificantCommits = !(options.IgnoreInsignificantCommits || options.ExitInsignificantCommits); + var nextVersion = isInitialRelease + ? projects.Version + : versionIncrement.NextVersion(projects.Version, options.Prerelease, allowInsignificantCommits); if (!isInitialRelease && nextVersion == projects.Version) {