diff --git a/src/GitVersionCore.Tests/BuildServers/EnvRunTests.cs b/src/GitVersionCore.Tests/BuildServers/EnvRunTests.cs new file mode 100644 index 0000000000..b5deee3ae9 --- /dev/null +++ b/src/GitVersionCore.Tests/BuildServers/EnvRunTests.cs @@ -0,0 +1,67 @@ +using System; +using System.IO; +using GitVersion; +using GitVersionCore.Tests; +using NUnit.Framework; +using Shouldly; + +[TestFixture] +public class EnvRunTests : TestBase +{ + private const string EnvVarName = "ENVRUN_DATABASE"; + private string mFilePath; + + [SetUp] + public void SetEnvironmentVariableForTest() + { + // set environment variable and create an empty envrun file to indicate that EnvRun is running... + mFilePath = Path.Combine(Path.GetTempPath(), "envrun.db"); + Environment.SetEnvironmentVariable(EnvVarName, mFilePath, EnvironmentVariableTarget.Process); + File.OpenWrite(mFilePath).Dispose(); + } + + [TearDown] + public void ClearEnvironmentVariableForTest() + { + Environment.SetEnvironmentVariable(EnvVarName, null, EnvironmentVariableTarget.Process); + File.Delete(mFilePath); + } + + [Test] + public void CanApplyToCurrentContext() + { + EnvRun envrun = new EnvRun(); + bool applys = envrun.CanApplyToCurrentContext(); + applys.ShouldBeTrue(); + } + + [Test] + public void CanApplyToCurrentContext_EnvironmentVariableNotSet() + { + Environment.SetEnvironmentVariable(EnvVarName, null, EnvironmentVariableTarget.Process); + EnvRun envrun = new EnvRun(); + bool applys = envrun.CanApplyToCurrentContext(); + applys.ShouldBeFalse(); + } + + [TestCase("1.2.3")] + [TestCase("1.2.3-rc4")] + public void GenerateSetVersionMessage(string fullSemVer) + { + EnvRun envrun = new EnvRun(); + var vars = new TestableVersionVariables(fullSemVer: fullSemVer); + var version = envrun.GenerateSetVersionMessage(vars); + version.ShouldBe(fullSemVer); + } + + [TestCase("Version", "1.2.3", "@@envrun[set name='GitVersion_Version' value='1.2.3']")] + [TestCase("Version", "1.2.3-rc4", "@@envrun[set name='GitVersion_Version' value='1.2.3-rc4']")] + public void GenerateSetParameterMessage(string name, string value, string expected) + { + EnvRun envrun = new EnvRun(); + var output = envrun.GenerateSetParameterMessage(name, value); + output.ShouldHaveSingleItem(); + output[0].ShouldBe(expected); + } + +} diff --git a/src/GitVersionCore/BuildServers/BuildServerList.cs b/src/GitVersionCore/BuildServers/BuildServerList.cs index dcd4f6f5a8..98aba5429b 100644 --- a/src/GitVersionCore/BuildServers/BuildServerList.cs +++ b/src/GitVersionCore/BuildServers/BuildServerList.cs @@ -15,6 +15,7 @@ public static class BuildServerList new GitLabCi(), new VsoAgent(), new TravisCI(), + new EnvRun(), }; public static IEnumerable GetApplicableBuildServers() diff --git a/src/GitVersionCore/BuildServers/EnvRun.cs b/src/GitVersionCore/BuildServers/EnvRun.cs new file mode 100644 index 0000000000..8032b2779d --- /dev/null +++ b/src/GitVersionCore/BuildServers/EnvRun.cs @@ -0,0 +1,44 @@ +namespace GitVersion +{ + using System; + using System.IO; + + public class EnvRun : BuildServerBase + { + public override bool CanApplyToCurrentContext() + { + string envRunDatabasePath = Environment.GetEnvironmentVariable("ENVRUN_DATABASE"); + if (!string.IsNullOrEmpty(envRunDatabasePath)) + { + if (!File.Exists(envRunDatabasePath)) + { + Logger.WriteError(string.Format("The database file of EnvRun.exe was not found at {0}.", envRunDatabasePath)); + return false; + } + + return true; + } + + return false; + } + + public override string GenerateSetVersionMessage(VersionVariables variables) + { + return variables.FullSemVer; + } + + public override string[] GenerateSetParameterMessage(string name, string value) + { + return new[] + { + string.Format("@@envrun[set name='GitVersion_{0}' value='{1}']", name, value) + }; + } + + public override bool PreventFetch() + { + return true; + } + + } +} \ No newline at end of file