Module: RailVerdict::Reporters::GitHubAnnotations
- Defined in:
- lib/rail_verdict/reporters/github_annotations.rb
Class Method Summary collapse
Class Method Details
.render(result, findings: nil) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/rail_verdict/reporters/github_annotations.rb', line 8 def render(result, findings: nil) findings_list = findings || result.findings lines = [] findings_list.sort_by { |finding| [finding["path"] || finding["location"]&.dig("path") || "", finding["start_line"] || finding["location"]&.dig("start_line") || 0, finding["id"] || ""] }.each do |finding| path = extract_path(finding) line = extract_line(finding) col = extract_column(finding) = finding["message"] || finding[:message] || finding["id"] || "" rule_id = finding["rule_id"] || finding[:rule_id] || finding["id"] || "unknown" analyzer = finding["analyzer"] || finding[:analyzer] || "unknown" severity = finding["severity"] || finding[:severity] || "info" blocking = finding["blocking"] level = annotation_level(severity, blocking, result.gate) file_part = "file=#{escape_property(path)}" line_part = line ? ",line=#{line}" : "" col_part = col ? ",col=#{col}" : "" title = escape_data("#{analyzer}:#{rule_id}") msg = escape_data("#{} [#{finding['state'] || finding[:state] || 'observed'}]") lines << "::#{level} #{file_part}#{line_part}#{col_part},title=#{title}::#{msg}" end lines.join("\n") + (lines.empty? ? "" : "\n") end |
.render_summary_markdown(result, findings: nil) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/rail_verdict/reporters/github_annotations.rb', line 31 def render_summary_markdown(result, findings: nil) findings_list = findings || result.findings header = "| File | Rule | Message | Severity | State | Blocking |\n| --- | --- | --- | --- | --- | --- |\n" rows = findings_list.sort_by { |finding| [finding["path"] || finding["location"]&.dig("path") || "", finding["id"] || ""] }.map do |finding| path = finding["path"] || finding["location"]&.dig("path") || finding[:path] || "unknown" rule = finding["rule_id"] || finding[:rule_id] || finding["id"] || "" msg = (finding["message"] || finding[:message] || "").to_s.gsub("|", "\\|").gsub("\n", " ")[0, 200] severity = finding["severity"] || finding[:severity] || "" state = finding["state"] || finding[:state] || "" blocking = finding["blocking"] ? "yes" : "no" "| #{path} | #{rule} | #{msg} | #{severity} | #{state} | #{blocking} |" end summary = "# RailVerdict #{result.gate} (#{result.policy_status})\n\n" summary += findings_list.empty? ? "No findings.\n" : header + rows.join("\n") + "\n" summary += "\nReasons:\n" result.decision_reasons.each do |reason| summary += "- #{reason.fetch('code')}: #{reason.fetch('message')}\n" end summary end |