Skip to content

Commit 765a7b5

Browse files
committed
Add support for indicating change severity in commit messages
Adds two new increment strategies: CommitMessage and MergeMessage. While active, the version increment is determined by reading commit/merge commit messages for markers describing the change severity. For example, "+semver: breaking" will force a major version bump.
1 parent 0cb1c22 commit 765a7b5

16 files changed

+272
-132
lines changed
Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
{
2-
"Major":1,
3-
"Minor":2,
4-
"Patch":3,
5-
"PreReleaseTag":"unstable.4",
6-
"PreReleaseTagWithDash":"-unstable.4",
7-
"BuildMetaData":5,
8-
"FullBuildMetaData":"5.Branch.feature1.Sha.commitSha",
9-
"MajorMinorPatch":"1.2.3",
10-
"SemVer":"1.2.3-unstable.4",
11-
"LegacySemVer":"1.2.3-unstable4",
12-
"LegacySemVerPadded":"1.2.3-unstable0004",
13-
"AssemblySemVer":"1.2.3.0",
14-
"FullSemVer":"1.2.3-unstable.4+5",
15-
"InformationalVersion":"1.2.3-unstable.4+5.Branch.feature1.Sha.commitSha",
16-
"BranchName":"feature1",
17-
"Sha":"commitSha",
18-
"NuGetVersionV2":"1.2.3-unstable0004",
19-
"NuGetVersion":"1.2.3-unstable0004",
20-
"CommitDate":"2014-03-06"
1+
{
2+
"Major":1,
3+
"Minor":2,
4+
"Patch":3,
5+
"PreReleaseTag":"unstable.4",
6+
"PreReleaseTagWithDash":"-unstable.4",
7+
"BuildMetaData":5,
8+
"FullBuildMetaData":"5.Branch.feature1.Sha.commitSha",
9+
"MajorMinorPatch":"1.2.3",
10+
"SemVer":"1.2.3-unstable.4",
11+
"LegacySemVer":"1.2.3-unstable4",
12+
"LegacySemVerPadded":"1.2.3-unstable0004",
13+
"AssemblySemVer":"1.2.3.0",
14+
"FullSemVer":"1.2.3-unstable.4+5",
15+
"InformationalVersion":"1.2.3-unstable.4+5.Branch.feature1.Sha.commitSha",
16+
"BranchName":"feature1",
17+
"Sha":"commitSha",
18+
"NuGetVersionV2":"1.2.3-unstable0004",
19+
"NuGetVersion":"1.2.3-unstable0004",
20+
"CommitDate":"2014-03-06"
2121
}

src/GitVersionCore.Tests/TestEffectiveConfiguration.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,14 @@ public TestEffectiveConfiguration(
1414
bool preventIncrementForMergedBranchVersion = false,
1515
string tagNumberPattern = null,
1616
string continuousDeploymentFallbackTag = "ci",
17-
bool trackMergeTarget = false) :
17+
bool trackMergeTarget = false,
18+
string majorMessage = null,
19+
string minorMessage = null,
20+
IncrementStrategy messageFallback = IncrementStrategy.Patch) :
1821
base(assemblyVersioningScheme, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch,
1922
branchPrefixToTrim, preventIncrementForMergedBranchVersion, tagNumberPattern, continuousDeploymentFallbackTag,
20-
trackMergeTarget)
23+
trackMergeTarget,
24+
majorMessage, minorMessage, messageFallback)
2125
{
2226
}
2327
}
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
{
2-
"Major":1,
3-
"Minor":2,
4-
"Patch":3,
5-
"PreReleaseTag":"unstable.4",
6-
"PreReleaseTagWithDash":"-unstable.4",
7-
"BuildMetaData":5,
8-
"FullBuildMetaData":"5.Branch.develop.Sha.commitSha",
9-
"MajorMinorPatch":"1.2.3",
10-
"SemVer":"1.2.3-unstable.4",
11-
"LegacySemVer":"1.2.3-unstable4",
12-
"LegacySemVerPadded":"1.2.3-unstable0004",
13-
"AssemblySemVer":"1.2.3.0",
14-
"FullSemVer":"1.2.3-unstable.4+5",
15-
"InformationalVersion":"1.2.3-unstable.4+5.Branch.develop.Sha.commitSha",
16-
"BranchName":"develop",
17-
"Sha":"commitSha",
18-
"NuGetVersionV2":"1.2.3-unstable0004",
19-
"NuGetVersion":"1.2.3-unstable0004",
20-
"CommitDate":"2014-03-06"
1+
{
2+
"Major":1,
3+
"Minor":2,
4+
"Patch":3,
5+
"PreReleaseTag":"unstable.4",
6+
"PreReleaseTagWithDash":"-unstable.4",
7+
"BuildMetaData":5,
8+
"FullBuildMetaData":"5.Branch.develop.Sha.commitSha",
9+
"MajorMinorPatch":"1.2.3",
10+
"SemVer":"1.2.3-unstable.4",
11+
"LegacySemVer":"1.2.3-unstable4",
12+
"LegacySemVerPadded":"1.2.3-unstable0004",
13+
"AssemblySemVer":"1.2.3.0",
14+
"FullSemVer":"1.2.3-unstable.4+5",
15+
"InformationalVersion":"1.2.3-unstable.4+5.Branch.develop.Sha.commitSha",
16+
"BranchName":"develop",
17+
"Sha":"commitSha",
18+
"NuGetVersionV2":"1.2.3-unstable0004",
19+
"NuGetVersion":"1.2.3-unstable0004",
20+
"CommitDate":"2014-03-06"
2121
}
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
{
2-
"Major":1,
3-
"Minor":2,
4-
"Patch":3,
5-
"PreReleaseTag":"",
6-
"PreReleaseTagWithDash":"",
7-
"BuildMetaData":5,
8-
"FullBuildMetaData":"5.Branch.develop.Sha.commitSha",
9-
"MajorMinorPatch":"1.2.3",
10-
"SemVer":"1.2.3",
11-
"LegacySemVer":"1.2.3",
12-
"LegacySemVerPadded":"1.2.3",
13-
"AssemblySemVer":"1.2.3.0",
14-
"FullSemVer":"1.2.3+5",
15-
"InformationalVersion":"1.2.3+5.Branch.develop.Sha.commitSha",
16-
"BranchName":"develop",
17-
"Sha":"commitSha",
18-
"NuGetVersionV2":"1.2.3",
19-
"NuGetVersion":"1.2.3",
20-
"CommitDate":"2014-03-06"
1+
{
2+
"Major":1,
3+
"Minor":2,
4+
"Patch":3,
5+
"PreReleaseTag":"",
6+
"PreReleaseTagWithDash":"",
7+
"BuildMetaData":5,
8+
"FullBuildMetaData":"5.Branch.develop.Sha.commitSha",
9+
"MajorMinorPatch":"1.2.3",
10+
"SemVer":"1.2.3",
11+
"LegacySemVer":"1.2.3",
12+
"LegacySemVerPadded":"1.2.3",
13+
"AssemblySemVer":"1.2.3.0",
14+
"FullSemVer":"1.2.3+5",
15+
"InformationalVersion":"1.2.3+5.Branch.develop.Sha.commitSha",
16+
"BranchName":"develop",
17+
"Sha":"commitSha",
18+
"NuGetVersionV2":"1.2.3",
19+
"NuGetVersion":"1.2.3",
20+
"CommitDate":"2014-03-06"
2121
}
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
{
2-
"Major":1,
3-
"Minor":2,
4-
"Patch":3,
5-
"PreReleaseTag":"unstable.5",
6-
"PreReleaseTagWithDash":"-unstable.5",
7-
"BuildMetaData":5,
8-
"FullBuildMetaData":"5.Branch.develop.Sha.commitSha",
9-
"MajorMinorPatch":"1.2.3",
10-
"SemVer":"1.2.3-unstable.5",
11-
"LegacySemVer":"1.2.3-unstable5",
12-
"LegacySemVerPadded":"1.2.3-unstable0005",
13-
"AssemblySemVer":"1.2.3.0",
14-
"FullSemVer":"1.2.3-unstable.5",
15-
"InformationalVersion":"1.2.3-unstable.5+Branch.develop.Sha.commitSha",
16-
"BranchName":"develop",
17-
"Sha":"commitSha",
18-
"NuGetVersionV2":"1.2.3-unstable0005",
19-
"NuGetVersion":"1.2.3-unstable0005",
20-
"CommitDate":"2014-03-06"
1+
{
2+
"Major":1,
3+
"Minor":2,
4+
"Patch":3,
5+
"PreReleaseTag":"unstable.5",
6+
"PreReleaseTagWithDash":"-unstable.5",
7+
"BuildMetaData":5,
8+
"FullBuildMetaData":"5.Branch.develop.Sha.commitSha",
9+
"MajorMinorPatch":"1.2.3",
10+
"SemVer":"1.2.3-unstable.5",
11+
"LegacySemVer":"1.2.3-unstable5",
12+
"LegacySemVerPadded":"1.2.3-unstable0005",
13+
"AssemblySemVer":"1.2.3.0",
14+
"FullSemVer":"1.2.3-unstable.5",
15+
"InformationalVersion":"1.2.3-unstable.5+Branch.develop.Sha.commitSha",
16+
"BranchName":"develop",
17+
"Sha":"commitSha",
18+
"NuGetVersionV2":"1.2.3-unstable0005",
19+
"NuGetVersion":"1.2.3-unstable0005",
20+
"CommitDate":"2014-03-06"
2121
}
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
{
2-
"Major":1,
3-
"Minor":2,
4-
"Patch":3,
5-
"PreReleaseTag":"ci.5",
6-
"PreReleaseTagWithDash":"-ci.5",
7-
"BuildMetaData":5,
8-
"FullBuildMetaData":"5.Branch.develop.Sha.commitSha",
9-
"MajorMinorPatch":"1.2.3",
10-
"SemVer":"1.2.3-ci.5",
11-
"LegacySemVer":"1.2.3-ci5",
12-
"LegacySemVerPadded":"1.2.3-ci0005",
13-
"AssemblySemVer":"1.2.3.0",
14-
"FullSemVer":"1.2.3-ci.5",
15-
"InformationalVersion":"1.2.3-ci.5+Branch.develop.Sha.commitSha",
16-
"BranchName":"develop",
17-
"Sha":"commitSha",
18-
"NuGetVersionV2":"1.2.3-ci0005",
19-
"NuGetVersion":"1.2.3-ci0005",
20-
"CommitDate":"2014-03-06"
1+
{
2+
"Major":1,
3+
"Minor":2,
4+
"Patch":3,
5+
"PreReleaseTag":"ci.5",
6+
"PreReleaseTagWithDash":"-ci.5",
7+
"BuildMetaData":5,
8+
"FullBuildMetaData":"5.Branch.develop.Sha.commitSha",
9+
"MajorMinorPatch":"1.2.3",
10+
"SemVer":"1.2.3-ci.5",
11+
"LegacySemVer":"1.2.3-ci5",
12+
"LegacySemVerPadded":"1.2.3-ci0005",
13+
"AssemblySemVer":"1.2.3.0",
14+
"FullSemVer":"1.2.3-ci.5",
15+
"InformationalVersion":"1.2.3-ci.5+Branch.develop.Sha.commitSha",
16+
"BranchName":"develop",
17+
"Sha":"commitSha",
18+
"NuGetVersionV2":"1.2.3-ci0005",
19+
"NuGetVersion":"1.2.3-ci0005",
20+
"CommitDate":"2014-03-06"
2121
}
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
{
2-
"Major":1,
3-
"Minor":2,
4-
"Patch":3,
5-
"PreReleaseTag":"",
6-
"PreReleaseTagWithDash":"",
7-
"BuildMetaData":5,
8-
"FullBuildMetaData":"5.Sha.commitSha",
9-
"MajorMinorPatch":"1.2.3",
10-
"SemVer":"1.2.3",
11-
"LegacySemVer":"1.2.3",
12-
"LegacySemVerPadded":"1.2.3",
13-
"AssemblySemVer":"1.2.3.0",
14-
"FullSemVer":"1.2.3+5",
15-
"InformationalVersion":"1.2.3+5.Sha.commitSha",
16-
"BranchName":"",
17-
"Sha":"commitSha",
18-
"NuGetVersionV2":"1.2.3",
19-
"NuGetVersion":"1.2.3",
20-
"CommitDate":"2014-03-06"
1+
{
2+
"Major":1,
3+
"Minor":2,
4+
"Patch":3,
5+
"PreReleaseTag":"",
6+
"PreReleaseTagWithDash":"",
7+
"BuildMetaData":5,
8+
"FullBuildMetaData":"5.Sha.commitSha",
9+
"MajorMinorPatch":"1.2.3",
10+
"SemVer":"1.2.3",
11+
"LegacySemVer":"1.2.3",
12+
"LegacySemVerPadded":"1.2.3",
13+
"AssemblySemVer":"1.2.3.0",
14+
"FullSemVer":"1.2.3+5",
15+
"InformationalVersion":"1.2.3+5.Sha.commitSha",
16+
"BranchName":"",
17+
"Sha":"commitSha",
18+
"NuGetVersionV2":"1.2.3",
19+
"NuGetVersion":"1.2.3",
20+
"CommitDate":"2014-03-06"
2121
}

src/GitVersionCore/Configuration/BranchConfig.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public BranchConfig(BranchConfig branchConfiguration)
1616
PreventIncrementOfMergedBranchVersion = branchConfiguration.PreventIncrementOfMergedBranchVersion;
1717
TagNumberPattern = branchConfiguration.TagNumberPattern;
1818
TrackMergeTarget = branchConfiguration.TrackMergeTarget;
19+
MessageFallbackStrategy = branchConfiguration.MessageFallbackStrategy;
1920
}
2021

2122
[YamlMember(Alias = "mode")]
@@ -38,5 +39,14 @@ public BranchConfig(BranchConfig branchConfiguration)
3839

3940
[YamlMember(Alias = "track-merge-target")]
4041
public bool? TrackMergeTarget { get; set; }
42+
43+
[YamlMember(Alias = "major-version-bump-message")]
44+
public string MajorVersionBumpMessage { get; set; }
45+
46+
[YamlMember(Alias = "minor-version-bump-message")]
47+
public string MinorVersionBumpMessage { get; set; }
48+
49+
[YamlMember(Alias = "message-fallback")]
50+
public IncrementStrategy? MessageFallbackStrategy { get; set; }
4151
}
4252
}

src/GitVersionCore/Configuration/IncrementStrategy.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@ public enum IncrementStrategy
99
/// <summary>
1010
/// Uses the increment strategy from the branch the current branch was branched from
1111
/// </summary>
12-
Inherit
12+
Inherit,
13+
/// <summary>
14+
/// Parse commit messages for indications of change severity. If none are found, <c>CommitMessage</c> behaves like <c>Patch</c>.
15+
/// </summary>
16+
CommitMessage,
17+
/// <summary>
18+
/// Parse merge commit messages for indications of change severity. If none are found, <c>MergeMessage</c> behaves like <c>Patch</c>.
19+
/// </summary>
20+
MergeMessage
1321
}
1422
}

src/GitVersionCore/EffectiveConfiguration.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ public EffectiveConfiguration(
1313
bool preventIncrementForMergedBranchVersion,
1414
string tagNumberPattern,
1515
string continuousDeploymentFallbackTag,
16-
bool trackMergeTarget)
16+
bool trackMergeTarget,
17+
string majorVersionBumpMessage,
18+
string minorVersionBumpMessage,
19+
IncrementStrategy messageFallback)
1720
{
1821
AssemblyVersioningScheme = assemblyVersioningScheme;
1922
VersioningMode = versioningMode;
@@ -26,6 +29,9 @@ public EffectiveConfiguration(
2629
TagNumberPattern = tagNumberPattern;
2730
ContinuousDeploymentFallbackTag = continuousDeploymentFallbackTag;
2831
TrackMergeTarget = trackMergeTarget;
32+
MajorVersionBumpMessage = majorVersionBumpMessage;
33+
MinorVersionBumpMessage = minorVersionBumpMessage;
34+
MessageFallbackStrategy = messageFallback;
2935
}
3036

3137
public VersioningMode VersioningMode { get; private set; }
@@ -55,5 +61,11 @@ public EffectiveConfiguration(
5561
public string ContinuousDeploymentFallbackTag { get; private set; }
5662

5763
public bool TrackMergeTarget { get; private set; }
64+
65+
public string MajorVersionBumpMessage { get; private set; }
66+
67+
public string MinorVersionBumpMessage { get; private set; }
68+
69+
public IncrementStrategy MessageFallbackStrategy { get; private set; }
5870
}
5971
}

src/GitVersionCore/GitVersionContext.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,16 @@ void CalculateEffectiveConfiguration()
102102
var nextVersion = configuration.NextVersion;
103103
var assemblyVersioningScheme = configuration.AssemblyVersioningScheme.Value;
104104
var gitTagPrefix = configuration.TagPrefix;
105+
var majorMessage = currentBranchConfig.Value.MajorVersionBumpMessage ?? @"\+semver:\s?(breaking|major)";
106+
var minorMessage = currentBranchConfig.Value.MinorVersionBumpMessage ?? @"\+semver:\s?(feature|minor)";
107+
var messageFallback = currentBranchConfig.Value.MessageFallbackStrategy ?? IncrementStrategy.Patch;
105108
Configuration = new EffectiveConfiguration(
106109
assemblyVersioningScheme, versioningMode, gitTagPrefix,
107110
tag, nextVersion, incrementStrategy, currentBranchConfig.Key,
108111
preventIncrementForMergedBranchVersion,
109112
tagNumberPattern, configuration.ContinuousDeploymentFallbackTag,
110-
trackMergeTarget);
113+
trackMergeTarget,
114+
majorMessage, minorMessage, messageFallback);
111115
}
112116
}
113117
}

src/GitVersionCore/GitVersionCore.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@
110110
<Compile Include="Helpers\IFileSystem.cs" />
111111
<Compile Include="Helpers\ProcessHelper.cs" />
112112
<Compile Include="Helpers\ServiceMessageEscapeHelper.cs" />
113+
<Compile Include="IncrementStrategyFinder.cs" />
113114
<Compile Include="OutputVariables\VersionVariables.cs" />
114115
<Compile Include="Extensions\ExtensionMethods.git.cs" />
115116
<Compile Include="SemanticVersionExtensions.cs" />

0 commit comments

Comments
 (0)