Skip to content

Commit

Permalink
Merge pull request #723 from ap0llo/cloud-build-number-4-fields
Browse files Browse the repository at this point in the history
Include all four version components in the cloud build number if three or more components are set in the version file
  • Loading branch information
AArnott authored Mar 17, 2022
2 parents 1b5f161 + 6d43f40 commit d857cf7
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 3 deletions.
55 changes: 55 additions & 0 deletions src/NerdBank.GitVersioning.Tests/VersionOracleTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Linq;
using LibGit2Sharp;
using Nerdbank.GitVersioning;
using Nerdbank.GitVersioning.ManagedGit;
using Xunit;
using Xunit.Abstractions;
using Version = System.Version;
Expand Down Expand Up @@ -1071,4 +1072,58 @@ public void GetVersionHeight_VeryLongHistory()
this.GetVersionHeight();
}

[Theory]
// 2 version fields configured in version.json
[InlineData(VersionOptions.CloudBuildNumberCommitWhere.BuildMetadata, "1.2", "1.2.1+<commit:string>")]
[InlineData(VersionOptions.CloudBuildNumberCommitWhere.FourthVersionComponent, "1.2", "1.2.1.<commit:int>")]
// 2 version fields and a static prerelease tag configured in version.json
[InlineData(VersionOptions.CloudBuildNumberCommitWhere.BuildMetadata, "1.2-alpha", "1.2.1-alpha+<commit:string>")]
[InlineData(VersionOptions.CloudBuildNumberCommitWhere.FourthVersionComponent, "1.2-alpha", "1.2.1.<commit:int>-alpha")]
// 2 version fields with git height in prerelease tag configured in version.json
[InlineData(VersionOptions.CloudBuildNumberCommitWhere.BuildMetadata, "1.2-alpha.{height}", "1.2-alpha.1+<commit:string>")]
[InlineData(VersionOptions.CloudBuildNumberCommitWhere.FourthVersionComponent, "1.2-alpha.{height}", "1.2-alpha.1")]
// 3 version fields configured in version.json
[InlineData(VersionOptions.CloudBuildNumberCommitWhere.BuildMetadata, "1.2.3", "1.2.3.1+<commit:string>")]
[InlineData(VersionOptions.CloudBuildNumberCommitWhere.FourthVersionComponent, "1.2.3", "1.2.3.1")]
// 3 version fields and a static prerelease tag configured in version.json
[InlineData(VersionOptions.CloudBuildNumberCommitWhere.BuildMetadata, "1.2.3-alpha", "1.2.3.1-alpha+<commit:string>")]
[InlineData(VersionOptions.CloudBuildNumberCommitWhere.FourthVersionComponent, "1.2.3-alpha", "1.2.3.1-alpha")]
// 3 version fields with git height in prerelease tag configured in version.json
[InlineData(VersionOptions.CloudBuildNumberCommitWhere.BuildMetadata, "1.2.3-alpha.{height}", "1.2.3-alpha.1+<commit:string>")]
[InlineData(VersionOptions.CloudBuildNumberCommitWhere.FourthVersionComponent, "1.2.3-alpha.{height}", "1.2.3-alpha.1")]
// 4 version fields configured in version.json
[InlineData(VersionOptions.CloudBuildNumberCommitWhere.BuildMetadata, "1.2.3.4", "1.2.3.4+<commit:string>")]
[InlineData(VersionOptions.CloudBuildNumberCommitWhere.FourthVersionComponent, "1.2.3.4", "1.2.3.4")]
// 4 version fields and a static prerelease tag configured in version.json
[InlineData(VersionOptions.CloudBuildNumberCommitWhere.BuildMetadata, "1.2.3.4-alpha", "1.2.3.4-alpha+<commit:string>")]
[InlineData(VersionOptions.CloudBuildNumberCommitWhere.FourthVersionComponent, "1.2.3.4-alpha", "1.2.3.4-alpha")]
// 4 version fields with git height in prerelease tag configured in version.json
[InlineData(VersionOptions.CloudBuildNumberCommitWhere.BuildMetadata, "1.2.3.4-alpha.{height}", "1.2.3.4-alpha.1+<commit:string>")]
[InlineData(VersionOptions.CloudBuildNumberCommitWhere.FourthVersionComponent, "1.2.3.4-alpha.{height}", "1.2.3.4-alpha.1")]
public void CloudBuildNumber_4thPosition(VersionOptions.CloudBuildNumberCommitWhere where, string version, string expectedCloudBuildNumber)
{
VersionOptions workingCopyVersion = new VersionOptions
{
Version = SemanticVersion.Parse(version),
CloudBuild = new VersionOptions.CloudBuildOptions
{
BuildNumber = new VersionOptions.CloudBuildNumberOptions
{
IncludeCommitId = new VersionOptions.CloudBuildNumberCommitIdOptions
{
When = VersionOptions.CloudBuildNumberCommitWhen.Always,
Where = where
}
}
}
};
this.WriteVersionFile(workingCopyVersion);
this.InitializeSourceControl();
var oracle = new VersionOracle(this.Context);
oracle.PublicRelease = true;
expectedCloudBuildNumber = expectedCloudBuildNumber.Replace("<commit:int>", GitObjectId.Parse(oracle.GitCommitId).AsUInt16().ToString());
expectedCloudBuildNumber = expectedCloudBuildNumber.Replace("<commit:string>", oracle.GitCommitIdShort);

Assert.Equal(expectedCloudBuildNumber, oracle.CloudBuildNumber);
}
}
15 changes: 12 additions & 3 deletions src/NerdBank.GitVersioning/VersionOracle.cs
Original file line number Diff line number Diff line change
Expand Up @@ -129,11 +129,20 @@ public string CloudBuildNumber
var commitIdOptions = this.CloudBuildNumberOptions.IncludeCommitIdOrDefault;
bool includeCommitInfo = commitIdOptions.WhenOrDefault == VersionOptions.CloudBuildNumberCommitWhen.Always ||
(commitIdOptions.WhenOrDefault == VersionOptions.CloudBuildNumberCommitWhen.NonPublicReleaseOnly && !this.PublicRelease);
bool commitIdInRevision = includeCommitInfo && commitIdOptions.WhereOrDefault == VersionOptions.CloudBuildNumberCommitWhere.FourthVersionComponent;
bool commitIdInBuildMetadata = includeCommitInfo && commitIdOptions.WhereOrDefault == VersionOptions.CloudBuildNumberCommitWhere.BuildMetadata;
Version buildNumberVersion = commitIdInRevision ? this.Version : this.SimpleVersion;

// Include the revision in the build number if, either
// - The commit id is configured to be included as a revision or
// - 3 version fields are configured in version.json (and thus the version height is encoded as revision) or
// - 4 version fields are configured in version.json.
bool includeRevision = includeCommitInfo && commitIdOptions.WhereOrDefault == VersionOptions.CloudBuildNumberCommitWhere.FourthVersionComponent ||
this.VersionOptions?.Version?.VersionHeightPosition == SemanticVersion.Position.Revision ||
this.VersionOptions?.Version?.Version.Revision != -1;

string buildNumberMetadata = FormatBuildMetadata(commitIdInBuildMetadata ? this.BuildMetadataWithCommitId : this.BuildMetadata);
return buildNumberVersion + this.PrereleaseVersion + buildNumberMetadata;

Version buildNumberVersion = includeRevision ? this.Version : this.SimpleVersion;
return $"{buildNumberVersion}{this.PrereleaseVersion}{buildNumberMetadata}";
}
}

Expand Down

0 comments on commit d857cf7

Please sign in to comment.