Skip to content

Commit 1222c51

Browse files
authored
Merge pull request #1616 from asbjornu/feature/make-vso-agent-more-robust
Make VSO Agent more robust
2 parents d01dd04 + c30f1ad commit 1222c51

File tree

2 files changed

+30
-7
lines changed

2 files changed

+30
-7
lines changed

src/GitVersionCore.Tests/BuildServers/VsoAgentTests.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,15 @@ public void EscapeValues()
4040
vsVersion[0].ShouldBe("##vso[task.setvariable variable=GitVersion.Foo;]0.8.0-unstable568 Branch:'develop' Sha:'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb'");
4141
}
4242

43+
[Test]
44+
public void MissingEnvShouldNotBlowUp()
45+
{
46+
Environment.SetEnvironmentVariable(key, null, EnvironmentVariableTarget.Process);
47+
48+
var versionBuilder = new VsoAgent();
49+
var semver = "0.0.0-Unstable4";
50+
var vars = new TestableVersionVariables(fullSemVer: semver);
51+
var vsVersion = versionBuilder.GenerateSetVersionMessage(vars);
52+
vsVersion.ShouldBe(semver);
53+
}
4354
}

src/GitVersionCore/BuildServers/VsoAgent.cs

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace GitVersion
22
{
33
using System;
4+
using System.Collections.Generic;
45
using System.Linq;
56
using System.Text.RegularExpressions;
67

@@ -35,19 +36,30 @@ public override string GenerateSetVersionMessage(VersionVariables variables)
3536
{
3637
// For VSO, we'll get the Build Number and insert GitVersion variables where
3738
// specified
38-
var buildNum = Environment.GetEnvironmentVariable("BUILD_BUILDNUMBER");
39+
var buildNumberEnv = Environment.GetEnvironmentVariable("BUILD_BUILDNUMBER");
40+
if (String.IsNullOrWhiteSpace(buildNumberEnv))
41+
return variables.FullSemVer;
3942

40-
var newBuildNum = variables.Aggregate(buildNum, (current, kvp) =>
41-
current.RegexReplace(string.Format(@"\$\(GITVERSION[_\.]{0}\)", kvp.Key), kvp.Value ?? string.Empty, RegexOptions.IgnoreCase));
43+
var newBuildNumber = variables.Aggregate(buildNumberEnv, ReplaceVariables);
4244

4345
// If no variable substitution has happened, use FullSemVer
44-
if (buildNum == newBuildNum)
46+
if (buildNumberEnv == newBuildNumber)
4547
{
46-
var buildNumber = variables.FullSemVer.EndsWith("+0") ? variables.FullSemVer.Substring(0, variables.FullSemVer.Length - 2) : variables.FullSemVer;
47-
return string.Format("##vso[build.updatebuildnumber]{0}", buildNumber);
48+
var buildNumber = variables.FullSemVer.EndsWith("+0")
49+
? variables.FullSemVer.Substring(0, variables.FullSemVer.Length - 2)
50+
: variables.FullSemVer;
51+
52+
return $"##vso[build.updatebuildnumber]{buildNumber}";
4853
}
4954

50-
return string.Format("##vso[build.updatebuildnumber]{0}", newBuildNum);
55+
return $"##vso[build.updatebuildnumber]{newBuildNumber}";
56+
}
57+
58+
private static string ReplaceVariables(string buildNumberEnv, KeyValuePair<string, string> variable)
59+
{
60+
var pattern = $@"\$\(GITVERSION[_\.]{variable.Key}\)";
61+
var replacement = variable.Value ?? string.Empty;
62+
return buildNumberEnv.RegexReplace(pattern, replacement, RegexOptions.IgnoreCase);
5163
}
5264
}
5365
}

0 commit comments

Comments
 (0)