Skip to content

Commit df0750d

Browse files
committed
Define BuildNumberFromVersionJson msbuild property
This allows folks who want to do particularly custom things with their versioning stamps to have a bit more data from the version.json file with which to work. Fixes #115
1 parent dc1fb80 commit df0750d

File tree

4 files changed

+32
-0
lines changed

4 files changed

+32
-0
lines changed

src/NerdBank.GitVersioning.Tests/BuildIntegrationTests.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,21 @@ public async Task GetBuildVersion_Minus1BuildOffset_NotYetCommitted()
381381
this.AssertStandardProperties(versionOptions, buildResult);
382382
}
383383

384+
[Theory]
385+
[InlineData(0)]
386+
[InlineData(21)]
387+
public async Task GetBuildVersion_BuildNumberSpecifiedInVersionJson(int buildNumber)
388+
{
389+
var versionOptions = new VersionOptions
390+
{
391+
Version = SemanticVersion.Parse("14.0." + buildNumber),
392+
};
393+
this.WriteVersionFile(versionOptions);
394+
this.InitializeSourceControl();
395+
var buildResult = await this.BuildAsync();
396+
this.AssertStandardProperties(versionOptions, buildResult);
397+
}
398+
384399
[Fact]
385400
public async Task PublicRelease_RegEx_Unsatisfied()
386401
{
@@ -821,6 +836,7 @@ private void AssertStandardProperties(VersionOptions versionOptions, BuildResult
821836
Assert.Equal($"{version}", buildResult.BuildVersion);
822837
Assert.Equal($"{idAsVersion.Major}.{idAsVersion.Minor}.{idAsVersion.Build}", buildResult.BuildVersion3Components);
823838
Assert.Equal(idAsVersion.Build.ToString(), buildResult.BuildVersionNumberComponent);
839+
Assert.Equal(versionOptions.Version.Version.Build != -1 ? versionOptions.Version.Version.Build.ToString() : string.Empty, buildResult.BuildNumberFromVersionJson);
824840
Assert.Equal($"{idAsVersion.Major}.{idAsVersion.Minor}.{idAsVersion.Build}", buildResult.BuildVersionSimple);
825841
Assert.Equal(this.Repo.Head.Commits.First().Id.Sha, buildResult.GitCommitId);
826842
Assert.Equal(commitIdShort, buildResult.GitCommitIdShort);
@@ -980,6 +996,7 @@ internal BuildResults(BuildResult buildResult, IReadOnlyList<BuildEventArgs> log
980996
public string PrereleaseVersion => this.BuildResult.ProjectStateAfterBuild.GetPropertyValue("PrereleaseVersion");
981997
public string MajorMinorVersion => this.BuildResult.ProjectStateAfterBuild.GetPropertyValue("MajorMinorVersion");
982998
public string BuildVersionNumberComponent => this.BuildResult.ProjectStateAfterBuild.GetPropertyValue("BuildVersionNumberComponent");
999+
public string BuildNumberFromVersionJson => this.BuildResult.ProjectStateAfterBuild.GetPropertyValue("BuildNumberFromVersionJson");
9831000
public string GitCommitIdShort => this.BuildResult.ProjectStateAfterBuild.GetPropertyValue("GitCommitIdShort");
9841001
public string GitVersionHeight => this.BuildResult.ProjectStateAfterBuild.GetPropertyValue("GitVersionHeight");
9851002
public string SemVerBuildSuffix => this.BuildResult.ProjectStateAfterBuild.GetPropertyValue("SemVerBuildSuffix");

src/NerdBank.GitVersioning/VersionOracle.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,12 @@ public IEnumerable<string> BuildMetadataWithCommitId
159159
/// </summary>
160160
public int BuildNumber => Math.Max(0, this.Version.Build);
161161

162+
/// <summary>
163+
/// Gets the build number as it was specified in the version.json file.
164+
/// </summary>
165+
/// <value>The version specified, or -1 if none was specified.</value>
166+
public int BuildNumberFromVersionOptions => this.VersionOptions?.Version?.Version?.Build ?? -1;
167+
162168
/// <summary>
163169
/// Gets or sets the major.minor version string.
164170
/// </summary>

src/Nerdbank.GitVersioning.NuGet/build/Nerdbank.GitVersioning.targets

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
<Output TaskParameter="GitVersionHeight" PropertyName="GitVersionHeight" />
7070
<Output TaskParameter="BuildNumber" PropertyName="BuildNumber" />
7171
<Output TaskParameter="BuildNumber" PropertyName="BuildVersionNumberComponent" />
72+
<Output TaskParameter="BuildNumberFromVersionJson" PropertyName="BuildNumberFromVersionJson" />
7273
<Output TaskParameter="PublicRelease" PropertyName="PublicRelease" />
7374
<Output TaskParameter="CloudBuildNumber" PropertyName="CloudBuildNumber" Condition=" '$(CloudBuildNumber)' == '' "/>
7475
<Output TaskParameter="BuildMetadataFragment" PropertyName="SemVerBuildSuffix" />

src/Nerdbank.GitVersioning.Tasks/GetBuildVersion.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
{
33
using System;
44
using System.Collections.Generic;
5+
using System.Globalization;
56
using System.IO;
67
using System.Linq;
78
using Microsoft.Build.Framework;
@@ -139,6 +140,12 @@ public GetBuildVersion()
139140
[Output]
140141
public int BuildNumber { get; private set; }
141142

143+
/// <summary>
144+
/// Gets the build number as specified in the version.json file.
145+
/// </summary>
146+
[Output]
147+
public string BuildNumberFromVersionJson { get; private set; }
148+
142149
/// <summary>
143150
/// Gets the BuildNumber to set the cloud build to (if applicable).
144151
/// </summary>
@@ -174,6 +181,7 @@ protected override bool ExecuteInner()
174181
this.SimpleVersion = oracle.SimpleVersion.ToString();
175182
this.MajorMinorVersion = oracle.MajorMinorVersion.ToString();
176183
this.BuildNumber = oracle.BuildNumber;
184+
this.BuildNumberFromVersionJson = oracle.BuildNumberFromVersionOptions != -1 ? oracle.BuildNumberFromVersionOptions.ToString(CultureInfo.InvariantCulture) : string.Empty;
177185
this.PrereleaseVersion = oracle.PrereleaseVersion;
178186
this.GitCommitId = oracle.GitCommitId;
179187
this.GitCommitIdShort = oracle.GitCommitIdShort;

0 commit comments

Comments
 (0)