Skip to content

Commit

Permalink
fix: unhandled stable to prerelease case
Browse files Browse the repository at this point in the history
insignificant commit didn't bump patch version

closes #98
  • Loading branch information
cabauman committed Sep 16, 2023
1 parent a778615 commit dc71d88
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 6 deletions.
21 changes: 19 additions & 2 deletions Versionize.Tests/VersionIncrementStrategyTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -118,6 +118,12 @@ public static IEnumerable<object[]> 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<object[]> PrereleaseToPrerelease()
Expand Down Expand Up @@ -150,6 +156,7 @@ public static IEnumerable<object[]> 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")
Expand All @@ -162,6 +169,7 @@ public static IEnumerable<object[]> PrereleaseToPrerelease()
.FromVersion("1.0.0-alpha.0")
.GivenCommit("chore")
.Prerelease("alpha")
.IgnoreInsignificantCommits()
.ExpectVersion("1.0.0-alpha.0");
}

Expand Down Expand Up @@ -202,6 +210,7 @@ public class TestScenarioBuilder
private string _prereleaseLabel;
private SemanticVersion _fromVersion;
private string _description;
private bool _ignoreInsignificantCommits;

public TestScenarioBuilder FromVersion(string version)
{
Expand Down Expand Up @@ -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);
Expand All @@ -258,6 +273,7 @@ public object[] Build()
FromVersion = _fromVersion,
PrereleaseLabel = _prereleaseLabel,
Description = _description,
IgnoreInsignificantCommits = _ignoreInsignificantCommits,
}
};
}
Expand All @@ -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()
{
Expand Down
13 changes: 10 additions & 3 deletions Versionize/VersionIncrementStrategy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,12 @@ public VersionIncrementStrategy(IEnumerable<ConventionalCommit> 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
Expand Down Expand Up @@ -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;
Expand All @@ -78,6 +81,10 @@ private VersionImpact CalculateVersionImpact()
{
versionImpact = MaxVersionImpact(versionImpact, VersionImpact.Minor);
}
else if (allowInsignificantCommits)
{
versionImpact = MaxVersionImpact(versionImpact, VersionImpact.Patch);
}
}

if (conventionalCommit.IsBreakingChange)
Expand Down
5 changes: 4 additions & 1 deletion Versionize/WorkingCopy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down

0 comments on commit dc71d88

Please sign in to comment.