diff --git a/src/Cake.GitVersioning/GitVersioningAliases.cs b/src/Cake.GitVersioning/GitVersioningAliases.cs
index f0713c72d..5a154d873 100644
--- a/src/Cake.GitVersioning/GitVersioningAliases.cs
+++ b/src/Cake.GitVersioning/GitVersioningAliases.cs
@@ -87,6 +87,7 @@ public static void GitVersioningCloud(this ICakeContext cakeContext, string proj
settings.CISystem?.ToString(),
settings.AllVariables,
settings.CommonVariables,
+ settings.CloudBuildNumber,
settings.AdditionalVariables,
false);
}
diff --git a/src/Cake.GitVersioning/GitVersioningCloudSettings.cs b/src/Cake.GitVersioning/GitVersioningCloudSettings.cs
index 9ccf5d32c..de901e28d 100644
--- a/src/Cake.GitVersioning/GitVersioningCloudSettings.cs
+++ b/src/Cake.GitVersioning/GitVersioningCloudSettings.cs
@@ -30,13 +30,21 @@ public class GitVersioningCloudSettings
///
/// Gets or sets a value indicating whether to define ALL version variables as cloud build variables, with a "NBGV_" prefix.
///
+ /// The default value is .
public bool AllVariables { get; set; }
///
/// Gets or sets a value indicating whether to define a few common version variables as cloud build variables, with a "Git" prefix.
///
+ /// The default value is .
public bool CommonVariables { get; set; }
+ ///
+ /// Gets or sets a value indicating whether to set the cloud build number.
+ ///
+ /// The default value is .
+ public bool CloudBuildNumber { get; set; } = true;
+
///
/// Gets additional cloud build variables to define.
///
diff --git a/src/NerdBank.GitVersioning/Commands/CloudCommand.cs b/src/NerdBank.GitVersioning/Commands/CloudCommand.cs
index 518ab254d..b742fac73 100644
--- a/src/NerdBank.GitVersioning/Commands/CloudCommand.cs
+++ b/src/NerdBank.GitVersioning/Commands/CloudCommand.cs
@@ -69,13 +69,16 @@ public enum CloudCommandError
///
/// Controls whether to define common version variables as cloud build variables.
///
+ ///
+ /// Controls whether to emit the cloud build variable to set the build number.
+ ///
///
/// Additional cloud build variables to define.
///
///
/// Force usage of LibGit2 for accessing the git repository.
///
- public void SetBuildVariables(string projectDirectory, IEnumerable metadata, string version, string ciSystem, bool allVars, bool commonVars, IEnumerable> additionalVariables, bool alwaysUseLibGit2)
+ public void SetBuildVariables(string projectDirectory, IEnumerable metadata, string version, string ciSystem, bool allVars, bool commonVars, bool cloudBuildNumber, IEnumerable> additionalVariables, bool alwaysUseLibGit2)
{
Requires.NotNull(projectDirectory, nameof(projectDirectory));
Requires.NotNull(additionalVariables, nameof(additionalVariables));
@@ -137,7 +140,10 @@ public void SetBuildVariables(string projectDirectory, IEnumerable metad
version = oracle.CloudBuildNumber;
}
- activeCloudBuild.SetCloudBuildNumber(version, this.stdout, this.stderr);
+ if (cloudBuildNumber)
+ {
+ activeCloudBuild.SetCloudBuildNumber(version, this.stdout, this.stderr);
+ }
foreach (KeyValuePair pair in variables)
{
diff --git a/src/nbgv/Program.cs b/src/nbgv/Program.cs
index 5eaa19cb1..24a018e14 100644
--- a/src/nbgv/Program.cs
+++ b/src/nbgv/Program.cs
@@ -194,6 +194,7 @@ private static Parser BuildCommandLine()
var ciSystem = new Option(new[] { "--ci-system", "-s" }, "Force activation for a particular CI system. If not specified, auto-detection will be used. Supported values are: " + string.Join(", ", CloudProviderNames)).FromAmong(CloudProviderNames);
var allVars = new Option(new[] { "--all-vars", "-a" }, "Defines ALL version variables as cloud build variables, with a \"NBGV_\" prefix.");
var commonVars = new Option(new[] { "--common-vars", "-c" }, "Defines a few common version variables as cloud build variables, with a \"Git\" prefix (e.g. GitBuildVersion, GitBuildVersionSimple, GitAssemblyInformationalVersion).");
+ var skipCloudBuildNumber = new Option(new[] { "--skip-cloud-build-number" }, "Do not emit the cloud build variable to set the build number. This is useful when you want to set other cloud build variables but not the build number.");
var define = new Option(new[] { "--define", "-d" }, () => Array.Empty(), "Additional cloud build variables to define. Each should be in the NAME=VALUE syntax.")
{
Arity = ArgumentArity.OneOrMore,
@@ -207,10 +208,11 @@ private static Parser BuildCommandLine()
ciSystem,
allVars,
commonVars,
+ skipCloudBuildNumber,
define,
};
- cloud.SetHandler(OnCloudCommand, project, metadata, version, ciSystem, allVars, commonVars, define);
+ cloud.SetHandler(OnCloudCommand, project, metadata, version, ciSystem, allVars, commonVars, skipCloudBuildNumber, define);
}
Command prepareRelease;
@@ -656,7 +658,7 @@ private static Task OnGetCommitsCommand(string project, bool quiet, string
return Task.FromResult((int)ExitCodes.OK);
}
- private static Task OnCloudCommand(string project, string[] metadata, string version, string ciSystem, bool allVars, bool commonVars, string[] define)
+ private static Task OnCloudCommand(string project, string[] metadata, string version, string ciSystem, bool allVars, bool commonVars, bool skipCloudBuildNumber, string[] define)
{
string searchPath = GetSpecifiedOrCurrentDirectoryPath(project);
if (!Directory.Exists(searchPath))
@@ -690,7 +692,7 @@ private static Task OnCloudCommand(string project, string[] metadata, strin
try
{
var cloudCommand = new CloudCommand(Console.Out, Console.Error);
- cloudCommand.SetBuildVariables(searchPath, metadata, version, ciSystem, allVars, commonVars, additionalVariables, AlwaysUseLibGit2);
+ cloudCommand.SetBuildVariables(searchPath, metadata, version, ciSystem, allVars, commonVars, !skipCloudBuildNumber, additionalVariables, AlwaysUseLibGit2);
}
catch (CloudCommand.CloudCommandException ex)
{
diff --git a/test/Nerdbank.GitVersioning.Tests/CommandTests.cs b/test/Nerdbank.GitVersioning.Tests/CommandTests.cs
new file mode 100644
index 000000000..9efe9322b
--- /dev/null
+++ b/test/Nerdbank.GitVersioning.Tests/CommandTests.cs
@@ -0,0 +1,45 @@
+// Copyright (c) .NET Foundation and Contributors. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using Nerdbank.GitVersioning;
+using Nerdbank.GitVersioning.Commands;
+using Xunit;
+
+public class CommandTests : RepoTestBase
+{
+ public CommandTests(ITestOutputHelper logger)
+ : base(logger)
+ {
+ }
+
+ [Theory, CombinatorialData]
+ public void CloudCommand_CloudBuildNumber(bool setCloudBuildNumber)
+ {
+ const string ciSystem = "VisualStudioTeamServices";
+ const string buildNumberSyntax = "##vso[build.updatebuildnumber]";
+
+ var outWriter = new StringWriter();
+ var errWriter = new StringWriter();
+
+ var command = new CloudCommand(outWriter, errWriter);
+
+ command.SetBuildVariables(this.RepoPath, metadata: [], version: "1.2.3.4", ciSystem, allVars: false, commonVars: false, setCloudBuildNumber, additionalVariables: [], alwaysUseLibGit2: false);
+
+ outWriter.Flush();
+ errWriter.Flush();
+
+ if (setCloudBuildNumber)
+ {
+ Assert.Contains(buildNumberSyntax, outWriter.ToString());
+ }
+ else
+ {
+ Assert.DoesNotContain(buildNumberSyntax, outWriter.ToString());
+ }
+
+ Assert.Empty(errWriter.ToString());
+ }
+
+ protected override GitContext CreateGitContext(string path, string committish = null)
+ => GitContext.Create(path, committish, engine: GitContext.Engine.ReadWrite);
+}