diff --git a/src/Cake.Common.Tests/Unit/Tools/GitVersion/GitVersionRunnerTests.cs b/src/Cake.Common.Tests/Unit/Tools/GitVersion/GitVersionRunnerTests.cs
index a2e9f7acb0..e56a10bab6 100644
--- a/src/Cake.Common.Tests/Unit/Tools/GitVersion/GitVersionRunnerTests.cs
+++ b/src/Cake.Common.Tests/Unit/Tools/GitVersion/GitVersionRunnerTests.cs
@@ -86,18 +86,35 @@ public void Should_Set_Working_Directory()
Assert.Equal("/Working", result.Process.WorkingDirectory.FullPath);
}
+ [Theory]
+ [InlineData(GitVersionOutput.Json, "-output json")]
+ [InlineData(GitVersionOutput.File, "-output file")]
+ public void Should_Add_OutputType_To_Arguments_If_Set(GitVersionOutput outputType, string args)
+ {
+ // Given
+ var fixture = new GitVersionRunnerFixture();
+ fixture.Settings.OutputType = outputType;
+
+ // When
+ var result = fixture.Run();
+
+ // Then
+ Assert.Equal(args, result.Args);
+ }
+
[Fact]
- public void Should_Add_OutputType_To_Arguments_If_Set()
+ public void Should_Add_OutputFile_If_Set_With_OutputType_File()
{
// Given
var fixture = new GitVersionRunnerFixture();
- fixture.Settings.OutputType = GitVersionOutput.Json;
+ fixture.Settings.OutputType = GitVersionOutput.File;
+ fixture.Settings.OutputFile = "GitVersion.json";
// When
var result = fixture.Run();
// Then
- Assert.Equal("-output json", result.Args);
+ Assert.Equal("-output file -outputfile \"GitVersion.json\"", result.Args);
}
[Fact]
@@ -158,6 +175,20 @@ public void Should_Add_UpdateAssemblyInfoFilePath_To_Arguments_If_Set()
Assert.Equal("-updateassemblyinfo \"c:/temp/assemblyinfo.cs\"", result.Args);
}
+ [Fact]
+ public void Should_Add_ConfigFile_To_Arguments_If_Set()
+ {
+ // Given
+ var fixture = new GitVersionRunnerFixture();
+ fixture.Settings.ConfigFile = "c:/temp/gitversion.yml";
+
+ // When
+ var result = fixture.Run();
+
+ // Then
+ Assert.Equal("-config \"c:/temp/gitversion.yml\"", result.Args);
+ }
+
[Fact]
public void Should_Add_RepositoryPath_To_Arguments_If_Set()
{
@@ -219,6 +250,102 @@ public void Should_Add_NoFetch_To_Arguments_If_Set(bool nofetch, string args)
Assert.Equal(args, result.Args);
}
+ [Theory]
+ [InlineData(true, "-nocache")]
+ [InlineData(false, "")]
+ public void Should_Add_NoCache_To_Arguments_If_Set(bool nocache, string args)
+ {
+ // Given
+ var fixture = new GitVersionRunnerFixture();
+ fixture.Settings.NoCache = nocache;
+
+ // When
+ var result = fixture.Run();
+
+ // Then
+ Assert.Equal(args, result.Args);
+ }
+
+ [Theory]
+ [InlineData(true, "-nonormalize")]
+ [InlineData(false, "")]
+ public void Should_Add_NoNormalize_To_Arguments_If_Set(bool nonormalize, string args)
+ {
+ // Given
+ var fixture = new GitVersionRunnerFixture();
+ fixture.Settings.NoNormalize = nonormalize;
+
+ // When
+ var result = fixture.Run();
+
+ // Then
+ Assert.Equal(args, result.Args);
+ }
+
+ [Theory]
+ [InlineData(true, "-diag")]
+ [InlineData(false, "")]
+ public void Should_Add_Diag_To_Arguments_If_Set(bool diag, string args)
+ {
+ // Given
+ var fixture = new GitVersionRunnerFixture();
+ fixture.Settings.Diag = diag;
+
+ // When
+ var result = fixture.Run();
+
+ // Then
+ Assert.Equal(args, result.Args);
+ }
+
+ [Theory]
+ [InlineData(true, "-updateprojectfiles")]
+ [InlineData(false, "")]
+ public void Should_Add_UpdateProjectFiles_To_Arguments_If_Set(bool updateProjectFiles, string args)
+ {
+ // Given
+ var fixture = new GitVersionRunnerFixture();
+ fixture.Settings.UpdateProjectFiles = updateProjectFiles;
+
+ // When
+ var result = fixture.Run();
+
+ // Then
+ Assert.Equal(args, result.Args);
+ }
+
+ [Theory]
+ [InlineData(true, "-ensureassemblyinfo")]
+ [InlineData(false, "")]
+ public void Should_Add_EnsureAssemblyInfo_To_Arguments_If_Set(bool ensureAssemblyInfo, string args)
+ {
+ // Given
+ var fixture = new GitVersionRunnerFixture();
+ fixture.Settings.EnsureAssemblyInfo = ensureAssemblyInfo;
+
+ // When
+ var result = fixture.Run();
+
+ // Then
+ Assert.Equal(args, result.Args);
+ }
+
+ [Theory]
+ [InlineData(true, "-updatewixversionfile")]
+ [InlineData(false, "")]
+ public void Should_Add_UpdateWixVersionFile_To_Arguments_If_Set(bool updateWixVersionFile, string args)
+ {
+ // Given
+ var fixture = new GitVersionRunnerFixture();
+ fixture.Settings.UpdateWixVersionFile = updateWixVersionFile;
+
+ // When
+ var result = fixture.Run();
+
+ // Then
+ Assert.Equal(args, result.Args);
+ }
+
[Theory]
[InlineData(Verbosity.Quiet)]
[InlineData(Verbosity.Minimal)]
@@ -270,7 +397,9 @@ public void Should_Tolerate_Bad_Json_Set()
PreReleaseTag = "PreReleaseTag",
PreReleaseTagWithDash = "PreReleaseTagWithDash",
PreReleaseLabel = "PreReleaseLabel",
+ PreReleaseLabelWithDash = "-PreReleaseLabel",
PreReleaseNumber = null,
+ WeightedPreReleaseNumber = null,
BuildMetaData = "BuildMetaData",
BuildMetaDataPadded = "BuildMetaDataPadded",
FullBuildMetaData = "Branch.master.Sha.f2467748c78b3c8b37972ad0b30df2e15dfbf2cb",
@@ -283,12 +412,17 @@ public void Should_Tolerate_Bad_Json_Set()
FullSemVer = "0.1.1",
InformationalVersion = "0.1.1+Branch.master.Sha.f2467748c78b3c8b37972ad0b30df2e15dfbf2cb",
BranchName = "master",
+ EscapedBranchName = "master",
Sha = "f2467748c78b3c8b37972ad0b30df2e15dfbf2cb",
ShortSha = "f2467748",
NuGetVersionV2 = "0.1.1",
NuGetVersion = "0.1.1",
+ NuGetPreReleaseTagV2 = "tag",
+ NuGetPreReleaseTag = "tag",
+ VersionSourceSha = "f2467748c78b3c8b37972ad0b30df2e15dfbf2cb",
CommitsSinceVersionSource = null,
CommitsSinceVersionSourcePadded = "0002",
+ UncommittedChanges = 0,
CommitDate = "2017-09-13",
}
;
@@ -302,7 +436,9 @@ public void Should_Tolerate_Bad_Json_Set()
" \"PreReleaseTag\":\"PreReleaseTag\",",
" \"PreReleaseTagWithDash\":\"PreReleaseTagWithDash\",",
" \"PreReleaseLabel\":\"PreReleaseLabel\",",
+ " \"PreReleaseLabelWithDash\":\"-PreReleaseLabel\",",
" \"PreReleaseNumber\":\"\",",
+ " \"WeightedPreReleaseNumber\":\"\",",
" \"BuildMetaData\":\"BuildMetaData\",",
" \"BuildMetaDataPadded\":\"BuildMetaDataPadded\",",
" \"FullBuildMetaData\":\"Branch.master.Sha.f2467748c78b3c8b37972ad0b30df2e15dfbf2cb\",",
@@ -315,12 +451,17 @@ public void Should_Tolerate_Bad_Json_Set()
" \"FullSemVer\":\"0.1.1\",",
" \"InformationalVersion\":\"0.1.1+Branch.master.Sha.f2467748c78b3c8b37972ad0b30df2e15dfbf2cb\",",
" \"BranchName\":\"master\",",
+ " \"EscapedBranchName\":\"master\",",
" \"Sha\":\"f2467748c78b3c8b37972ad0b30df2e15dfbf2cb\",",
" \"ShortSha\":\"f2467748\",",
" \"NuGetVersionV2\":\"0.1.1\",",
" \"NuGetVersion\":\"0.1.1\",",
+ " \"NuGetPreReleaseTagV2\":\"tag\",",
+ " \"NuGetPreReleaseTag\":\"tag\",",
+ " \"VersionSourceSha\":\"f2467748c78b3c8b37972ad0b30df2e15dfbf2cb\",",
" \"CommitsSinceVersionSource\":\"\",",
" \"CommitsSinceVersionSourcePadded\":\"0002\",",
+ " \"UncommittedChanges\":\"0\",",
" \"CommitDate\":\"2017-09-13\"",
"}"
});
@@ -336,7 +477,9 @@ public void Should_Tolerate_Bad_Json_Set()
Assert.Equal(expect.PreReleaseTag, result.PreReleaseTag);
Assert.Equal(expect.PreReleaseTagWithDash, result.PreReleaseTagWithDash);
Assert.Equal(expect.PreReleaseLabel, result.PreReleaseLabel);
+ Assert.Equal(expect.PreReleaseLabelWithDash, result.PreReleaseLabelWithDash);
Assert.Equal(expect.PreReleaseNumber, result.PreReleaseNumber);
+ Assert.Equal(expect.WeightedPreReleaseNumber, result.WeightedPreReleaseNumber);
Assert.Equal(expect.BuildMetaData, result.BuildMetaData);
Assert.Equal(expect.BuildMetaDataPadded, result.BuildMetaDataPadded);
Assert.Equal(expect.FullBuildMetaData, result.FullBuildMetaData);
@@ -349,12 +492,17 @@ public void Should_Tolerate_Bad_Json_Set()
Assert.Equal(expect.FullSemVer, result.FullSemVer);
Assert.Equal(expect.InformationalVersion, result.InformationalVersion);
Assert.Equal(expect.BranchName, result.BranchName);
+ Assert.Equal(expect.EscapedBranchName, result.EscapedBranchName);
Assert.Equal(expect.Sha, result.Sha);
Assert.Equal(expect.ShortSha, result.ShortSha);
Assert.Equal(expect.NuGetVersionV2, result.NuGetVersionV2);
Assert.Equal(expect.NuGetVersion, result.NuGetVersion);
+ Assert.Equal(expect.NuGetPreReleaseTagV2, result.NuGetPreReleaseTagV2);
+ Assert.Equal(expect.NuGetPreReleaseTag, result.NuGetPreReleaseTag);
+ Assert.Equal(expect.VersionSourceSha, result.VersionSourceSha);
Assert.Equal(expect.CommitsSinceVersionSource, result.CommitsSinceVersionSource);
Assert.Equal(expect.CommitsSinceVersionSourcePadded, result.CommitsSinceVersionSourcePadded);
+ Assert.Equal(expect.UncommittedChanges, result.UncommittedChanges);
Assert.Equal(expect.CommitDate, result.CommitDate);
}
diff --git a/src/Cake.Common/Tools/GitVersion/GitVersion.cs b/src/Cake.Common/Tools/GitVersion/GitVersion.cs
index 0361694e63..f52472acbf 100644
--- a/src/Cake.Common/Tools/GitVersion/GitVersion.cs
+++ b/src/Cake.Common/Tools/GitVersion/GitVersion.cs
@@ -39,11 +39,21 @@ public sealed class GitVersion
///
public string PreReleaseLabel { get; set; }
+ ///
+ /// Gets or sets the pre-release label with dash.
+ ///
+ public string PreReleaseLabelWithDash { get; set; }
+
///
/// Gets or sets the pre-release number.
///
public int? PreReleaseNumber { get; set; }
+ ///
+ /// Gets or sets the weighted pre-release number.
+ ///
+ public int? WeightedPreReleaseNumber { get; set; }
+
///
/// Gets or sets the build metadata.
///
@@ -104,6 +114,11 @@ public sealed class GitVersion
///
public string BranchName { get; set; }
+ ///
+ /// Gets or sets the escaped branch name.
+ ///
+ public string EscapedBranchName { get; set; }
+
///
/// Gets or sets the Git SHA.
///
@@ -124,6 +139,21 @@ public sealed class GitVersion
///
public string NuGetVersion { get; set; }
+ ///
+ /// Gets or sets the NuGet pre-release tag for v2.
+ ///
+ public string NuGetPreReleaseTagV2 { get; set; }
+
+ ///
+ /// Gets or sets the NuGet pre-release tag.
+ ///
+ public string NuGetPreReleaseTag { get; set; }
+
+ ///
+ /// Gets or sets the version source sha.
+ ///
+ public string VersionSourceSha { get; set; }
+
///
/// Gets or sets the commits since version source.
///
@@ -134,6 +164,11 @@ public sealed class GitVersion
///
public string CommitsSinceVersionSourcePadded { get; set; }
+ ///
+ /// Gets or sets the number of uncommited changes.
+ ///
+ public int? UncommittedChanges { get; set; }
+
///
/// Gets or sets the commit date.
///
diff --git a/src/Cake.Common/Tools/GitVersion/GitVersionInternal.cs b/src/Cake.Common/Tools/GitVersion/GitVersionInternal.cs
index 3bf9dc300c..4c1294fccf 100644
--- a/src/Cake.Common/Tools/GitVersion/GitVersionInternal.cs
+++ b/src/Cake.Common/Tools/GitVersion/GitVersionInternal.cs
@@ -56,6 +56,13 @@ public string PreReleaseLabel
set => GitVersion.PreReleaseLabel = value;
}
+ [DataMember]
+ public string PreReleaseLabelWithDash
+ {
+ get => GitVersion.PreReleaseLabelWithDash;
+ set => GitVersion.PreReleaseLabelWithDash = value;
+ }
+
[DataMember]
public string PreReleaseNumber
{
@@ -63,6 +70,13 @@ public string PreReleaseNumber
set => GitVersion.PreReleaseNumber = ToNullableInt(value);
}
+ [DataMember]
+ public string WeightedPreReleaseNumber
+ {
+ get => ToString(GitVersion.WeightedPreReleaseNumber);
+ set => GitVersion.WeightedPreReleaseNumber = ToNullableInt(value);
+ }
+
[DataMember]
public string BuildMetaData
{
@@ -147,6 +161,13 @@ public string BranchName
set => GitVersion.BranchName = value;
}
+ [DataMember]
+ public string EscapedBranchName
+ {
+ get => GitVersion.EscapedBranchName;
+ set => GitVersion.EscapedBranchName = value;
+ }
+
[DataMember]
public string Sha
{
@@ -175,6 +196,27 @@ public string NuGetVersion
set => GitVersion.NuGetVersion = value;
}
+ [DataMember]
+ public string NuGetPreReleaseTagV2
+ {
+ get => GitVersion.NuGetPreReleaseTagV2;
+ set => GitVersion.NuGetPreReleaseTagV2 = value;
+ }
+
+ [DataMember]
+ public string NuGetPreReleaseTag
+ {
+ get => GitVersion.NuGetPreReleaseTag;
+ set => GitVersion.NuGetPreReleaseTag = value;
+ }
+
+ [DataMember]
+ public string VersionSourceSha
+ {
+ get => GitVersion.VersionSourceSha;
+ set => GitVersion.VersionSourceSha = value;
+ }
+
[DataMember]
public string CommitsSinceVersionSource
{
@@ -189,6 +231,13 @@ public string CommitsSinceVersionSourcePadded
set => GitVersion.CommitsSinceVersionSourcePadded = value;
}
+ [DataMember]
+ public string UncommittedChanges
+ {
+ get => ToString(GitVersion.UncommittedChanges);
+ set => GitVersion.UncommittedChanges = ToNullableInt(value);
+ }
+
[DataMember]
public string CommitDate
{
diff --git a/src/Cake.Common/Tools/GitVersion/GitVersionOutput.cs b/src/Cake.Common/Tools/GitVersion/GitVersionOutput.cs
index 240c43cbda..be253b554b 100644
--- a/src/Cake.Common/Tools/GitVersion/GitVersionOutput.cs
+++ b/src/Cake.Common/Tools/GitVersion/GitVersionOutput.cs
@@ -17,6 +17,11 @@ public enum GitVersionOutput
///
/// Outputs to the stdout in a way usable by a detected build server.
///
- BuildServer
+ BuildServer,
+
+ ///
+ /// Outputs to a file, as specified in the OutputFile parameter.
+ ///
+ File
}
}
\ No newline at end of file
diff --git a/src/Cake.Common/Tools/GitVersion/GitVersionRunner.cs b/src/Cake.Common/Tools/GitVersion/GitVersionRunner.cs
index 731d5201db..85eb59485a 100644
--- a/src/Cake.Common/Tools/GitVersion/GitVersionRunner.cs
+++ b/src/Cake.Common/Tools/GitVersion/GitVersionRunner.cs
@@ -88,15 +88,25 @@ private ProcessArgumentBuilder GetArguments(GitVersionSettings settings)
if (settings.OutputType.HasValue)
{
+ builder.Append("-output");
+
switch (settings.OutputType.Value)
{
case GitVersionOutput.Json:
- builder.Append("-output");
builder.Append("json");
break;
case GitVersionOutput.BuildServer:
- builder.Append("-output");
builder.Append("buildserver");
+ break;
+ case GitVersionOutput.File:
+ builder.Append("file");
+
+ if (settings.OutputFile != null)
+ {
+ builder.Append("-outputfile");
+ builder.AppendQuoted(settings.OutputFile.FullPath);
+ }
+
break;
}
}
@@ -165,11 +175,47 @@ private ProcessArgumentBuilder GetArguments(GitVersionSettings settings)
builder.AppendQuoted(settings.LogFilePath.FullPath);
}
+ if (settings.ConfigFile != null)
+ {
+ builder.Append("-config");
+ builder.AppendQuoted(settings.ConfigFile.FullPath);
+ }
+
if (settings.NoFetch)
{
builder.Append("-nofetch");
}
+ if (settings.NoCache)
+ {
+ builder.Append("-nocache");
+ }
+
+ if (settings.NoNormalize)
+ {
+ builder.Append("-nonormalize");
+ }
+
+ if (settings.Diag)
+ {
+ builder.Append("-diag");
+ }
+
+ if (settings.UpdateProjectFiles)
+ {
+ builder.Append("-updateprojectfiles");
+ }
+
+ if (settings.EnsureAssemblyInfo)
+ {
+ builder.Append("-ensureassemblyinfo");
+ }
+
+ if (settings.UpdateWixVersionFile)
+ {
+ builder.Append("-updatewixversionfile");
+ }
+
if (settings.Verbosity.HasValue)
{
switch (settings.Verbosity.Value)
diff --git a/src/Cake.Common/Tools/GitVersion/GitVersionSettings.cs b/src/Cake.Common/Tools/GitVersion/GitVersionSettings.cs
index 26151a110a..0793e08afc 100644
--- a/src/Cake.Common/Tools/GitVersion/GitVersionSettings.cs
+++ b/src/Cake.Common/Tools/GitVersion/GitVersionSettings.cs
@@ -22,6 +22,17 @@ public sealed class GitVersionSettings : ToolSettings
///
public GitVersionOutput? OutputType { get; set; }
+ ///
+ /// Gets or sets the path to a file to store the asserted GitVersion numbers in JSON format.
+ ///
+ public FilePath OutputFile { get; set; }
+
+ ///
+ /// Gets or sets the path to config file.
+ ///
+ /// Defaults to GitVersion.yml.
+ public FilePath ConfigFile { get; set; }
+
///
/// Gets or sets a value indicating whether to update all the AssemblyInfo files.
///
@@ -32,6 +43,23 @@ public sealed class GitVersionSettings : ToolSettings
///
public FilePath UpdateAssemblyInfoFilePath { get; set; }
+ ///
+ /// Gets or sets a value indicating whether to recursively search for all project files (.csproj/.vbproj/.fsproj) files in the git repo and update them.
+ ///
+ /// This is only compatible with the newer Sdk projects.
+ public bool UpdateProjectFiles { get; set; }
+
+ ///
+ /// Gets or sets a value indicating whether if the assembly info file specified with /updateassemblyinfo or /updateassemblyinfofilename is not found, it be created with these attributes: AssemblyFileVersion, AssemblyVersion and AssemblyInformationalVersion.
+ ///
+ /// Supports writing version info for: C#, F#, VB.
+ public bool EnsureAssemblyInfo { get; set; }
+
+ ///
+ /// Gets or sets a value indicating whether all the GitVersion variables are written to 'GitVersion_WixVersion.wxi'. The variables can then be referenced in other WiX project files for versioning.
+ ///
+ public bool UpdateWixVersionFile { get; set; }
+
///
/// Gets or sets whether to only show a specific variable.
///
@@ -68,6 +96,22 @@ public sealed class GitVersionSettings : ToolSettings
/// If your CI server clones the entire repository you can set this to 'true' to prevent GitVersion attempting any remote repository fetching.
public bool NoFetch { get; set; }
+ ///
+ /// Gets or sets a value indicating whether to bypass the cached GitVersion result. Result will not be written to the cache.
+ ///
+ public bool NoCache { get; set; }
+
+ ///
+ /// Gets or sets a value indicating whether to disable normalize step on a build server.
+ ///
+ public bool NoNormalize { get; set; }
+
+ ///
+ /// Gets or sets a value indicating whether to run GitVersion with additional diagnostic information.
+ ///
+ /// Requires git.exe to be installed.
+ public bool Diag { get; set; }
+
///
/// Gets or sets the dynamic repository path. Defaults to %TEMP%.
///