Beispiel #1
0
        private string FormatMessageInfoSystem([NotNull] BuildServerExecutionInfo executionInfo)
        {
            var msg = "";

            if (!string.IsNullOrEmpty(executionInfo.JobDescription))
            {
                msg += executionInfo.JobDescription + "\n\n";
            }

            if (executionInfo.ChangeSet.Any())
            {
                var reRedmineParse = new Regex(@"(#(\d+))(\s|$)");

                msg += "<i>Изменения:</i>" + "\n";

                foreach (var chengeComment in executionInfo.ChangeSet.Distinct())
                {
                    var taskAddress = this.RedmineService.FormatTaskAddress("");
                    var chStr       = reRedmineParse.Replace(chengeComment.EscapeHtml().Trim(),
                                                             @"<a href=""" + taskAddress + @"$2"">$1</a>$3");
                    msg += chStr + "\n";
                }
            }

            return(msg);
        }
Beispiel #2
0
        /// <summary> Отформатировать сообщение сборки дампа </summary>
        /// <remarks>
        /// Тут изменения не важны. Но важно будет описание джобы, что б вытащить информацию по дампам и базам
        /// </remarks>
        private string FormatMessageInfoDump([NotNull] BuildServerExecutionInfo executionInfo)
        {
            var msg = "";

            if (!string.IsNullOrEmpty(executionInfo.JobDescription))
            {
                //SdFu Db: 208.0.0.135/sdfu
                //Fl: SdFu.2020.02.09.23.36.04

                //Upd: C:\Builds\SdFu\91.rc.19
                //dbV: 90 rcV: 91 currV: 92 isRc: false
                //Inst: C:\Builds\SdFu\90.rc.16

                var dbNameMatch   = Regex.Match(executionInfo.JobDescription, "Db: (.*?)\\n").Groups[1];
                var fileNameMatch = Regex.Match(executionInfo.JobDescription, "Fl: (.*?)\\n").Groups[1];

                if (dbNameMatch.Success && fileNameMatch.Success)
                {
                    msg += "База: <b>" + dbNameMatch.Captures[0] + "</b>\n";

                    var dmpDateString  = fileNameMatch.Captures[0].Value;
                    var dateParseMatch = Regex.Match(dmpDateString, @"[^\.]+\.(?<year>\d+)\.(?<mm>\d+)\.(?<dd>\d+)\.(?<tm>.*)");
                    if (dateParseMatch.Success)
                    {
                        dmpDateString = dateParseMatch.Groups["dd"].Value + "." + dateParseMatch.Groups["mm"].Value +
                                        "." + dateParseMatch.Groups["year"].Value + " (" +
                                        dateParseMatch.Groups["tm"].Value + ")";
                    }

                    msg += "Дамп от: <b>" + dmpDateString + "</b>\n";
                }

                msg += "\n\nПрочая информация:\n" + executionInfo.JobDescription;
            }


            return(msg);
        }
Beispiel #3
0
        /// <summary> Отформатировать сообщение сборки версии </summary>
        /// <remarks>
        /// Тут не важно описание джобы (тем более оно в 99% отсутствует).
        /// Зато ChageSet форматируется следующим образом:
        /// 1. Если InProgress: Форматируется как для системы (изменения по git).
        /// 2. Если Faild: Формируется по задачам redmine + те что без задачи из гита.
        /// 3. Если Success: Формируется по всем задачам из redmine начиная с последней успешной.
        /// </remarks>
        private string FormatMessageInfoBuildApp([NotNull] BuildServerExecutionInfo executionInfo)
        {
            var msg = "";

            var gitMessages = executionInfo.ChangeSet;

            if (executionInfo.Status == EnumJobStatus.Success)
            {
                var prevFailed = this.JenkinsService.GetAllPrevSuccessInfos(executionInfo);
                foreach (var ch in prevFailed.SelectMany(x => x.ChangeSet))
                {
                    gitMessages.Add(ch);
                }
            }

            if (executionInfo.Status == EnumJobStatus.Success)
            {
                var baseClientDirectory = this.Configuration.Projects?
                                          .SingleOrDefault(x => x.ProjectName == this.Name)?
                                          .ProjectClientDirectory;

                if (!string.IsNullOrEmpty(baseClientDirectory))
                {
                    msg += $"Клиент: \"{baseClientDirectory}{this.VersionCurrent}.00.{executionInfo.JobNum}\"";
                }
            }

            var redmineNums   = new HashSet <string>();
            var otherMessages = new List <string>();

            var reFindRedmineNums = new Regex(@"#(\d+)(\s|\n|$)", RegexOptions.Compiled);

            foreach (var gitMessage in gitMessages)
            {
                var mch = reFindRedmineNums.Match(gitMessage);
                if (mch.Success)
                {
                    redmineNums.Add(mch.Groups[1].Value);
                }
                else
                {
                    otherMessages.Add(gitMessage.EscapeHtml().Trim());
                }
            }

            if (redmineNums.Count != 0)
            {
                msg += "<b>Изменения по следующим задачам:</b>\n";

                var allRedmineTasks = redmineNums.Select(x => this.RedmineService.TryGetTaskDescription(x)).ToList();

                List <RedmineTaskDesc> projectTasks;
                var externalTasks = new List <RedmineTaskDesc>();
                if (this.RedmineProjectName != null)
                {
                    projectTasks  = allRedmineTasks.Where(x => x.Project == this.RedmineProjectName).ToList();
                    externalTasks = allRedmineTasks.Where(x => x.Project != this.RedmineProjectName).ToList();
                }
                else
                {
                    projectTasks = allRedmineTasks;
                }

                foreach (var taskDesc in projectTasks)
                {
                    msg += $"<a href=\"{this.RedmineService.FormatTaskAddress(taskDesc.Num)}\">#{taskDesc.Num}</a> {taskDesc.Subject}\n";
                }

                if (externalTasks.Any())
                {
                    msg += "\n\n\n<b>Изменения по другим проектам:</b>\n";

                    foreach (var prj in externalTasks.GroupBy(x => x.Project))
                    {
                        foreach (var taskDesc in prj.OrderBy(x => x.Num))
                        {
                            msg += $"{prj.Key} <a href=\"{this.RedmineService.FormatTaskAddress(taskDesc.Num)}\">#{taskDesc.Num}</a> {taskDesc.Subject}\n";
                        }
                    }
                }
            }

            if (otherMessages.Count != 0)
            {
                msg += "\n\n\nДругие комментарии:\n" + string.Join("\n", otherMessages);
            }

            return(msg);
        }