Skip to content

Commit 5c9fc28

Browse files
committed
Fix wrong version generation for ContinuesDeployment actual: 5.0.0-beta.1+3 expected 5.0.0-beta.3
1 parent d49e570 commit 5c9fc28

File tree

4 files changed

+53
-19
lines changed

4 files changed

+53
-19
lines changed

src/GitVersion.Core.Tests/IntegrationTests/OtherScenarios.cs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -988,4 +988,43 @@ public void IncreaseVersionWithBumpMessageWhenCommitMessageIncrementIsEnabledAnd
988988
// ✅ succeeds as expected
989989
fixture.AssertFullSemver("2.0.0-pre.1", configuration);
990990
}
991+
992+
[Test]
993+
public void ShouldProvideTheCorrectVersionEvenIfPreReleaseLabelExistsInTheGitTagMain()
994+
{
995+
var configuration = GitFlowConfigurationBuilder.New
996+
.WithNextVersion("5.0")
997+
.WithSemanticVersionFormat(SemanticVersionFormat.Loose)
998+
.WithBranch("main", _ => _
999+
.WithLabel("beta")
1000+
.WithIncrement(IncrementStrategy.Patch)
1001+
.WithVersioningMode(VersioningMode.ContinuousDeployment)
1002+
).Build();
1003+
1004+
using EmptyRepositoryFixture fixture = new("main");
1005+
fixture.MakeACommit();
1006+
1007+
// ✅ succeeds as expected
1008+
fixture.AssertFullSemver("5.0.0-beta.1", configuration);
1009+
1010+
fixture.MakeACommit();
1011+
1012+
// ✅ succeeds as expected
1013+
fixture.AssertFullSemver("5.0.0-beta.2", configuration);
1014+
1015+
fixture.ApplyTag("5.0.0-beta.3");
1016+
1017+
// ✅ succeeds as expected
1018+
fixture.AssertFullSemver("5.0.0-beta.3", configuration);
1019+
1020+
fixture.MakeATaggedCommit("5.0.0-rc.1");
1021+
1022+
// ✅ succeeds as expected
1023+
fixture.AssertFullSemver("5.0.0-beta.4", configuration);
1024+
1025+
fixture.MakeACommit();
1026+
1027+
// ✅ succeeds as expected
1028+
fixture.AssertFullSemver("5.0.0-beta.5", configuration);
1029+
}
9911030
}

src/GitVersion.Core.Tests/VersionCalculation/VariableProviderTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,9 @@ public void ProvidesVariablesInContinuousDeploymentModeForStableWhenCurrentCommi
146146

147147
var configuration = new TestEffectiveConfiguration(versioningMode: VersioningMode.ContinuousDeployment);
148148

149-
var vars = this.variableProvider.GetVariablesFor(semVer, configuration, SemanticVersion.Empty);
149+
var variables = this.variableProvider.GetVariablesFor(semVer, configuration, SemanticVersion.Empty);
150150

151-
vars.ToString().ShouldMatchApproved(c => c.SubFolder("Approved"));
151+
variables.ToString().ShouldMatchApproved(c => c.SubFolder("Approved"));
152152
}
153153

154154
[Test]

src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,7 @@ private NextVersion Calculate(IBranch branch, IGitVersionConfiguration configura
118118
using (log.IndentLog("Calculating the base versions"))
119119
{
120120
var nextVersions = GetNextVersions(branch, configuration).ToArray();
121-
var maxVersion = nextVersions.Max();
122-
123-
maxVersion.NotNull();
121+
var maxVersion = nextVersions.Max()!;
124122

125123
var matchingVersionsOnceIncremented = nextVersions
126124
.Where(v => v.BaseVersion.BaseVersionSource != null && v.IncrementedVersion == maxVersion.IncrementedVersion)

src/GitVersion.Core/VersionCalculation/VariableProvider.cs

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,19 @@ public class VariableProvider : IVariableProvider
1515
public VersionVariables GetVariablesFor(
1616
SemanticVersion semanticVersion, EffectiveConfiguration configuration, SemanticVersion? currentCommitTaggedVersion)
1717
{
18+
semanticVersion.NotNull();
19+
configuration.NotNull();
20+
1821
var preReleaseTagName = semanticVersion.PreReleaseTag.Name;
22+
var isContinuousDeploymentMode = configuration.VersioningMode == VersioningMode.ContinuousDeployment;
23+
24+
var label = configuration.GetBranchSpecificLabel(semanticVersion.BuildMetaData.Branch, null);
25+
var isCommitTagged = currentCommitTaggedVersion is not null && currentCommitTaggedVersion.IsMatchForBranchSpecificLabel(label);
1926

20-
var isContinuousDeploymentMode = configuration.VersioningMode == VersioningMode.ContinuousDeployment
21-
&& currentCommitTaggedVersion is null;
22-
if (isContinuousDeploymentMode)
27+
// Continuous Deployment always requires a pre-release tag unless the commit is tagged
28+
if (isContinuousDeploymentMode && !isCommitTagged && !semanticVersion.PreReleaseTag.HasTag() && preReleaseTagName.IsNullOrEmpty())
2329
{
24-
semanticVersion = new SemanticVersion(semanticVersion);
25-
// Continuous Deployment always requires a pre-release tag unless the commit is tagged
26-
if (!semanticVersion.PreReleaseTag.HasTag())
27-
{
28-
preReleaseTagName = configuration.GetBranchSpecificLabel(semanticVersion.BuildMetaData.Branch, null);
29-
if (preReleaseTagName.IsNullOrEmpty())
30-
{
31-
preReleaseTagName = configuration.Label ?? string.Empty;
32-
}
33-
}
30+
preReleaseTagName = label ?? string.Empty;
3431
}
3532

3633
// Evaluate tag number pattern and append to prerelease tag, preserving build metadata
@@ -45,7 +42,7 @@ public VersionVariables GetVariablesFor(
4542
}
4643
}
4744

48-
if (isContinuousDeploymentMode || appendTagNumberPattern || configuration.VersioningMode == VersioningMode.Mainline)
45+
if ((!isCommitTagged && isContinuousDeploymentMode) || appendTagNumberPattern || configuration.VersioningMode == VersioningMode.Mainline)
4946
{
5047
semanticVersion = PromoteNumberOfCommitsToTagNumber(semanticVersion, preReleaseTagName);
5148
}

0 commit comments

Comments
 (0)