コード例 #1
0
        public string GetNewestVersion()
        {
            HttpWebRequest request = WebRequest.Create("https://api.github.com/repos/thorwin99/SEWorldGenPlugin/releases/latest") as HttpWebRequest;

            request.Method    = "GET";
            request.UserAgent = "SEWorldGenPlugin";
            WebResponse response = request.GetResponse();

            JsonRelease latest = GitHubVersionResponse.Deserialize(response.GetResponseStream());

            m_latestBuild = latest.tag_name.Trim().Substring(1) + ".0";
            m_latestPage  = latest.html_url;
            return(m_latestBuild);
        }
コード例 #2
0
        public void When_deserializing_releases()
        {
            var startTime  = DateTimeOffset.Now.AddHours(-2);
            var finishTime = DateTimeOffset.Now.AddHours(-1);

            var release1 = new JsonRelease
            {
                id      = 1,
                release = new JsonRelease2
                {
                    name = "JsonRelease1"
                },
                deploymentStatus        = "succeeded",
                definitionEnvironmentId = 1,
                releaseEnvironment      = new JsonReleaseEnvironment
                {
                    id   = 1,
                    name = "JsonReleaseEnvironment1"
                },
                attempt           = 3,
                startedOn         = startTime,
                completedOn       = finishTime,
                releaseDefinition = new ReleaseDefinition
                {
                    id   = 2,
                    name = "TrueNorthTest Release"
                }
            };
            var release2 = new JsonRelease
            {
                id      = 2,
                release = new JsonRelease2
                {
                    name = "JsonRelease2"
                },
                deploymentStatus        = "failed",
                definitionEnvironmentId = 2,
                releaseEnvironment      = new JsonReleaseEnvironment
                {
                    id   = 3,
                    name = "JsonReleaseEnvironment2"
                },
                attempt           = 5,
                startedOn         = DateTimeOffset.Now.AddHours(-3),
                completedOn       = finishTime,
                releaseDefinition = new ReleaseDefinition
                {
                    id   = 4,
                    name = "Assessments PC"
                }
            };

            var release1JToken = JToken.Parse(JsonConvert.SerializeObject(release1));
            var release2JToken = JToken.Parse(JsonConvert.SerializeObject(release2));

            var jsonReleases = new JArray
            {
                release1JToken,
                release2JToken
            };

            var mockReleaseRepository = new Mock <ReleaseRepository>();

            mockReleaseRepository.Setup(x => x.ReleaseIsFinishedInDatabase(It.IsAny <int>()))
            .Returns(false);
            var mockReleaseEnvironmentRepository = new Mock <ReleaseEnvironmentRepository>();

            mockReleaseEnvironmentRepository.Setup(x => x.SaveReleaseEnvironmentAsync(It.IsAny <int>(), It.IsAny <string>()));

            var deserializer = new DevOpsDeserializer(mockReleaseRepository.Object, mockReleaseEnvironmentRepository.Object);
            var result       = deserializer.DeserializeReleases(jsonReleases);

            Assert.That(result.Count, Is.EqualTo(2));
            Assert.That(result[0].Id, Is.EqualTo(release1.id));
            Assert.That(result[0].Attempts, Is.EqualTo(release1.attempt));
            Assert.That(result[0].FinishTime, Is.EqualTo(release1.completedOn));
            Assert.That(result[0].Name, Is.EqualTo(release1.release.name));
            Assert.That(result[0].ReleaseEnvironment.Id, Is.EqualTo(release1.definitionEnvironmentId));
            Assert.That(result[0].ReleaseEnvironment.Name, Is.EqualTo(release1.releaseEnvironment.name));
            Assert.That(result[0].StartTime, Is.EqualTo(release1.startedOn));
            Assert.That(result[0].State, Is.EqualTo(release1.deploymentStatus));

            Assert.That(result.Count, Is.EqualTo(2));
            Assert.That(result[1].Id, Is.EqualTo(release2.id));
            Assert.That(result[1].Attempts, Is.EqualTo(release2.attempt));
            Assert.That(result[1].FinishTime, Is.EqualTo(release2.completedOn));
            Assert.That(result[1].Name, Is.EqualTo(release2.release.name));
            Assert.That(result[1].ReleaseEnvironment.Id, Is.EqualTo(release2.definitionEnvironmentId));
            Assert.That(result[1].ReleaseEnvironment.Name, Is.EqualTo(release2.releaseEnvironment.name));
            Assert.That(result[1].StartTime, Is.EqualTo(release2.startedOn));
            Assert.That(result[1].State, Is.EqualTo(release2.deploymentStatus));
        }
コード例 #3
0
        public static Task <string> BuildReport(List <RemoteProject> projectInfo, RemoteProject core)
        {
            return(Task.Run(() =>
            {
                JsonRelease release = new JsonRelease();

                if (!Directory.Exists("Report"))
                {
                    Directory.CreateDirectory("Report");
                }
                var dir = Directory.GetCurrentDirectory().ParentDirectory().ParentDirectory();
                string report = File.ReadAllText(dir + "/Report/report.html");

                if (File.Exists("Report/report.html"))
                {
                    File.Delete("Report/report.html");
                }
                StreamWriter writer = new StreamWriter("Report/report.html");

                report = report.Replace("{release_cycle}", RedmineVersion);
                release.ReleaseCycle = RedmineVersion;
                Application.Current.Dispatcher.Invoke(() =>
                {
                    var w = new ReportArgsWindow();
                    w.ShowDialog();
                    report = report.Replace("{title}", w.ReportArgs.Title);
                    release.ReleaseTitle = w.ReportArgs.Title;

                    report = report.Replace("{general_feeling}", w.ReportArgs.Feeling);
                    release.ReleaseGeneralFeeling = w.ReportArgs.Feeling;

                    if (w.ReportArgs.Notes != null)
                    {
                        report = report.Replace("{notes}", w.ReportArgs.Notes.Replace(Environment.NewLine, "<br/>"));
                    }
                    release.ReleaseNotes = w.ReportArgs.Notes;

                    report = report.Replace("{server_version}", w.ReportArgs.ServerVersion);
                    release.ServerVersion = w.ReportArgs.ServerVersion;
                });

                release.TicketsDesign = designTickets.Count;
                report = report.Replace("{bugs}",
                                        issues.Count(iss => iss.Tracker != null && iss.Tracker.Id == 1).ToString());
                release.BugsResolved = issues.Count(iss => iss.Tracker != null && iss.Tracker.Id == 1);

                report = report.Replace("{features}",
                                        issues.Count(iss => iss.Tracker != null && iss.Tracker.Id == 2).ToString());
                release.FeaturesAdded = issues.Count(iss => iss.Tracker != null && iss.Tracker.Id == 2);

                report = report.Replace("{refactors}",
                                        issues.Count(iss => iss.Tracker != null && iss.Tracker.Id == 9).ToString());
                release.TicketsForRefactoring = issues.Count(iss => iss.Tracker != null && iss.Tracker.Id == 9);


                report = report.Replace("{rejected_tickets}", _rejectedIssues.Count.ToString());
                release.TicketsRejected = _rejectedIssues.Count;


                report = report.Replace("{support_tickets}", _supportIssuesCount.ToString());
                release.SupportTicketsHandled = _supportIssuesCount;

                var aliasBuilder = new StringBuilder();

                var issuesSorted = issues.Where(i => i.CustomFields.Any(
                                                    cf => cf.Name == "Package")).GroupBy(i => i.CustomFields.First(
                                                                                             cf => cf.Name == "Package").Values.Join("<br/>")).ToList();

                release.ReleaseIssuesPerProject = new List <JsonProjectIssues>();

                string project;

                foreach (var iss in issuesSorted)
                {
                    JsonProjectIssues pi = new JsonProjectIssues();
                    pi.ProjectInfo = new List <JsonIssuesInfo>();
                    project = iss.Key;

                    pi.ProjectName = project;
                    aliasBuilder.Append(String.Format(@"<tr><td>{0}</td><td><table id=""box-table-a"">
				            <thead>
					            <tr>
						            <th>Changelog</th>
						            <th>ID</th>
					            </tr>
				            </thead>
				            <tbody>"                , project));

                    foreach (var issue in iss.ToList())
                    {
                        var prinf = new JsonIssuesInfo();
                        var changelog = "";
                        try
                        {
                            changelog =
                                issue.CustomFields.First(cf => cf.Name == "Change log message").Values[0].ToString();
                        }
                        catch
                        {
                        }
                        prinf.ChangelogName = changelog;
                        prinf.TicketId = issue.Id;
                        prinf.Title = issue.Subject;
                        prinf.Tracker = issue.Tracker.Name;
                        pi.ProjectInfo.Add(prinf);
                        Regex regex = new Regex(@"#([0-9])\w+");
                        var match = regex.Matches(changelog);
                        if (match.Count > 0)
                        {
                            foreach (var m in match)
                            {
                                changelog = changelog.Replace(m.ToString(),
                                                              "<a target='_blank' href='http://redmine.dotbydot.eu/issues/" +
                                                              m.ToString().Replace("#", "") + "'>" + m.ToString() + "</a>");
                            }
                        }

                        aliasBuilder.Append(String.Format(@"<tr><td title=""{0}"">(<strong>{1}</strong>) {2}</td><td>{3}</td></tr>",
                                                          issue.Subject,
                                                          issue.Tracker.Name,
                                                          changelog,
                                                          "<a target='_blank' href=\"http://redmine.dotbydot.eu/issues/" + issue.Id + "\">" +
                                                          issue.Id + "</a>"
                                                          ));
                    }
                    aliasBuilder.Append("</tbody></table></td></tr>");
                    release.ReleaseIssuesPerProject.Add(pi);
                }
                report = report.Replace("{tickets}", aliasBuilder.ToString());

                release.ReleaseRejectedIssues = new List <JsonRejectedIssuesInfo>();
                aliasBuilder = new StringBuilder();
                if (rejectedIssues.Count > 0)
                {
                    foreach (var issue in rejectedIssues)
                    {
                        JsonRejectedIssuesInfo pi = new JsonRejectedIssuesInfo();
                        var changelog = "";
                        try
                        {
                            changelog =
                                issue.CustomFields.First(cf => cf.Name == "Reason for Rejecting").Values[0].ToString();
                        }
                        catch
                        {
                        }
                        pi.Reason = changelog;
                        pi.TicketId = issue.Id;
                        pi.Title = issue.Subject;
                        Regex regex = new Regex(@"#([0-9])\w+");
                        var match = regex.Matches(changelog);
                        if (match.Count > 0)
                        {
                            foreach (var m in match)
                            {
                                changelog = changelog.Replace(m.ToString(),
                                                              "<a target='_blank' href='http://redmine.dotbydot.eu/issues/" +
                                                              m.ToString().Replace("#", "") + "'>" + m.ToString() + "</a>");
                            }
                        }

                        aliasBuilder.Append(
                            String.Format(@"<tr><td>(<strong>{0}</strong>) {1}</td><td>{2}</td><td>{3}</td></tr>",
                                          issue.Tracker.Name,
                                          issue.Subject,
                                          changelog,
                                          "<a target='_blank' href=\"http://redmine.dotbydot.eu/issues/" + issue.Id + "\">" +
                                          issue.Id + "</a>"
                                          ));
                        release.ReleaseRejectedIssues.Add(pi);
                    }


                    report = report.Replace("{rejected-tickets}", aliasBuilder.ToString());
                }
                report = report.Replace("{core_version}", core.Version);
                release.CoreClientVersion = core.Version;
                release.UserPluginsVersions = new List <string>();
                //if (projectInfo.Any(p => p.Update))
                //{
                //    aliasBuilder.Clear();
                //    var updated = projectInfo.Where(p => p.Update).ToList();
                //    List<string> plversions = new List<string>();
                //    updated.ForEach(p =>
                //    {
                //        plversions.Add(string.Format("{0} {1}", p.Name, p.SuggestedVersion));
                //        aliasBuilder.Append(string.Format("<li>{0} {1}</li>", p.Name, p.SuggestedVersion));
                //    });
                //    release.UserPluginsVersions = plversions;
                //    report = report.Replace("{plugin_versions}", aliasBuilder.ToString());
                //}
                //writer.Write(report);
                //writer.Close();
                var json = JsonSerializer.SerializeToString(release);
                using (var sw = new StreamWriter("Report/report.json"))
                {
                    sw.Write(json);
                }
                foreach (var file in Directory.GetFiles(dir + "/Report"))
                {
                    if (file.EndsWith(".html"))
                    {
                        continue;
                    }
                    try
                    {
                        File.Copy(file, "Report/" + Path.GetFileName(file), true);
                    }
                    catch
                    {
                    }
                }
                return json;
            }));
        }