diff --git a/src/GitVersionCore.Tests/BuildServers/VsoAgentTests.cs b/src/GitVersionCore.Tests/BuildServers/VsoAgentTests.cs index f78abd3476..b265d7db3e 100644 --- a/src/GitVersionCore.Tests/BuildServers/VsoAgentTests.cs +++ b/src/GitVersionCore.Tests/BuildServers/VsoAgentTests.cs @@ -40,4 +40,15 @@ public void EscapeValues() vsVersion[0].ShouldBe("##vso[task.setvariable variable=GitVersion.Foo;]0.8.0-unstable568 Branch:'develop' Sha:'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb'"); } + [Test] + public void MissingEnvShouldNotBlowUp() + { + Environment.SetEnvironmentVariable(key, null, EnvironmentVariableTarget.Process); + + var versionBuilder = new VsoAgent(); + var semver = "0.0.0-Unstable4"; + var vars = new TestableVersionVariables(fullSemVer: semver); + var vsVersion = versionBuilder.GenerateSetVersionMessage(vars); + vsVersion.ShouldBe(semver); + } } \ No newline at end of file diff --git a/src/GitVersionCore/BuildServers/VsoAgent.cs b/src/GitVersionCore/BuildServers/VsoAgent.cs index 67494b9b03..cb2b63d7ea 100644 --- a/src/GitVersionCore/BuildServers/VsoAgent.cs +++ b/src/GitVersionCore/BuildServers/VsoAgent.cs @@ -1,6 +1,7 @@ namespace GitVersion { using System; + using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; @@ -35,19 +36,30 @@ public override string GenerateSetVersionMessage(VersionVariables variables) { // For VSO, we'll get the Build Number and insert GitVersion variables where // specified - var buildNum = Environment.GetEnvironmentVariable("BUILD_BUILDNUMBER"); + var buildNumberEnv = Environment.GetEnvironmentVariable("BUILD_BUILDNUMBER"); + if (String.IsNullOrWhiteSpace(buildNumberEnv)) + return variables.FullSemVer; - var newBuildNum = variables.Aggregate(buildNum, (current, kvp) => - current.RegexReplace(string.Format(@"\$\(GITVERSION[_\.]{0}\)", kvp.Key), kvp.Value ?? string.Empty, RegexOptions.IgnoreCase)); + var newBuildNumber = variables.Aggregate(buildNumberEnv, ReplaceVariables); // If no variable substitution has happened, use FullSemVer - if (buildNum == newBuildNum) + if (buildNumberEnv == newBuildNumber) { - var buildNumber = variables.FullSemVer.EndsWith("+0") ? variables.FullSemVer.Substring(0, variables.FullSemVer.Length - 2) : variables.FullSemVer; - return string.Format("##vso[build.updatebuildnumber]{0}", buildNumber); + var buildNumber = variables.FullSemVer.EndsWith("+0") + ? variables.FullSemVer.Substring(0, variables.FullSemVer.Length - 2) + : variables.FullSemVer; + + return $"##vso[build.updatebuildnumber]{buildNumber}"; } - return string.Format("##vso[build.updatebuildnumber]{0}", newBuildNum); + return $"##vso[build.updatebuildnumber]{newBuildNumber}"; + } + + private static string ReplaceVariables(string buildNumberEnv, KeyValuePair variable) + { + var pattern = $@"\$\(GITVERSION[_\.]{variable.Key}\)"; + var replacement = variable.Value ?? string.Empty; + return buildNumberEnv.RegexReplace(pattern, replacement, RegexOptions.IgnoreCase); } } }