@@ -19,16 +19,19 @@ failure_format = 'classname' if !failure_format || failure_format.empty?
19
19
20
20
report_slowest = ENV [ 'BUILDKITE_PLUGIN_JUNIT_ANNOTATE_REPORT_SLOWEST' ] . to_i
21
21
22
- class Failure < Struct . new ( :name , :unit_name , :body , :job , :type , : message)
22
+ class Failure < Struct . new ( :name , :unit_name , :body , :job , :message )
23
23
end
24
24
25
25
class Timing < Struct . new ( :name , :unit_name , :time )
26
26
end
27
27
28
28
junit_report_files = Dir . glob ( File . join ( junits_dir , "**" , "*" ) , File ::FNM_DOTMATCH )
29
29
testcases = 0
30
- skipped = 0
31
- failures = [ ]
30
+ tests = {
31
+ failure : [ ] ,
32
+ error : [ ] ,
33
+ skipped : [ ]
34
+ }
32
35
timings = [ ]
33
36
34
37
def text_content ( element )
@@ -65,29 +68,22 @@ junit_report_files.sort.each do |file|
65
68
unit_name = testcase . attributes [ failure_format ] . to_s
66
69
time = testcase . attributes [ 'time' ] . to_f
67
70
timings << Timing . new ( name , unit_name , time )
68
- testcase . elements . each ( "failure" ) do |failure |
69
- failures << Failure . new ( name , unit_name , text_content ( failure ) , job , :failure , message_content ( failure ) )
70
- end
71
- testcase . elements . each ( "error" ) do |error |
72
- failures << Failure . new ( name , unit_name , text_content ( error ) , job , :error , message_content ( error ) )
73
- end
74
- testcase . elements . each ( "skipped" ) do |skip |
75
- skipped += 1
71
+ testcase . elements . each ( "failure | error | skipped" ) do |elem |
72
+ tests [ elem . name . to_sym ] << Failure . new ( name , unit_name , text_content ( elem ) , job , message_content ( elem ) )
76
73
end
77
74
end
78
75
end
79
76
80
77
STDERR . puts "--- ✍️ Preparing annotation"
81
78
82
- failures_count = failures . select { |f | f . type == :failure } . length
83
- errors_count = failures . select { |f | f . type == :error } . length
84
-
85
- puts "Failures: #{ failures_count } "
86
- puts "Errors: #{ errors_count } "
87
- puts "Skipped: #{ skipped } "
79
+ puts "Failures: #{ tests [ :failure ] . length } "
80
+ puts "Errors: #{ tests [ :error ] . length } "
81
+ puts "Skipped: #{ tests [ :skipped ] . length } "
88
82
puts "Total tests: #{ testcases } "
89
83
90
- failures . each do |failure |
84
+ tests . delete ( :skipped ) unless ENV . fetch ( 'BUILDKITE_PLUGIN_JUNIT_ANNOTATE_SKIPPED_FORMAT' , 'none' ) != 'none'
85
+
86
+ tests . values . flatten . each do |failure |
91
87
puts ""
92
88
puts "<details>"
93
89
puts "<summary><code>#{ CGI . escapeHTML failure . name } in #{ CGI . escapeHTML failure . unit_name } </code></summary>\n \n "
@@ -119,4 +115,4 @@ if report_slowest > 0
119
115
puts "</details>"
120
116
end
121
117
122
- exit 64 if failures . any? # special exit code to signal test failures
118
+ exit 64 if tests . values . flatten . any? # special exit code to signal test failures
0 commit comments