/// <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));
        }
Example #2
0
        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);
        }
Example #6
0
        /// <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));
        }
Example #7
0
        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}");
                //    }
                //}
            }
        }