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); }
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)); }
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; })); }