gitlab_quality-test_tooling 2.3.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/gitlab_quality/test_tooling/job_trace_analyzer.rb +65 -2
- data/lib/gitlab_quality/test_tooling/report/relate_failure_issue.rb +1 -1
- data/lib/gitlab_quality/test_tooling/test_result/base_test_result.rb +6 -0
- data/lib/gitlab_quality/test_tooling/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd181fe7622793361cd772d2f949d1a8922f4b0762c2d50ae9f839fdfd69bb86
|
4
|
+
data.tar.gz: aaa900d8e19eff7ae0016bda52bf6dc3722aa4e4fe288f16c16d6685254c831a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b5e1a85230726944574ec3c92c9fbe0e8a547776a6a7f7ce07d4db1889abf1a23b35a8b13b55d79eaf90eb3b7cfac4ec47960efa9eedaa509ffa02dd9655077
|
7
|
+
data.tar.gz: 47f438135b5ac5d4cc2cfc95a30e6a917f6de4c714bd8f42ed74c4d51439af925ac1424bf2105e71c76cd581f5faf287d8d0a415bf4c220df36df2fd85ec6149
|
data/Gemfile.lock
CHANGED
@@ -7,6 +7,38 @@ module GitlabQuality
|
|
7
7
|
class JobTraceAnalyzer
|
8
8
|
attr_reader :project, :token, :job_id
|
9
9
|
|
10
|
+
FailureTraceDefinition = Struct.new(:type, :trace_start, :trace_end, :language, :label, keyword_init: true)
|
11
|
+
FAILURE_TRACE_DEFINITIONS = [
|
12
|
+
FailureTraceDefinition.new(
|
13
|
+
type: :rspec,
|
14
|
+
trace_start: "Failures:\n",
|
15
|
+
trace_end: "[TEST PROF INFO]",
|
16
|
+
language: :ruby,
|
17
|
+
label: '~backend'
|
18
|
+
),
|
19
|
+
FailureTraceDefinition.new(
|
20
|
+
type: :jest,
|
21
|
+
trace_start: "Summary of all failing tests\n",
|
22
|
+
trace_end: "\nRan all test suites.",
|
23
|
+
language: :javascript,
|
24
|
+
label: '~frontend'
|
25
|
+
),
|
26
|
+
FailureTraceDefinition.new(
|
27
|
+
type: :workhorse,
|
28
|
+
trace_start: "make: Entering directory '/builds/gitlab-org/gitlab/workhorse'",
|
29
|
+
trace_end: "make: Leaving directory '/builds/gitlab-org/gitlab/workhorse'",
|
30
|
+
language: :go,
|
31
|
+
label: '~workhorse'
|
32
|
+
),
|
33
|
+
FailureTraceDefinition.new(
|
34
|
+
type: :rubocop,
|
35
|
+
trace_start: "Running RuboCop in graceful mode:",
|
36
|
+
trace_end: "section_end",
|
37
|
+
language: :ruby,
|
38
|
+
label: '~backend'
|
39
|
+
)
|
40
|
+
].freeze
|
41
|
+
|
10
42
|
TRANSIENT_ROOT_CAUSE_TO_TRACE_MAP =
|
11
43
|
{
|
12
44
|
failed_to_pull_image: ['job failed: failed to pull image'],
|
@@ -35,13 +67,16 @@ module GitlabQuality
|
|
35
67
|
'segmentation fault',
|
36
68
|
'no space left on device',
|
37
69
|
'Check free disk space',
|
38
|
-
'CLUSTERDOWN'
|
70
|
+
'CLUSTERDOWN',
|
71
|
+
'Redis client could not fetch cluster information: Connection refused'
|
39
72
|
],
|
40
73
|
flaky_test: [
|
41
74
|
"We have detected a PG::QueryCanceled error in the specs, so we're failing early"
|
42
75
|
]
|
43
76
|
}.freeze
|
44
77
|
|
78
|
+
AFTER_SCRIPT_TRACE_START_MARKER = 'Running after_script'
|
79
|
+
|
45
80
|
def initialize(project:, token:, job_id:)
|
46
81
|
@project = project
|
47
82
|
@token = token
|
@@ -49,8 +84,10 @@ module GitlabQuality
|
|
49
84
|
end
|
50
85
|
|
51
86
|
def found_infrastructure_error?
|
87
|
+
trace_to_search = failure_summary || main_trace
|
88
|
+
|
52
89
|
TRANSIENT_ROOT_CAUSE_TO_TRACE_MAP[:infrastructure].any? do |search_string|
|
53
|
-
found =
|
90
|
+
found = trace_to_search.downcase.include?(search_string.downcase)
|
54
91
|
|
55
92
|
puts "Found infrastructure error stacktrace: #{search_string}" if found
|
56
93
|
|
@@ -60,9 +97,35 @@ module GitlabQuality
|
|
60
97
|
|
61
98
|
private
|
62
99
|
|
100
|
+
def detected_failure_trace_definition
|
101
|
+
return @detected_failure_trace_definition if defined?(@detected_failure_trace_definition)
|
102
|
+
|
103
|
+
@detected_failure_trace_definition = FAILURE_TRACE_DEFINITIONS.find do |failure_trace_definition|
|
104
|
+
job_trace.include?(failure_trace_definition.trace_start) &&
|
105
|
+
job_trace.include?(failure_trace_definition.trace_end)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
63
109
|
def job_trace
|
64
110
|
@job_trace ||= GitlabClient::JobClient.new(project: project, token: token, job_id: job_id).job_trace
|
65
111
|
end
|
112
|
+
|
113
|
+
def main_trace
|
114
|
+
return job_trace unless job_trace.include?(AFTER_SCRIPT_TRACE_START_MARKER)
|
115
|
+
|
116
|
+
job_trace.split(AFTER_SCRIPT_TRACE_START_MARKER).first
|
117
|
+
end
|
118
|
+
|
119
|
+
def failure_summary
|
120
|
+
return unless detected_failure_trace_definition
|
121
|
+
|
122
|
+
@failure_summary ||= main_trace
|
123
|
+
.split(detected_failure_trace_definition.trace_start)
|
124
|
+
.last
|
125
|
+
.split(detected_failure_trace_definition.trace_end)
|
126
|
+
.first
|
127
|
+
.chomp
|
128
|
+
end
|
66
129
|
end
|
67
130
|
end
|
68
131
|
end
|
@@ -106,7 +106,7 @@ module GitlabQuality
|
|
106
106
|
begin
|
107
107
|
issue = find_issue_and_update_reports(test)
|
108
108
|
|
109
|
-
issue = create_issue(test) unless issue || test.quarantine?
|
109
|
+
issue = create_issue(test) unless issue || (test.quarantine? && !test.conditional_quarantine?)
|
110
110
|
|
111
111
|
issue
|
112
112
|
rescue MultipleIssuesFound => e
|
@@ -100,6 +100,12 @@ module GitlabQuality
|
|
100
100
|
!!quarantine
|
101
101
|
end
|
102
102
|
|
103
|
+
def conditional_quarantine?
|
104
|
+
return true if quarantine? && quarantine.is_a?(Hash) && quarantine.has_key?('only')
|
105
|
+
|
106
|
+
false
|
107
|
+
end
|
108
|
+
|
103
109
|
def file
|
104
110
|
@file ||= relative_file.start_with?('qa/') ? "qa/#{relative_file}" : relative_file
|
105
111
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitlab_quality-test_tooling
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GitLab Quality
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: climate_control
|