From 7be161feb2e17718b1846792b86a05037e0ed726 Mon Sep 17 00:00:00 2001 From: Maarten Balliauw Date: Tue, 28 Oct 2014 11:37:32 +0100 Subject: [PATCH 1/5] Added MyGet Build Services support --- .../BuildServers/BuildServerList.cs | 3 +- GitVersionCore/BuildServers/MyGet.cs | 64 +++++++++++++++++++ GitVersionCore/GitVersionCore.csproj | 1 + .../BuildServers/MyGetTests.cs | 26 ++++++++ .../GitVersionTask.Tests.csproj | 1 + 5 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 GitVersionCore/BuildServers/MyGet.cs create mode 100644 GitVersionTask.Tests/BuildServers/MyGetTests.cs diff --git a/GitVersionCore/BuildServers/BuildServerList.cs b/GitVersionCore/BuildServers/BuildServerList.cs index e2d86161ff..b39adbe40a 100644 --- a/GitVersionCore/BuildServers/BuildServerList.cs +++ b/GitVersionCore/BuildServers/BuildServerList.cs @@ -27,7 +27,8 @@ static IEnumerable DefaultSelector(Authentication authentication) { new ContinuaCi(authentication), new TeamCity(authentication), - new AppVeyor(authentication) + new AppVeyor(authentication), + new MyGet(authentication) }; } diff --git a/GitVersionCore/BuildServers/MyGet.cs b/GitVersionCore/BuildServers/MyGet.cs new file mode 100644 index 0000000000..d690d55205 --- /dev/null +++ b/GitVersionCore/BuildServers/MyGet.cs @@ -0,0 +1,64 @@ +namespace GitVersion +{ + using System; + + public class MyGet : BuildServerBase + { + Authentication authentication; + + public MyGet(Authentication authentication) + { + this.authentication = authentication; + } + + public override bool CanApplyToCurrentContext() + { + var buildRunner = Environment.GetEnvironmentVariable("BuildRunner"); + + return !string.IsNullOrEmpty(buildRunner) + && buildRunner.Equals("MyGet", StringComparison.InvariantCultureIgnoreCase); + } + + public override void PerformPreProcessingSteps(string gitDirectory) + { + if (string.IsNullOrEmpty(gitDirectory)) + { + throw new WarningException("Failed to find .git directory on agent."); + } + + GitHelper.NormalizeGitDirectory(gitDirectory, authentication); + } + + public override string[] GenerateSetParameterMessage(string name, string value) + { + return new[] + { + string.Format("##teamcity[setParameter name='GitVersion.{0}' value='{1}']", name, EscapeValue(value)), + string.Format("##teamcity[setParameter name='system.GitVersion.{0}' value='{1}']", name, EscapeValue(value)) + }; + } + + public override string GenerateSetVersionMessage(string versionToUseForBuildNumber) + { + return string.Format("##teamcity[buildNumber '{0}']", EscapeValue(versionToUseForBuildNumber)); + } + + static string EscapeValue(string value) + { + if (value == null) + { + return null; + } + // List of escape values from http://confluence.jetbrains.com/display/TCD8/Build+Script+Interaction+with+TeamCity + + value = value.Replace("|", "||"); + value = value.Replace("'", "|'"); + value = value.Replace("[", "|["); + value = value.Replace("]", "|]"); + value = value.Replace("\r", "|r"); + value = value.Replace("\n", "|n"); + + return value; + } + } +} diff --git a/GitVersionCore/GitVersionCore.csproj b/GitVersionCore/GitVersionCore.csproj index b0c7a48564..966ffc3d4d 100644 --- a/GitVersionCore/GitVersionCore.csproj +++ b/GitVersionCore/GitVersionCore.csproj @@ -62,6 +62,7 @@ + diff --git a/GitVersionTask.Tests/BuildServers/MyGetTests.cs b/GitVersionTask.Tests/BuildServers/MyGetTests.cs new file mode 100644 index 0000000000..028b18c760 --- /dev/null +++ b/GitVersionTask.Tests/BuildServers/MyGetTests.cs @@ -0,0 +1,26 @@ +using GitVersion; +using NUnit.Framework; + +[TestFixture] +public class MyGetTests +{ + [Test] + public void Develop_branch() + { + var authentication = new Authentication(); + var versionBuilder = new MyGet(authentication); + var message = versionBuilder.GenerateSetVersionMessage("0.0.0-Unstable4"); + Assert.AreEqual("##teamcity[buildNumber '0.0.0-Unstable4']", message); + } + + [Test] + public void EscapeValues() + { + var authentication = new Authentication(); + var versionBuilder = new MyGet(authentication); + var message = versionBuilder.GenerateSetParameterMessage("Foo", "0.8.0-unstable568 Branch:'develop' Sha:'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb'"); + Assert.AreEqual("##teamcity[setParameter name='GitVersion.Foo' value='0.8.0-unstable568 Branch:|'develop|' Sha:|'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb|'']", message[0]); + Assert.AreEqual("##teamcity[setParameter name='system.GitVersion.Foo' value='0.8.0-unstable568 Branch:|'develop|' Sha:|'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb|'']", message[1]); + } + +} \ No newline at end of file diff --git a/GitVersionTask.Tests/GitVersionTask.Tests.csproj b/GitVersionTask.Tests/GitVersionTask.Tests.csproj index 827779a5d3..8e29b8a7ca 100644 --- a/GitVersionTask.Tests/GitVersionTask.Tests.csproj +++ b/GitVersionTask.Tests/GitVersionTask.Tests.csproj @@ -89,6 +89,7 @@ + From ffafd99ef8bb3a43d36ee1460c5d4731ed4dd550 Mon Sep 17 00:00:00 2001 From: Maarten Balliauw Date: Tue, 28 Oct 2014 11:39:50 +0100 Subject: [PATCH 2/5] No need for multiple variables to be set with MyGet buildservices. --- GitVersionCore/BuildServers/MyGet.cs | 3 +-- GitVersionTask.Tests/BuildServers/MyGetTests.cs | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/GitVersionCore/BuildServers/MyGet.cs b/GitVersionCore/BuildServers/MyGet.cs index d690d55205..d9fcdfdde3 100644 --- a/GitVersionCore/BuildServers/MyGet.cs +++ b/GitVersionCore/BuildServers/MyGet.cs @@ -33,8 +33,7 @@ public override string[] GenerateSetParameterMessage(string name, string value) { return new[] { - string.Format("##teamcity[setParameter name='GitVersion.{0}' value='{1}']", name, EscapeValue(value)), - string.Format("##teamcity[setParameter name='system.GitVersion.{0}' value='{1}']", name, EscapeValue(value)) + string.Format("##teamcity[setParameter name='GitVersion.{0}' value='{1}']", name, EscapeValue(value)) }; } diff --git a/GitVersionTask.Tests/BuildServers/MyGetTests.cs b/GitVersionTask.Tests/BuildServers/MyGetTests.cs index 028b18c760..7f9a9775c6 100644 --- a/GitVersionTask.Tests/BuildServers/MyGetTests.cs +++ b/GitVersionTask.Tests/BuildServers/MyGetTests.cs @@ -20,7 +20,6 @@ public void EscapeValues() var versionBuilder = new MyGet(authentication); var message = versionBuilder.GenerateSetParameterMessage("Foo", "0.8.0-unstable568 Branch:'develop' Sha:'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb'"); Assert.AreEqual("##teamcity[setParameter name='GitVersion.Foo' value='0.8.0-unstable568 Branch:|'develop|' Sha:|'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb|'']", message[0]); - Assert.AreEqual("##teamcity[setParameter name='system.GitVersion.Foo' value='0.8.0-unstable568 Branch:|'develop|' Sha:|'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb|'']", message[1]); } } \ No newline at end of file From 76cf3fdb762930d64ac205edf418f884bb3d5841 Mon Sep 17 00:00:00 2001 From: Maarten Balliauw Date: Tue, 28 Oct 2014 11:47:57 +0100 Subject: [PATCH 3/5] Going with ##myget for MyGet service messages --- GitVersionCore/BuildServers/MyGet.cs | 4 ++-- GitVersionTask.Tests/BuildServers/MyGetTests.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/GitVersionCore/BuildServers/MyGet.cs b/GitVersionCore/BuildServers/MyGet.cs index d9fcdfdde3..f6ed6b1f59 100644 --- a/GitVersionCore/BuildServers/MyGet.cs +++ b/GitVersionCore/BuildServers/MyGet.cs @@ -33,13 +33,13 @@ public override string[] GenerateSetParameterMessage(string name, string value) { return new[] { - string.Format("##teamcity[setParameter name='GitVersion.{0}' value='{1}']", name, EscapeValue(value)) + string.Format("##myget[setParameter name='GitVersion.{0}' value='{1}']", name, EscapeValue(value)) }; } public override string GenerateSetVersionMessage(string versionToUseForBuildNumber) { - return string.Format("##teamcity[buildNumber '{0}']", EscapeValue(versionToUseForBuildNumber)); + return string.Format("##myget[buildNumber '{0}']", EscapeValue(versionToUseForBuildNumber)); } static string EscapeValue(string value) diff --git a/GitVersionTask.Tests/BuildServers/MyGetTests.cs b/GitVersionTask.Tests/BuildServers/MyGetTests.cs index 7f9a9775c6..95ae7caaab 100644 --- a/GitVersionTask.Tests/BuildServers/MyGetTests.cs +++ b/GitVersionTask.Tests/BuildServers/MyGetTests.cs @@ -10,7 +10,7 @@ public void Develop_branch() var authentication = new Authentication(); var versionBuilder = new MyGet(authentication); var message = versionBuilder.GenerateSetVersionMessage("0.0.0-Unstable4"); - Assert.AreEqual("##teamcity[buildNumber '0.0.0-Unstable4']", message); + Assert.AreEqual("##myget[buildNumber '0.0.0-Unstable4']", message); } [Test] @@ -19,7 +19,7 @@ public void EscapeValues() var authentication = new Authentication(); var versionBuilder = new MyGet(authentication); var message = versionBuilder.GenerateSetParameterMessage("Foo", "0.8.0-unstable568 Branch:'develop' Sha:'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb'"); - Assert.AreEqual("##teamcity[setParameter name='GitVersion.Foo' value='0.8.0-unstable568 Branch:|'develop|' Sha:|'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb|'']", message[0]); + Assert.AreEqual("##myget[setParameter name='GitVersion.Foo' value='0.8.0-unstable568 Branch:|'develop|' Sha:|'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb|'']", message[0]); } } \ No newline at end of file From 0e3b92eb7dba65fa7ef6e61b0b9e9127008012bb Mon Sep 17 00:00:00 2001 From: Maarten Balliauw Date: Wed, 29 Oct 2014 13:20:46 +0100 Subject: [PATCH 4/5] Setting Environment Variable for MyGet build server type --- GitVersionCore/BuildServers/MyGet.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/GitVersionCore/BuildServers/MyGet.cs b/GitVersionCore/BuildServers/MyGet.cs index f6ed6b1f59..9d63efe9cd 100644 --- a/GitVersionCore/BuildServers/MyGet.cs +++ b/GitVersionCore/BuildServers/MyGet.cs @@ -31,6 +31,8 @@ public override void PerformPreProcessingSteps(string gitDirectory) public override string[] GenerateSetParameterMessage(string name, string value) { + Environment.SetEnvironmentVariable(string.Format("GitVersion.{0}", name), value, EnvironmentVariableTarget.Process); + return new[] { string.Format("##myget[setParameter name='GitVersion.{0}' value='{1}']", name, EscapeValue(value)) From fce0bcae20c5b0e9c21fad068f8e648263be517f Mon Sep 17 00:00:00 2001 From: Maarten Balliauw Date: Fri, 7 Nov 2014 01:37:06 +0100 Subject: [PATCH 5/5] MyGet buildNumber message now sent based on LegacySemVerPadded. --- GitVersionCore/BuildServers/MyGet.cs | 32 ++++++------------- GitVersionCore/BuildServers/TeamCity.cs | 24 ++------------ GitVersionCore/Helpers/DeleteHelper.cs | 20 ++++++++++++ .../BuildServers/MyGetTests.cs | 10 +++++- 4 files changed, 42 insertions(+), 44 deletions(-) diff --git a/GitVersionCore/BuildServers/MyGet.cs b/GitVersionCore/BuildServers/MyGet.cs index 9d63efe9cd..9b45a9695a 100644 --- a/GitVersionCore/BuildServers/MyGet.cs +++ b/GitVersionCore/BuildServers/MyGet.cs @@ -1,6 +1,7 @@ namespace GitVersion { using System; + using System.Collections.Generic; public class MyGet : BuildServerBase { @@ -31,35 +32,22 @@ public override void PerformPreProcessingSteps(string gitDirectory) public override string[] GenerateSetParameterMessage(string name, string value) { - Environment.SetEnvironmentVariable(string.Format("GitVersion.{0}", name), value, EnvironmentVariableTarget.Process); - - return new[] + var messages = new List { - string.Format("##myget[setParameter name='GitVersion.{0}' value='{1}']", name, EscapeValue(value)) + string.Format("##myget[setParameter name='GitVersion.{0}' value='{1}']", name, ServiceMessageEscapeHelper.EscapeValue(value)) }; - } - - public override string GenerateSetVersionMessage(string versionToUseForBuildNumber) - { - return string.Format("##myget[buildNumber '{0}']", EscapeValue(versionToUseForBuildNumber)); - } - static string EscapeValue(string value) - { - if (value == null) + if (string.Equals(name, "LegacySemVerPadded", StringComparison.InvariantCultureIgnoreCase)) { - return null; + messages.Add(string.Format("##myget[buildNumber '{0}']", ServiceMessageEscapeHelper.EscapeValue(value))); } - // List of escape values from http://confluence.jetbrains.com/display/TCD8/Build+Script+Interaction+with+TeamCity - value = value.Replace("|", "||"); - value = value.Replace("'", "|'"); - value = value.Replace("[", "|["); - value = value.Replace("]", "|]"); - value = value.Replace("\r", "|r"); - value = value.Replace("\n", "|n"); + return messages.ToArray(); + } - return value; + public override string GenerateSetVersionMessage(string versionToUseForBuildNumber) + { + return null; } } } diff --git a/GitVersionCore/BuildServers/TeamCity.cs b/GitVersionCore/BuildServers/TeamCity.cs index 957295615a..626cbd1043 100644 --- a/GitVersionCore/BuildServers/TeamCity.cs +++ b/GitVersionCore/BuildServers/TeamCity.cs @@ -30,32 +30,14 @@ public override string[] GenerateSetParameterMessage(string name, string value) { return new[] { - string.Format("##teamcity[setParameter name='GitVersion.{0}' value='{1}']", name, EscapeValue(value)), - string.Format("##teamcity[setParameter name='system.GitVersion.{0}' value='{1}']", name, EscapeValue(value)) + string.Format("##teamcity[setParameter name='GitVersion.{0}' value='{1}']", name, ServiceMessageEscapeHelper.EscapeValue(value)), + string.Format("##teamcity[setParameter name='system.GitVersion.{0}' value='{1}']", name, ServiceMessageEscapeHelper.EscapeValue(value)) }; } public override string GenerateSetVersionMessage(string versionToUseForBuildNumber) { - return string.Format("##teamcity[buildNumber '{0}']", EscapeValue(versionToUseForBuildNumber)); - } - - static string EscapeValue(string value) - { - if (value == null) - { - return null; - } - // List of escape values from http://confluence.jetbrains.com/display/TCD8/Build+Script+Interaction+with+TeamCity - - value = value.Replace("|", "||"); - value = value.Replace("'", "|'"); - value = value.Replace("[", "|["); - value = value.Replace("]", "|]"); - value = value.Replace("\r", "|r"); - value = value.Replace("\n", "|n"); - - return value; + return string.Format("##teamcity[buildNumber '{0}']", ServiceMessageEscapeHelper.EscapeValue(versionToUseForBuildNumber)); } } } diff --git a/GitVersionCore/Helpers/DeleteHelper.cs b/GitVersionCore/Helpers/DeleteHelper.cs index 37888943d4..83ad19f277 100644 --- a/GitVersionCore/Helpers/DeleteHelper.cs +++ b/GitVersionCore/Helpers/DeleteHelper.cs @@ -2,6 +2,26 @@ { using System.IO; + public static class ServiceMessageEscapeHelper + { + public static string EscapeValue(string value) + { + if (value == null) + { + return null; + } + // List of escape values from http://confluence.jetbrains.com/display/TCD8/Build+Script+Interaction+with+TeamCity + + value = value.Replace("|", "||"); + value = value.Replace("'", "|'"); + value = value.Replace("[", "|["); + value = value.Replace("]", "|]"); + value = value.Replace("\r", "|r"); + value = value.Replace("\n", "|n"); + + return value; + } + } public static class DeleteHelper { public static void DeleteGitRepository(string directory) diff --git a/GitVersionTask.Tests/BuildServers/MyGetTests.cs b/GitVersionTask.Tests/BuildServers/MyGetTests.cs index 95ae7caaab..e88d9b29a7 100644 --- a/GitVersionTask.Tests/BuildServers/MyGetTests.cs +++ b/GitVersionTask.Tests/BuildServers/MyGetTests.cs @@ -10,7 +10,7 @@ public void Develop_branch() var authentication = new Authentication(); var versionBuilder = new MyGet(authentication); var message = versionBuilder.GenerateSetVersionMessage("0.0.0-Unstable4"); - Assert.AreEqual("##myget[buildNumber '0.0.0-Unstable4']", message); + Assert.AreEqual(null, message); } [Test] @@ -22,4 +22,12 @@ public void EscapeValues() Assert.AreEqual("##myget[setParameter name='GitVersion.Foo' value='0.8.0-unstable568 Branch:|'develop|' Sha:|'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb|'']", message[0]); } + [Test] + public void BuildNumber() + { + var authentication = new Authentication(); + var versionBuilder = new MyGet(authentication); + var message = versionBuilder.GenerateSetParameterMessage("LegacySemVerPadded", "0.8.0-unstable568"); + Assert.AreEqual("##myget[buildNumber '0.8.0-unstable568']", message[1]); + } } \ No newline at end of file