//private const string Projects = "ESTAT"; //private const string DestProject = "ESTAT"; //private const string Projects = "ATT,ESTAT,GIANO,LRX,SWAT,ZEN"; //private const string DestProject = "SWAT"; static void Main(string[] args) { try { Console.WriteLine("User: diego.medici"); Console.Write("Password: "******"https://studiofarma.atlassian.net", UserName, _password); string[] elencoProject = Projects.Split(','); ListIssueCGM issueCgms = new ListIssueCGM(); int epicPosition = 0; //permette di inserire le epic prima delle issue e di mantenere per lo meno l'ordine tra di loro! foreach (var project in elencoProject) { IEnumerable <Issue> issues = jiraClient.GetIssues(project).OrderBy(k => k, new MyComparer()).ToList(); foreach (var locIssue in issues) { IssueSTF issueStf = GetIssueSTF(locIssue.self); IssueCGM issueCgm = new IssueCGM(issueStf, project, DestProject); if (issueCgm.IssueType.Equals("Epic")) { issueCgms.Insert(epicPosition, issueCgm); epicPosition++; } else { issueCgms.Add(issueCgm); } } foreach (IssueCGM issue in IssueCGM.IssueToDo) { if (IssueCGM.Maps.ContainsKey(issue.OriginalParentIssueKey)) { issue.DestinationParentIssueKey = IssueCGM.Maps[issue.OriginalParentIssueKey]; } } foreach (IssueCGM issue in IssueCGM.EpicsToLink) { if (IssueCGM.MapsEpics.ContainsKey(issue.EpicLinkKey)) { issue.EpicLink = IssueCGM.MapsEpics[issue.EpicLinkKey]; } } } string[] lines = new string[issueCgms.Count + 1]; lines[0] = issueCgms.FirstLine(); int i = 1; foreach (IssueCGM issueCgm in issueCgms) { lines[i++] = issueCgm.ToCSV(issueCgms.MaxCountLabel(), issueCgms.MaxCountAffcectVersion(), issueCgms.MaxCountComponent(), issueCgms.MaxCountFixVersion(), issueCgms.MaxCountComments(), issueCgms.MaxCountAttachments()); Console.WriteLine("Lines {0} Ok", i); } const string nameFileCsv = @"C:\CGM\" + DestProject + ".csv"; Console.WriteLine("Writing file {0}", nameFileCsv); File.WriteAllLines(nameFileCsv, lines); Console.WriteLine("Done!"); } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); } Console.ReadLine(); }
public IssueCGM(IssueSTF issue, string project, string destProject) { string projectWithDash = project + "-"; string destProjectWithDash = destProject + "-"; Labels = new List<string>(); AffectVersion = new List<string>(); FixVersion = new List<string>(); Components = new List<string>(); CommentsBody = new List<CommentCgm>(); Attachments = new List<string>(); OriginalIssueKey = issue.key; DestinationIssueKey = destProjectWithDash+GetNextCounter(); Maps.Add(OriginalIssueKey, DestinationIssueKey); if (issue.fields.parent != null) { OriginalParentIssueKey = issue.fields.parent.key; if (Maps.ContainsKey(OriginalParentIssueKey)) { DestinationParentIssueKey = Maps[OriginalParentIssueKey]; } else { IssueToDo.Add(this); } } if (issue.fields.customfield_10800 != null) { EpicLinkKey = issue.fields.customfield_10800.ToString(); if (MapsEpics.ContainsKey(EpicLinkKey)) { EpicLink = MapsEpics[EpicLinkKey]; } else { EpicsToLink.Add(this); } } switch (issue.fields.issuetype.name) { case "Non-Dev Task": IssueType = "Task"; Labels.Add("Non-Dev Task"); break; case "Improvement": IssueType = "Task"; Labels.Add("Improvement"); break; default: IssueType = issue.fields.issuetype.name; break; } if (issue.fields.reporter != null) { Reporter = EmailChanger(issue.fields.reporter.emailAddress, "reporter"); } DateCreated = issue.fields.created; Summary = issue.fields.summary.Replace(projectWithDash, destProjectWithDash); if (issue.fields.labels != null) foreach (string label in issue.fields.labels) { Labels.Add(label); } if (issue.fields.customfield_11100 != null) { Labels.Add(issue.fields.customfield_11100.value); } if (issue.fields.assignee != null) Assignee = EmailChanger(issue.fields.assignee.emailAddress, "assignee"); if (issue.fields.description != null) { Descripton = issue.fields.description.Replace(projectWithDash, destProjectWithDash); } if (issue.fields.customfield_11500 != null) { CostUnit = issue.fields.customfield_11500.value; } else { CostUnit = "Order external Customer"; } if (issue.fields.priority != null) { Priority = issue.fields.priority.name; } EpicName = issue.fields.customfield_10801; if (!string.IsNullOrEmpty(EpicName)) { MapsEpics.Add(OriginalIssueKey, EpicName); } AcceptanceCriteria = issue.fields.customfield_10503; ChangeLog = issue.fields.customfield_11000; Resolution = issue.fields.resolution == null ? "Unresolved" : issue.fields.resolution.name; if (issue.fields.fixVersions != null) { foreach (Version version in issue.fields.fixVersions) { FixVersion.Add(version.name); } } if (issue.fields.components != null) { foreach (Component component in issue.fields.components) { Components.Add(component.name); } } if (!project.Equals(destProject)) { Labels.Add(project); } CommentCgm oldLink = new CommentCgm(); oldLink.Author = "*****@*****.**"; oldLink.Created = DateTime.Now.ToString("yyyy-MM-ddThh:mm:ss+0000"); oldLink.Body = "Link issue originale su JIRA Studiofarma: https://studiofarma.atlassian.net/browse/" + OriginalIssueKey; CommentsBody.Add(oldLink); if (!string.IsNullOrEmpty(AcceptanceCriteria)) { CommentCgm acceptCriteria = new CommentCgm(); acceptCriteria.Author = Reporter; acceptCriteria.Created = DateTime.Now.ToString("yyyy-MM-ddThh:mm:ss+0000"); acceptCriteria.Body = "AcceptanceCriteria\\r\\n" + AcceptanceCriteria; CommentsBody.Add(acceptCriteria); } if (issue.fields.comment.comments != null) { foreach (CommentDetail commentDetail in issue.fields.comment.comments) { CommentsBody.Add(new CommentCgm(commentDetail, projectWithDash, destProjectWithDash)); } } if (issue.fields.attachment != null) { foreach (var attach in issue.fields.attachment) { var fullPathDesintationName = CopyFile(project, destProject, attach); if (!string.IsNullOrEmpty(fullPathDesintationName)) { Attachments.Add(fullPathDesintationName.Replace(DestinationDir, "")); } } } try { Status = StatusDictionary[issue.fields.status.name]; if (issue.fields.status.name.Equals("Graveyard")) { Resolution = "Rejected"; } } catch (Exception e) { Console.WriteLine("Status key not found: " + issue.fields.status.name); } Console.WriteLine("{0} -> {1} Res: {2} Status: {3} -> {4} ", issue.key, DestinationIssueKey, Resolution, issue.fields.status.name, Status); }