/// <summary> /// Creates a configuration from the provided arguments. /// </summary> /// <param name="path">The directory to look for the configuration file.</param> /// <param name="baseConfiguration">The initial base configuration.</param> /// <param name="arguments">The arguments.</param> /// <returns>The created configuration.</returns> public ICakeConfiguration CreateConfiguration(DirectoryPath path, IEnumerable <KeyValuePair <string, string> > baseConfiguration, IDictionary <string, string> arguments) { if (path == null) { throw new ArgumentNullException(nameof(path)); } if (baseConfiguration == null) { throw new ArgumentNullException(nameof(baseConfiguration)); } if (arguments == null) { throw new ArgumentNullException(nameof(arguments)); } var result = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); // Add base configuration. foreach (var kv in baseConfiguration) { result[KeyNormalizer.Normalize(kv.Key)] = kv.Value; } // Get all environment variables. foreach (var variable in _environment.GetEnvironmentVariables()) { if (variable.Key.StartsWith("CAKE_", StringComparison.OrdinalIgnoreCase)) { var key = variable.Key.Substring(5); result[KeyNormalizer.Normalize(key)] = variable.Value; } } // Parse the configuration file. var configurationPath = path.CombineWithFilePath("cake.config").MakeAbsolute(_environment); if (_fileSystem.Exist(configurationPath)) { var parser = new ConfigurationParser(_fileSystem, _environment); var configuration = parser.Read(configurationPath); foreach (var key in configuration.Keys) { result[KeyNormalizer.Normalize(key)] = configuration[key]; } } // Add all arguments. foreach (var key in arguments.Keys) { result[KeyNormalizer.Normalize(key)] = arguments[key]; } return(new CakeConfiguration(result)); }
public ContinuaCIInfoFixture() { Environment = Substitute.For <ICakeEnvironment>(); //ContinuaCIBuildInfo Environment.GetEnvironmentVariable("ContinuaCI.Build.Id").Returns("99"); Environment.GetEnvironmentVariable("ContinuaCI.Build.Version").Returns("v1.2.3"); Environment.GetEnvironmentVariable("ContinuaCI.Build.StartedBy").Returns("TestTrigger"); Environment.GetEnvironmentVariable("ContinuaCI.Build.IsFeatureBranchBuild").Returns("true"); Environment.GetEnvironmentVariable("ContinuaCI.Build.BuildNumber").Returns("999"); Environment.GetEnvironmentVariable("ContinuaCI.Build.Started").Returns("2015-12-15T22:53:37.847+01:00"); Environment.GetEnvironmentVariable("ContinuaCI.Build.UsesDefaultBranch").Returns("false"); Environment.GetEnvironmentVariable("ContinuaCI.Build.HasNewChanges").Returns("true"); Environment.GetEnvironmentVariable("ContinuaCI.Build.ChangesetCount").Returns("6"); Environment.GetEnvironmentVariable("ContinuaCI.Build.IssueCount").Returns("3"); Environment.GetEnvironmentVariable("ContinuaCI.Build.Elapsed").Returns(TimeSpan.FromMinutes(5).ToString()); Environment.GetEnvironmentVariable("ContinuaCI.Build.TimeOnQueue").Returns("7777"); Environment.GetEnvironmentVariable("ContinuaCI.Build.Repositories").Returns("Repo1,Repo2,Repo3"); Environment.GetEnvironmentVariable("ContinuaCI.Build.RepositoryBranches").Returns("Branch1,Branch2,Branch3"); Environment.GetEnvironmentVariable("ContinuaCI.Build.TriggeringBranch").Returns("Branch2"); Environment.GetEnvironmentVariable("ContinuaCI.Build.ChangesetRevisions").Returns("6,8,65"); Environment.GetEnvironmentVariable("ContinuaCI.Build.ChangesetUserNames").Returns("george,bill"); Environment.GetEnvironmentVariable("ContinuaCI.Build.ChangesetTagNames").Returns("tag1,tag2,tag 3"); //ContinuaCIChangesetInfo Environment.GetEnvironmentVariable("ContinuaCI.Build.LatestChangeset.Revision").Returns("55"); Environment.GetEnvironmentVariable("ContinuaCI.Build.LatestChangeset.Branch").Returns("master"); Environment.GetEnvironmentVariable("ContinuaCI.Build.LatestChangeset.Created").Returns("2016-01-02T12:00:16.666+11:00"); Environment.GetEnvironmentVariable("ContinuaCI.Build.LatestChangeset.FileCount").Returns("77"); Environment.GetEnvironmentVariable("ContinuaCI.Build.LatestChangeset.UserName").Returns("georgedawes"); Environment.GetEnvironmentVariable("ContinuaCI.Build.LatestChangeset.TagCount").Returns("2"); Environment.GetEnvironmentVariable("ContinuaCI.Build.LatestChangeset.IssueCount").Returns("3"); Environment.GetEnvironmentVariable("ContinuaCI.Build.LatestChangeset.TagNames").Returns("the tag,the other tag"); Environment.GetEnvironmentVariable("ContinuaCI.Build.LatestChangeset.IssueNames").Returns("an important issue,another more important issue,a not so important issue"); //ContinuaCIProjectInfo Environment.GetEnvironmentVariable("ContinuaCI.Project.Name").Returns("the project from hell"); //ContinuaCIConfigurationInfo Environment.GetEnvironmentVariable("ContinuaCI.Configuration.Name").Returns("The configuration from the end of the universe"); //ContinuaCIEnvironmentInfo Environment.GetEnvironmentVariables().Returns(new Dictionary <string, string>() { { "ContinuaCI.Variable.TestVar1", "gorgonzola" }, { "ContinuaCI.Variable.TestVar2", "is" }, { "ContinuaCI.Variable.TestVarX", "tasty" }, { "This.Is.A.Dummy", "Init?" }, { "ContinuaCI.AgentProperty.DotNet.4.0.FrameworkPathX64", @"C:\Windows\Microsoft.NET\Framework64\v4.0.30319" }, { "ContinuaCI.AgentProperty.MSBuild.4.0.PathX86", @"C:\Windows\Microsoft.NET\Framework\v4.0.30319" }, { "ContinuaCI.AgentProperty.ServerFileTransport.UNCAvailable", "True" } }); Environment.GetEnvironmentVariable("ContinuaCI.Version").Returns("v1.6.6.6"); }
/// <summary> /// Gets matching list of environment variables as an dictionary of <see cref="System.String"/>. /// </summary> /// <param name="variablePrefix">The prefix for the environment variables name.</param> /// <returns>A dictionary of environment variables starting with variablePrefix.</returns> protected IDictionary <string, string> GetEnvironmentStringDictionary(string variablePrefix) { if (_allEnvironmentVariables == null) { _allEnvironmentVariables = _environment.GetEnvironmentVariables(); } var startsWith = string.Format(CultureInfo.InvariantCulture, "{0}.", variablePrefix); var matchingVariables = _allEnvironmentVariables.Where(v => v.Key.StartsWith(startsWith)).ToDictionary(p => p.Key.Substring(startsWith.Length), p => p.Value); return(matchingVariables); }
/// <summary> /// Expands the environment variables in the text. Variables shoud be quoted with %. /// </summary> /// <param name="environment">The cake environment interface</param> /// <param name="text">A string containing the names of zero or more environment variables.</param> /// <returns>A string with each environment variable replaced by its value.</returns> public static string ExpandEnvironmentVariables(this ICakeEnvironment environment, string text) { var environmentVariables = environment.GetEnvironmentVariables(); Regex r = new Regex("%(.*?)%"); var matches = r.Matches(text); foreach (Match m in matches) { string varName = m.Groups[1].Value; if (environmentVariables.ContainsKey(varName)) { text = text.Replace(m.Value, environmentVariables[varName]); } } return(text); }
/// <summary> /// Expands the environment variables in the provided text. /// </summary> /// <example> /// <code> /// var expanded = environment.ExpandEnvironmentVariables("%APPDATA%/foo"); /// </code> /// </example> /// <param name="environment">The environment.</param> /// <param name="text">A string containing the names of zero or more environment variables.</param> /// <returns>A string with each environment variable replaced by its value.</returns> public static string ExpandEnvironmentVariables(this ICakeEnvironment environment, string text) { var variables = environment.GetEnvironmentVariables(); var matches = _regex.Matches(text); foreach (Match match in matches) { string value = match.Groups[1].Value; if (variables.ContainsKey(value)) { text = text.Replace(match.Value, variables[value]); } } return(text); }
/// <summary> /// Creates a configuration from the provided arguments. /// </summary> /// <param name="arguments">The arguments.</param> /// <returns>The created configuration.</returns> public ICakeConfiguration CreateConfiguration(IDictionary <string, string> arguments) { if (arguments == null) { throw new ArgumentNullException("arguments"); } var result = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); // Get all environment variables. foreach (var variable in _environment.GetEnvironmentVariables()) { if (variable.Key.StartsWith("CAKE_", StringComparison.OrdinalIgnoreCase)) { var key = variable.Key.Substring(5); result[KeyNormalizer.Normalize(key)] = variable.Value; } } // Parse the configuration file. var path = new FilePath("./cake.config").MakeAbsolute(_environment); if (_fileSystem.Exist(path)) { var parser = new ConfigurationParser(_fileSystem, _environment); var configuration = parser.Read(path); foreach (var key in configuration.Keys) { result[KeyNormalizer.Normalize(key)] = configuration[key]; } } // Add all arguments. foreach (var key in arguments.Keys) { result[KeyNormalizer.Normalize(key)] = arguments[key]; } return(new CakeConfiguration(result)); }
public VersionHelper(ICakeEnvironment environment, ICakeLog log, ICakeArguments arguments, IAppVeyorProvider appVeyorProvider, ITFBuildProvider azureProvider, IGlobber globber, IFileSystem fileSystem, IProcessRunner processRunner, IToolLocator tools) { _environment = environment; _log = log; _arguments = arguments; _appVeyorProvider = appVeyorProvider; _azureProvider = azureProvider; _globber = globber; _fileSystem = fileSystem; _processRunner = processRunner; _tools = tools; if (environment == null) { throw new ArgumentNullException(nameof(environment)); } if (log == null) { throw new ArgumentNullException(nameof(log)); } Configuration = environment.GetEnvironmentVariable("CONFIGURATION"); if (string.IsNullOrWhiteSpace(Configuration)) { Configuration = _arguments.HasArgument("configuration") ? _arguments.GetArgument("configuration") : "Release"; } string envLogging = environment.GetEnvironmentVariable("LOGGINGLEVEL"); if (!string.IsNullOrWhiteSpace(envLogging)) { Verbosity loggingEnum; if (Enum.TryParse(envLogging, true, out loggingEnum)) { log.Verbosity = loggingEnum; log.Information($"Logging Level: {loggingEnum}", Verbosity.Quiet); if (IsAppVeyor) { _appVeyorProvider.AddInformationalMessage($"Logging set by LoggingLevel enviornment variable to {loggingEnum}"); } _isDefaultLoggingLevel = false; } else { string msg = $"Invalid logging level [{envLogging}]. Use {Verbosity.Quiet}, {Verbosity.Minimal}, {Verbosity.Normal}, {Verbosity.Verbose} or {Verbosity.Diagnostic}"; if (IsAppVeyor) { log.Warning(msg); } _appVeyorProvider.AddWarningMessage(msg); } } else { _isDefaultLoggingLevel = !arguments.HasArgument("verbosity"); } if (_log.Verbosity > Verbosity.Normal) { var environmentVariables = environment.GetEnvironmentVariables(); foreach (string key in environmentVariables.Keys) { log.Verbose($"{key}:{environmentVariables[key]}"); } } CommitMessageMatches = new MatchResult { Success = false }; if (IsAppVeyor) { Branch = _appVeyorProvider.Environment.Repository.Branch; CommitMessageShort = _appVeyorProvider.Environment.Repository.Commit.Message; var match = CommitMessageRegex.Match(_appVeyorProvider.Environment.Repository.Commit.ExtendedMessage); CommitMessageMatches = new MatchResult { Success = match.Success, Groups = match.Groups }; _log.Debug($"Branch:{Branch}"); _log.Debug($"Commit Msg Short:{CommitMessageShort}"); _log.Debug($"Commit Msg Extended:{_appVeyorProvider.Environment.Repository.Commit.ExtendedMessage}"); _log.Debug($"Commit Message Cmd Match:{CommitMessageMatches.Success}"); if (_log.Verbosity >= Verbosity.Verbose && CommitMessageMatches.Success) { _log.Debug("RegEx Group Matches"); foreach (string groupName in CommitMessageRegex.GetGroupNames()) { _log.Debug($"{groupName} : {CommitMessageMatches.Groups[groupName].Value}"); } } } if (IsAzureDevops) { Branch = _azureProvider.Environment.Repository.Branch; //CommitMessageShort = _azureProvider.Environment.Repository.Commit.Message; //var match = CommitMessageRegex.Match(_azureProvider.Environment.Repository.Commit.ExtendedMessage); //CommitMessageMatches = new MatchResult { Success = match.Success, Groups = match.Groups }; //_log.Debug($"Branch:{Branch}"); //_log.Debug($"Commit Msg Short:{CommitMessageShort}"); //_log.Debug($"Commit Msg Extended:{_appVeyorProvider.Environment.Repository.Commit.ExtendedMessage}"); //_log.Debug($"Commit Message Cmd Match:{CommitMessageMatches.Success}"); //if (_log.Verbosity >= Verbosity.Verbose && CommitMessageMatches.Success) //{ // _log.Debug("RegEx Group Matches"); // foreach (string groupName in CommitMessageRegex.GetGroupNames()) // { // _log.Debug($"{groupName} : {CommitMessageMatches.Groups[groupName].Value}"); // } //} } }