public static int Main(string [] args) { InputDirectory = args.Length == 0 ? "." : args [0]; // collapse the ignored entries on jenkins bots - focus in on what's needs fixing (for the PR) and the work 'to do' bool full = String.IsNullOrEmpty(Environment.GetEnvironmentVariable("JENKINS_SERVER_COOKIE")); int width = 100 / ((full ? 2 : 1) + (full ? 3 : 2) * Platforms.Length); var allfiles = new List <string> (); ReportFolder = args.Length > 1 ? args [1] : "report"; Directory.CreateDirectory(ReportFolder); var log = new StreamWriter(Path.Combine(ReportFolder, "index.html")); log.WriteLine("<html><head><title>Extrospection results</title></head>"); log.WriteLine("<body><h1>Extrospection results</h1>"); log.WriteLine("<table border='0' cellpadding='4' cellspacing='0'>"); log.WriteLine("<thead>"); log.WriteLine("<tr>"); log.WriteLine("<td rowspan='3' bgcolor='lightgrey'>Frameworks</td>"); if (full) { log.WriteLine($"<td align='center' bgcolor='green' colspan='{Platforms.Length + 1}'>REVIEWED (ignored)</td>"); } log.WriteLine($"<td align='center' bgcolor='red' colspan='{Platforms.Length}'>FIXME (unclassified)</td>"); log.WriteLine($"<td align='center' bgcolor='orange' colspan='{Platforms.Length}'>TODO (milestone)</td>"); log.WriteLine("</tr>"); log.WriteLine("<tr>"); if (full) { log.WriteLine($"<td align='center' bgcolor='green' width='{width}%'>Common</td>"); } foreach (var platform in Platforms) { if (full) { log.WriteLine($"<td align='center' bgcolor='green' width='{width}%'>{platform}</td>"); } var files = Directory.GetFiles(InputDirectory, $"{platform}-*.ignore"); foreach (var file in files) { AddFramework(file); } } foreach (var platform in Platforms) { log.WriteLine($"<td align='center' bgcolor='red' width='{width}%'>{platform}</td>"); var files = Directory.GetFiles(InputDirectory, $"{platform}-*.unclassified"); foreach (var file in files) { allfiles.Add(file); AddFramework(file); } var todos = Directory.GetFiles(InputDirectory, $"{platform}-*.todo"); foreach (var file in todos) { AddFramework(file); } } foreach (var platform in Platforms) { log.WriteLine($"<td align='center' bgcolor='orange' width='{width}%'>{platform}</td>"); } log.WriteLine("</tr>"); var cols = (full ? 3 : 2) * Platforms.Length + (full ? 1 : 0); log.WriteLine("<tr>"); log.WriteLine($"<td colspan='{cols + 1}' cellspanning='4'></td>"); log.WriteLine("</tr>"); log.WriteLine("</thead>"); var ignored = new int [Platforms.Length + 1]; var unclassified = new int [Platforms.Length]; var todo = new int [Platforms.Length]; int errors = 0; foreach (var fx in Frameworks) { if (Helpers.Filter(fx)) { continue; } log.WriteLine("<tr>"); log.Write("<td>"); if (!full && ProcessFramework(fx)) { log.Write($"<a href=\"{fx}.ignore.html\">{fx}</a>"); } else { log.Write(fx); } log.WriteLine("</td>"); if (full) { string filename = $"common-{fx}.ignore"; var count = ProcessFile(filename); log.Write("<td align='center' "); if (count < 1) { log.Write("bgcolor='lightgreen'>-</td>"); } else { log.Write($"bgcolor='green'><a href=\"{filename}.html\">{count}</a>"); } log.WriteLine("</td>"); ignored [0] += count; for (int i = 0; i < Platforms.Length; i++) { filename = $"{Platforms [i]}-{fx}.ignore"; count = ProcessFile(filename); log.Write("<td align='center' "); if (count < 1) { log.Write("bgcolor='lightgreen'>-"); } else { log.Write($"bgcolor='green'><a href=\"{filename}.html\">{count}</a>"); } log.WriteLine("</td>"); ignored [i + 1] += count; } } for (int i = 0; i < Platforms.Length; i++) { string filename = $"{Platforms [i]}-{fx}.unclassified"; var count = ProcessFile(Path.Combine(InputDirectory, filename)); log.Write("<td align='center'"); if (count < 1) { log.Write(" bgcolor='salmon'>-"); } else { log.Write($"bgcolor='red'><a href=\"{filename}.html\">{count}</a>"); } log.WriteLine("</td>"); unclassified [i] += count; errors += count; } for (int i = 0; i < Platforms.Length; i++) { string filename = $"{Platforms [i]}-{fx}.todo"; var count = ProcessFile(Path.Combine(InputDirectory, filename)); log.Write("<td align='center' "); if (count <= 0) { log.Write("bgcolor='peachpuff'>-"); } else { log.Write($"bgcolor='orange'><a href=\"{filename}.html\">{count}</a>"); } log.WriteLine("</td>"); todo [i] += count; } log.WriteLine("</tr>"); } log.WriteLine("<tfoot>"); log.WriteLine("<tr>"); log.WriteLine($"<td colspan='{cols}' cellspanning='4'></td>"); log.WriteLine("</tr>"); log.WriteLine("<tr>"); log.WriteLine("<td>Total (per platform)</td>"); var total_ignored = 0; if (full) { for (int i = 0; i < Platforms.Length + 1; i++) { log.Write("<td align='center' "); var count = ignored [i]; if (count <= 0) { log.Write("bgcolor='lightgreen'>-</td>"); } else { log.Write($"bgcolor='green'>{count}</a>"); } log.WriteLine("</td>"); total_ignored += count; } } var total_unclassfied = 0; for (int i = 0; i < Platforms.Length; i++) { log.Write("<td align='center' "); var count = unclassified [i]; if (count <= 0) { log.Write("bgcolor='salmon'>-</td>"); } else { log.Write($"bgcolor='red'>{count}</a>"); } log.WriteLine("</td>"); total_unclassfied += count; } var total_todo = 0; for (int i = 0; i < Platforms.Length; i++) { log.Write("<td align='center' "); var count = todo [i]; if (count <= 0) { log.Write("bgcolor='peachpuff'>-</td>"); } else { log.Write($"bgcolor='orange'>{count}</a>"); } log.WriteLine("</td>"); total_todo += count; } log.WriteLine("</tr>"); log.WriteLine("<tr>"); log.WriteLine("<td>Total (per state)</td>"); if (full) { log.WriteLine($"<td align='center' bgcolor='green' colspan='{Platforms.Length + 1}'>{total_ignored}</td>"); } log.WriteLine($"<td align='center' bgcolor='red' colspan='{Platforms.Length}'>{total_unclassfied}</td>"); log.WriteLine($"<td align='center' bgcolor='orange' colspan='{Platforms.Length}'>{total_todo}</td>"); log.WriteLine("</tr>"); log.WriteLine("<tr>"); log.WriteLine($"<td colspan='{cols}' cellspanning='4'></td>"); log.WriteLine("</tr>"); log.WriteLine("<tr>"); log.WriteLine($"<td align='center' colspan='{cols + 1}' "); if (total_unclassfied == 0) { log.WriteLine($"bgcolor='lightgreen'>SUCCESS"); } else { log.WriteLine($"bgcolor='red'>FAILURE"); } log.WriteLine($"</td>"); log.WriteLine("</tr>"); log.WriteLine("</tfoot>"); log.WriteLine("</table>"); log.WriteLine("</body>"); log.WriteLine("</html>"); log.Flush(); Console.WriteLine($"@MonkeyWrench: SetSummary: {errors} unclassified found."); return(errors == 0 ? 0 : 1); }