From 920d396ca8cf13a0e2422d29db1257215e165934 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Asbj=C3=B8rn=20Ulsberg?= Date: Fri, 1 Mar 2019 11:50:58 +0100 Subject: [PATCH 1/2] Add VSO Agent test that provokes a bug Add VSO Agent test that provokes a bug that seems to occur when the `BUILD_BUILDNUMBER` environment variable is null: https://dev.azure.com/GitTools/GitVersion/_build/results?buildId=289&view=logs&jobId=2d2b3007-3c5c-5840-9bb0-2b1ea49925f3&taskId=c37637b8-ed57-5a02-c556-da2855a7e2d3&lineStart=11928&lineEnd=11929&colStart=1&colEnd=1 --- .../BuildServers/VsoAgentTests.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) 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 From c30f1adddc99c5881f5d29f833f0440d3c25920d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Asbj=C3=B8rn=20Ulsberg?= Date: Fri, 1 Mar 2019 12:03:47 +0100 Subject: [PATCH 2/2] Ensure that VSO Agent does not blow up on null BUILD_BUILDNUMBER --- src/GitVersionCore/BuildServers/VsoAgent.cs | 26 +++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) 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); } } }