gitlab-qa 7.22.0 → 7.23.1
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/docs/what_tests_can_be_run.md +1 -0
- data/gitlab-qa.gemspec +1 -1
- data/lib/gitlab/qa/component/minio.rb +1 -1
- data/lib/gitlab/qa/report/generate_test_session.rb +13 -1
- data/lib/gitlab/qa/report/relate_failure_issue.rb +17 -12
- data/lib/gitlab/qa/runtime/env.rb +18 -0
- data/lib/gitlab/qa/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '099111f747da2553c13f0ad32cf6865a45324907cd8244bfb42ca15eec16108c'
|
4
|
+
data.tar.gz: 05b451d3a5217ae20a9a75aceac1d0b827771722011314055863944cbf6df829
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af14883ec9bbf29d306e3de0558f380de4703a1cc0d8a62f98f70297264d89344c30cb4143a2d8dfbed74c84fd346ed14594d8aa222a9aec6aa9e3edeb8e32ed
|
7
|
+
data.tar.gz: 35f8761799ba3ed8904d97f28b4a7da6255ceb57970c621b0f26e26e9e21ea7914ef8780bc79c911f6cbbc0e9645d68a6515335bca54f4f70e690c762af20286
|
@@ -82,6 +82,7 @@ All environment variables used by GitLab QA should be defined in [`lib/gitlab/qa
|
|
82
82
|
| `QA_INFLUXDB_URL` |- | Influxdb url for test metrics reporting | No|
|
83
83
|
| `QA_INFLUXDB_TOKEN` |- | Influxdb token for test metrics reporting | No|
|
84
84
|
| `QA_RUN_TYPE` |- | QA run type like `staging-full`, `canary`, `production` etc. Used in test metrics reporting | No|
|
85
|
+
| `QA_VALIDATE_RESOURCE_REUSE` | `false` | Set to `true` to [validate resource reuse](https://docs.gitlab.com/ee/development/testing_guide/end_to_end/resources.html#reusable-resources) after a test suite | No |
|
85
86
|
| `GITHUB_USERNAME` |- | Username for authenticating with GitHub. | No|
|
86
87
|
| `GITHUB_PASSWORD` |- | Password for authenticating with GitHub. | No|
|
87
88
|
| `GITLAB_QA_LOOP_RUNNER_MINUTES` | `1` | Minutes to run and repeat a spec while using the '--loop' option; default value is 1 minute. | No|
|
data/gitlab-qa.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
21
|
spec.require_paths = ['lib']
|
22
22
|
|
23
|
-
spec.add_development_dependency 'climate_control', '~> 0.
|
23
|
+
spec.add_development_dependency 'climate_control', '~> 1.0.1'
|
24
24
|
spec.add_development_dependency 'gitlab-styles', '~> 6.2.1'
|
25
25
|
spec.add_development_dependency 'pry', '~> 0.11'
|
26
26
|
spec.add_development_dependency 'rake', '~> 13.0'
|
@@ -9,7 +9,7 @@ module Gitlab
|
|
9
9
|
module Component
|
10
10
|
class Minio < Base
|
11
11
|
DOCKER_IMAGE = 'minio/minio'.freeze
|
12
|
-
DOCKER_IMAGE_TAG = '
|
12
|
+
DOCKER_IMAGE_TAG = 'latest'.freeze
|
13
13
|
# These are secrets used in a local Minio container, they're not used for any online S3 server.
|
14
14
|
AWS_ACCESS_KEY = 'AKIAIOSFODNN7EXAMPLE'.freeze
|
15
15
|
AWS_SECRET_KEY = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'.freeze
|
@@ -25,7 +25,7 @@ module Gitlab
|
|
25
25
|
end
|
26
26
|
|
27
27
|
issue = gitlab.create_issue(
|
28
|
-
title: "#{Time.now.strftime('%Y-%m-%d')} Test session report | #{
|
28
|
+
title: "#{Time.now.strftime('%Y-%m-%d')} Test session report | #{Runtime::Env.qa_run_type}",
|
29
29
|
description: generate_description(tests),
|
30
30
|
labels: ['Quality', 'QA', 'triage report', pipeline_name_label]
|
31
31
|
)
|
@@ -55,6 +55,8 @@ module Gitlab
|
|
55
55
|
#{generate_stages_listing(tests)}
|
56
56
|
|
57
57
|
#{generate_qa_issue_relation}
|
58
|
+
|
59
|
+
#{generate_link_to_dashboard}
|
58
60
|
MARKDOWN
|
59
61
|
end
|
60
62
|
|
@@ -257,6 +259,16 @@ module Gitlab
|
|
257
259
|
/relate #{Runtime::Env.qa_issue_url}
|
258
260
|
MARKDOWN
|
259
261
|
end
|
262
|
+
|
263
|
+
def generate_link_to_dashboard
|
264
|
+
return unless Runtime::Env.qa_run_type
|
265
|
+
|
266
|
+
<<~MARKDOWN.chomp
|
267
|
+
## Link to Grafana dashboard for run-type of #{Runtime::Env.qa_run_type}
|
268
|
+
|
269
|
+
* https://dashboards.quality.gitlab.net/d/kuNYMgDnz/test-run-metrics?orgId=1&refresh=1m&var-run_type=#{Runtime::Env.qa_run_type}
|
270
|
+
MARKDOWN
|
271
|
+
end
|
260
272
|
end
|
261
273
|
end
|
262
274
|
end
|
@@ -12,7 +12,7 @@ module Gitlab
|
|
12
12
|
DEFAULT_MAX_DIFF_RATIO_FOR_DETECTION = 0.15
|
13
13
|
FAILURE_STACKTRACE_REGEX = %r{((.*Failure\/Error:(?<stacktrace>.+))|(?<stacktrace>.+))}m.freeze
|
14
14
|
ISSUE_STACKTRACE_REGEX = /### Stack trace\s*(```)#{FAILURE_STACKTRACE_REGEX}(```)/m.freeze
|
15
|
-
NEW_ISSUE_LABELS = Set.new(%w[QA Quality test failure::
|
15
|
+
NEW_ISSUE_LABELS = Set.new(%w[QA Quality test failure::new priority::2]).freeze
|
16
16
|
|
17
17
|
MultipleIssuesFound = Class.new(StandardError)
|
18
18
|
|
@@ -35,41 +35,44 @@ module Gitlab
|
|
35
35
|
test_results.each do |test|
|
36
36
|
next if test.failures.empty?
|
37
37
|
|
38
|
-
|
38
|
+
relate_failure_to_issue(test)
|
39
39
|
end
|
40
40
|
|
41
41
|
test_results.write
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
def
|
45
|
+
def relate_failure_to_issue(test)
|
46
46
|
puts " => Searching issues for test '#{test.name}'..."
|
47
47
|
|
48
48
|
begin
|
49
|
-
issue =
|
49
|
+
issue = find_and_link_issue(test) || create_issue(test)
|
50
50
|
return unless issue
|
51
51
|
|
52
52
|
update_labels(issue, test)
|
53
|
-
post_failed_job_note(issue, test)
|
54
|
-
puts " => Marked #{issue.web_url} as related to #{test.testcase}."
|
55
53
|
rescue MultipleIssuesFound => e
|
56
54
|
warn(e.message)
|
57
55
|
end
|
58
56
|
end
|
59
57
|
|
60
|
-
def
|
58
|
+
def find_and_link_issue(test)
|
61
59
|
issue, diff_ratio = find_failure_issue(test)
|
62
60
|
|
63
61
|
if issue
|
64
62
|
puts " => Found issue #{issue.web_url} for test '#{test.name}' with a diff ratio of #{(diff_ratio * 100).round(2)}%."
|
65
|
-
|
66
|
-
issue = create_issue(test)
|
67
|
-
puts "for test '#{test.name}'."
|
63
|
+
post_failed_job_note(issue, test)
|
68
64
|
end
|
69
65
|
|
70
66
|
issue
|
71
67
|
end
|
72
68
|
|
69
|
+
def create_issue(test)
|
70
|
+
issue = super
|
71
|
+
puts "for test '#{test.name}'."
|
72
|
+
|
73
|
+
issue
|
74
|
+
end
|
75
|
+
|
73
76
|
def failure_issues(test)
|
74
77
|
gitlab.find_issues(options: { state: 'opened', labels: 'QA' }).select do |issue|
|
75
78
|
issue_title = issue.title.strip
|
@@ -146,7 +149,8 @@ module Gitlab
|
|
146
149
|
super + [
|
147
150
|
"\n\n### Stack trace",
|
148
151
|
"```\n#{test.failures.first['message_lines'].join("\n")}\n```",
|
149
|
-
"First happened in #{test.ci_job_url}."
|
152
|
+
"First happened in #{test.ci_job_url}.",
|
153
|
+
"Related test case: #{test.testcase}."
|
150
154
|
].join("\n\n")
|
151
155
|
end
|
152
156
|
|
@@ -159,7 +163,8 @@ module Gitlab
|
|
159
163
|
end
|
160
164
|
|
161
165
|
def post_failed_job_note(issue, test)
|
162
|
-
gitlab.create_issue_note(iid: issue.iid, note: "
|
166
|
+
gitlab.create_issue_note(iid: issue.iid, note: "Failure occurred in #{pipeline} pipeline: #{test.ci_job_url}")
|
167
|
+
puts " => Linked #{test.ci_job_url} to #{issue.web_url}."
|
163
168
|
end
|
164
169
|
|
165
170
|
def new_issue_title(test)
|
@@ -42,6 +42,7 @@ module Gitlab
|
|
42
42
|
'QA_INFLUXDB_TOKEN' => :qa_influxdb_token,
|
43
43
|
'QA_RUN_TYPE' => :qa_run_type,
|
44
44
|
'QA_SKIP_PULL' => :qa_skip_pull,
|
45
|
+
'QA_VALIDATE_RESOURCE_REUSE' => :qa_validate_resource_reuse,
|
45
46
|
'GITLAB_API_BASE' => :api_base,
|
46
47
|
'GITLAB_ADMIN_USERNAME' => :admin_username,
|
47
48
|
'GITLAB_ADMIN_PASSWORD' => :admin_password,
|
@@ -306,6 +307,23 @@ module Gitlab
|
|
306
307
|
enabled?(env_var_value_if_defined('QA_EXPORT_TEST_METRICS'), default: true)
|
307
308
|
end
|
308
309
|
|
310
|
+
def qa_run_type
|
311
|
+
return env_var_value_if_defined('QA_RUN_TYPE') if env_var_value_valid?('QA_RUN_TYPE')
|
312
|
+
|
313
|
+
live_envs = %w[staging staging-canary staging-ref canary preprod production]
|
314
|
+
return unless live_envs.include?(ci_project_name)
|
315
|
+
|
316
|
+
test_subset = if env_var_value_if_defined('NO_ADMIN') == 'true'
|
317
|
+
'sanity-no-admin'
|
318
|
+
elsif env_var_value_if_defined('SMOKE_ONLY') == 'true'
|
319
|
+
'sanity'
|
320
|
+
else
|
321
|
+
'full'
|
322
|
+
end
|
323
|
+
|
324
|
+
"#{ci_project_name}-#{test_subset}"
|
325
|
+
end
|
326
|
+
|
309
327
|
private
|
310
328
|
|
311
329
|
def enabled?(value, default: true)
|
data/lib/gitlab/qa/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitlab-qa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.
|
4
|
+
version: 7.23.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GitLab Quality
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-02-
|
11
|
+
date: 2022-02-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: climate_control
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.0.1
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.0.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: gitlab-styles
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|