Skip to content

Commit f696177

Browse files
ruhullahshahRuh Ullah Shah
authored andcommitted
Problem: Tagged commits end up having a zero WeightedPreReleaseNumber, especially
in GitFlow branching scenarios. This could lead to an emission of AssemblyFileSemVer that is not strictly increasing. Solution: Introduce a new configuration parameter, tag-pre-release-weight, that could overrwrite the WeightedPreReleaseNumber if it turns out to be 0.
1 parent b264fff commit f696177

16 files changed

+147
-55
lines changed

docs/input/docs/configuration.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,10 @@ The number of characters to pad `CommitsSinceVersionSource` to in the
199199
set to `4`, which will pad the `CommitsSinceVersionSource` value of `1` to
200200
`0001`.
201201

202+
### tag-pre-release-weight
203+
204+
The pre-release weight in case of tagged commits. If the value is not set in the configuration, a default weight of 0 is used instead. If the `WeightedPreReleaseNumber` [variable](./more-info/variables) is 0 and this parameter is set, its value is used. This helps if your branching model is GitFlow and the last release build, which is often tagged, can utilise this parameter to produce a monotonically increasing build number.
205+
202206
### commit-message-incrementing
203207

204208
Sets whether it should be possible to increment the version with special syntax

src/GitVersionCore.Tests/Configuration/ConfigProviderTests.CanWriteOutEffectiveConfiguration.approved.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ no-bump-message: '\+semver:\s?(none|skip)'
1010
legacy-semver-padding: 4
1111
build-metadata-padding: 4
1212
commits-since-version-source-padding: 4
13+
tag-pre-release-weight: 0
1314
commit-message-incrementing: Enabled
1415
branches:
1516
develop:

src/GitVersionCore.Tests/Helpers/TestEffectiveConfiguration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public TestEffectiveConfiguration(
4343
majorMessage, minorMessage, patchMessage, noBumpMessage,
4444
commitMessageMode, legacySemVerPadding, buildMetaDataPadding, commitsSinceVersionSourcePadding,
4545
versionFilters ?? Enumerable.Empty<IVersionFilter>(),
46-
tracksReleaseBranches, isRelease, commitDateFormat, updateBuildNumber, 0)
46+
tracksReleaseBranches, isRelease, commitDateFormat, updateBuildNumber, 0, 0, 0)
4747
{
4848
}
4949
}
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
using GitTools.Testing;
2+
using GitVersion.Configuration;
3+
using GitVersion.Model.Configuration;
4+
using GitVersion.VersionCalculation;
5+
using NUnit.Framework;
6+
using Shouldly;
7+
8+
namespace GitVersionCore.Tests.IntegrationTests
9+
{
10+
[TestFixture]
11+
class VersionInTagScenarios
12+
{
13+
[Test]
14+
public void TagPreReleaseWeightIsNotConfigured_HeadIsATaggedCommit_WeightedPreReleaseNumberShouldBeZero()
15+
{
16+
// Arrange
17+
var config = new Config()
18+
{
19+
AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}",
20+
};
21+
config.ApplyDefaults();
22+
23+
// Act
24+
using var fixture = new BaseGitFlowRepositoryFixture("1.0.0");
25+
fixture.MakeATaggedCommit("1.1.0");
26+
var version = fixture.GetVersion(config);
27+
28+
// Assert
29+
version.AssemblySemFileVer.ShouldBe("1.1.0.0");
30+
}
31+
32+
[Test]
33+
public void TagPreReleaseWeightIsConfigured_HeadIsATaggedCommit_WeightedPreReleaseNumberShouldBeTheSameAsTheTagPreReleaseWeight()
34+
{
35+
// Arrange
36+
var config = new Config()
37+
{
38+
AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}",
39+
TagPreReleaseWeight = 60000
40+
};
41+
config.ApplyDefaults();
42+
43+
// Act
44+
using var fixture = new BaseGitFlowRepositoryFixture("1.0.0");
45+
fixture.MakeATaggedCommit("1.1.0");
46+
var version = fixture.GetVersion(config);
47+
48+
// Assert
49+
version.AssemblySemFileVer.ShouldBe("1.1.0.60000");
50+
}
51+
52+
[Test]
53+
public void TagPreReleaseWeightIsConfigured_GitFlowReleaseIsFinished_WeightedPreReleaseNumberShouldBeTheSameAsTheTagPreReleaseWeight()
54+
{
55+
// Arrange
56+
var config = new Config()
57+
{
58+
AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}",
59+
TagPreReleaseWeight = 60000,
60+
VersioningMode = VersioningMode.ContinuousDeployment
61+
};
62+
config.ApplyDefaults();
63+
64+
// Act
65+
using var fixture = new BaseGitFlowRepositoryFixture("1.0.0");
66+
fixture.Checkout("master");
67+
fixture.MergeNoFF("develop");
68+
fixture.Checkout("develop");
69+
fixture.MakeACommit("Feature commit 1");
70+
fixture.BranchTo("release/1.1.0");
71+
fixture.MakeACommit("Release commit 1");
72+
fixture.AssertFullSemver("1.1.0-beta.1", config);
73+
fixture.ApplyTag("1.1.0");
74+
var version = fixture.GetVersion(config);
75+
76+
// Assert
77+
version.AssemblySemFileVer.ShouldBe("1.1.0.60000");
78+
}
79+
80+
[Test]
81+
public void TagPreReleaseWeightIsNotConfigured_GitFlowReleaseIsFinished_WeightedPreReleaseNumberShouldBeZero()
82+
{
83+
// Arrange
84+
var config = new Config()
85+
{
86+
AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}",
87+
VersioningMode = VersioningMode.ContinuousDeployment
88+
};
89+
config.ApplyDefaults();
90+
91+
// Act
92+
using var fixture = new BaseGitFlowRepositoryFixture("1.0.0");
93+
fixture.Checkout("master");
94+
fixture.MergeNoFF("develop");
95+
fixture.Checkout("develop");
96+
fixture.MakeACommit("Feature commit 1");
97+
fixture.BranchTo("release/1.1.0");
98+
fixture.MakeACommit("Release commit 1");
99+
fixture.AssertFullSemver("1.1.0-beta.1", config);
100+
fixture.ApplyTag("1.1.0");
101+
var version = fixture.GetVersion(config);
102+
103+
// Assert
104+
version.AssemblySemFileVer.ShouldBe("1.1.0.0");
105+
}
106+
}
107+
}

src/GitVersionCore.Tests/Model/CommitDateTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public void CommitDateFormatTest(string format, string expectedOutcome)
2929
},
3030
new EffectiveConfiguration(
3131
AssemblyVersioningScheme.MajorMinorPatch, AssemblyFileVersioningScheme.MajorMinorPatch, "", "", "", VersioningMode.ContinuousDelivery, "", "", "", IncrementStrategy.Inherit,
32-
"", true, "", "", false, "", "", "", "", CommitMessageIncrementMode.Enabled, 4, 4, 4, Enumerable.Empty<IVersionFilter>(), false, true, format, false, 0)
32+
"", true, "", "", false, "", "", "", "", CommitMessageIncrementMode.Enabled, 4, 4, 4, Enumerable.Empty<IVersionFilter>(), false, true, format, false, 0, 0)
3333
);
3434

3535
Assert.That(formatValues.CommitDate, Is.EqualTo(expectedOutcome));

src/GitVersionCore.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForFeatureBranch.approved.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"PreReleaseTagWithDash":"",
77
"PreReleaseLabel":"",
88
"PreReleaseNumber":"",
9-
"WeightedPreReleaseNumber":"",
9+
"WeightedPreReleaseNumber":0,
1010
"BuildMetaData":5,
1111
"BuildMetaDataPadded":"0005",
1212
"FullBuildMetaData":"5.Branch.feature-123.Sha.commitSha",

src/GitVersionCore.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForFeatureBranchWithCustomAssemblyInfoFormat.approved.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"PreReleaseTagWithDash":"",
77
"PreReleaseLabel":"",
88
"PreReleaseNumber":"",
9-
"WeightedPreReleaseNumber":"",
9+
"WeightedPreReleaseNumber":0,
1010
"BuildMetaData":5,
1111
"BuildMetaDataPadded":"0005",
1212
"FullBuildMetaData":"5.Branch.feature-123.Sha.commitSha",

src/GitVersionCore.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForStable.approved.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"PreReleaseTagWithDash":"",
77
"PreReleaseLabel":"",
88
"PreReleaseNumber":"",
9-
"WeightedPreReleaseNumber":"",
9+
"WeightedPreReleaseNumber":0,
1010
"BuildMetaData":5,
1111
"BuildMetaDataPadded":"0005",
1212
"FullBuildMetaData":"5.Branch.develop.Sha.commitSha",

src/GitVersionCore.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForStableWhenCurrentCommitIsTagged.approved.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"PreReleaseTagWithDash":"",
77
"PreReleaseLabel":"",
88
"PreReleaseNumber":"",
9-
"WeightedPreReleaseNumber":"",
9+
"WeightedPreReleaseNumber":0,
1010
"BuildMetaData":5,
1111
"BuildMetaDataPadded":"0005",
1212
"FullBuildMetaData":"5.Sha.commitSha",

src/GitVersionCore.Tests/VersionCalculation/Strategies/TaggedCommitVersionStrategyTests.cs

Lines changed: 0 additions & 43 deletions
This file was deleted.

0 commit comments

Comments
 (0)