dri 0.9.0 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitlab/merge_request_templates/Release.md +2 -2
- data/Gemfile.lock +19 -16
- data/README.md +15 -0
- data/dri.gemspec +1 -0
- data/faq.yaml +21 -0
- data/lib/dri/api_client.rb +19 -7
- data/lib/dri/cli.rb +17 -0
- data/lib/dri/command.rb +4 -0
- data/lib/dri/commands/faq.rb +33 -0
- data/lib/dri/commands/fetch/failures.rb +35 -21
- data/lib/dri/commands/fetch/pipelines.rb +0 -3
- data/lib/dri/commands/fetch/testcases.rb +0 -1
- data/lib/dri/commands/fetch.rb +8 -1
- data/lib/dri/commands/profile.rb +8 -3
- data/lib/dri/report.rb +0 -1
- data/lib/dri/utils/constants.rb +1 -7
- data/lib/dri/version.rb +1 -1
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5791162eb6afd6c20228dc94f5c247233a1f9703743fb671df15f0cef3258c2
|
4
|
+
data.tar.gz: 2629b72f72f18669b362b7f904bce44a4abc63b8fa421a4dbb515c1dd17ee8cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ffc4003b8ea2cc342c88a3f457f3ea9701f9dfe0e7ca0ff7a5f54e2ec1a8ccc896dea9e16bb4ea1655d3e9d1eadadaa0ef2d01652ffb4740fb94fcc01690397
|
7
|
+
data.tar.gz: f302fd36aa8cc2385e6c83e6de915481b3515097be2d5e7137ea63af3ef70e7462ad2a4f64a575777cd734b1320699b01c4efd99fd60941d59b0b8b65a4b005a
|
@@ -1,6 +1,6 @@
|
|
1
1
|
## Diff
|
2
|
-
<!-- Replace `v0.9.0` with the previous DRI release, and `
|
3
|
-
https://gitlab.com/gitlab-org/quality/dri/-/compare/v0.9.0...
|
2
|
+
<!-- Replace `v0.9.0` with the previous DRI release, and `55ddcace1c166fa2323d4e556262eba6b274230a` with the latest commit from https://gitlab.com/gitlab-org/quality/dri/-/commits/master that will be included in the release -->
|
3
|
+
https://gitlab.com/gitlab-org/quality/dri/-/compare/v0.9.0...55ddcace1c166fa2323d4e556262eba6b274230a
|
4
4
|
|
5
5
|
## Release Notes
|
6
6
|
|
data/Gemfile.lock
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
dri (0.
|
4
|
+
dri (0.10.0)
|
5
5
|
amatch (~> 0.4.1)
|
6
6
|
gitlab (~> 4.19)
|
7
7
|
httparty (~> 0.21.0)
|
8
8
|
json (~> 2.6.1)
|
9
|
+
launchy (~> 2.4)
|
9
10
|
markdown-tables (~> 1.1.1)
|
10
11
|
pastel (~> 0.8.0)
|
11
12
|
thor (~> 1.2.0)
|
@@ -22,12 +23,12 @@ PATH
|
|
22
23
|
GEM
|
23
24
|
remote: https://rubygems.org/
|
24
25
|
specs:
|
25
|
-
activesupport (7.0.
|
26
|
+
activesupport (7.0.5)
|
26
27
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
27
28
|
i18n (>= 1.6, < 2)
|
28
29
|
minitest (>= 5.1)
|
29
30
|
tzinfo (~> 2.0)
|
30
|
-
addressable (2.8.
|
31
|
+
addressable (2.8.4)
|
31
32
|
public_suffix (>= 2.0.2, < 6.0)
|
32
33
|
amatch (0.4.1)
|
33
34
|
mize
|
@@ -52,11 +53,13 @@ GEM
|
|
52
53
|
httparty (0.21.0)
|
53
54
|
mini_mime (>= 1.0.0)
|
54
55
|
multi_xml (>= 0.5.2)
|
55
|
-
i18n (1.
|
56
|
+
i18n (1.13.0)
|
56
57
|
concurrent-ruby (~> 1.0)
|
57
58
|
json (2.6.3)
|
58
59
|
kramdown (2.4.0)
|
59
60
|
rexml
|
61
|
+
launchy (2.5.2)
|
62
|
+
addressable (~> 2.8)
|
60
63
|
markdown-tables (1.1.1)
|
61
64
|
method_source (1.0.0)
|
62
65
|
mini_mime (1.1.2)
|
@@ -64,8 +67,8 @@ GEM
|
|
64
67
|
mize (0.4.1)
|
65
68
|
protocol (~> 2.0)
|
66
69
|
multi_xml (0.6.0)
|
67
|
-
parallel (1.
|
68
|
-
parser (3.2.1
|
70
|
+
parallel (1.23.0)
|
71
|
+
parser (3.2.2.1)
|
69
72
|
ast (~> 2.4.1)
|
70
73
|
pastel (0.8.0)
|
71
74
|
tty-color (~> 0.5)
|
@@ -75,12 +78,12 @@ GEM
|
|
75
78
|
coderay (~> 1.1)
|
76
79
|
method_source (~> 1.0)
|
77
80
|
public_suffix (5.0.1)
|
78
|
-
rack (3.0.
|
81
|
+
rack (3.0.7)
|
79
82
|
rainbow (3.1.1)
|
80
83
|
rake (13.0.6)
|
81
|
-
regexp_parser (2.
|
84
|
+
regexp_parser (2.8.0)
|
82
85
|
rexml (3.2.5)
|
83
|
-
rouge (
|
86
|
+
rouge (4.1.1)
|
84
87
|
rspec (3.10.0)
|
85
88
|
rspec-core (~> 3.10.0)
|
86
89
|
rspec-expectations (~> 3.10.0)
|
@@ -103,7 +106,7 @@ GEM
|
|
103
106
|
rubocop-ast (>= 0.6.0)
|
104
107
|
ruby-progressbar (~> 1.7)
|
105
108
|
unicode-display_width (>= 1.4.0, < 2.0)
|
106
|
-
rubocop-ast (1.
|
109
|
+
rubocop-ast (1.28.1)
|
107
110
|
parser (>= 3.2.1.0)
|
108
111
|
rubocop-gitlab-security (0.1.1)
|
109
112
|
rubocop (>= 0.51)
|
@@ -120,9 +123,9 @@ GEM
|
|
120
123
|
rubocop (~> 0.87)
|
121
124
|
rubocop-ast (>= 0.7.1)
|
122
125
|
ruby-progressbar (1.13.0)
|
123
|
-
ruby_parser (3.20.
|
126
|
+
ruby_parser (3.20.1)
|
124
127
|
sexp_processor (~> 4.16)
|
125
|
-
sexp_processor (4.
|
128
|
+
sexp_processor (4.17.0)
|
126
129
|
strings (0.2.1)
|
127
130
|
strings-ansi (~> 0.2)
|
128
131
|
unicode-display_width (>= 1.5, < 3.0)
|
@@ -131,7 +134,7 @@ GEM
|
|
131
134
|
sync (0.5.0)
|
132
135
|
terminal-table (3.0.2)
|
133
136
|
unicode-display_width (>= 1.1.1, < 3)
|
134
|
-
thor (1.2.
|
137
|
+
thor (1.2.2)
|
135
138
|
timecop (0.9.6)
|
136
139
|
tins (1.32.1)
|
137
140
|
sync
|
@@ -147,10 +150,10 @@ GEM
|
|
147
150
|
tty-font (0.5.0)
|
148
151
|
tty-logger (0.6.0)
|
149
152
|
pastel (~> 0.8)
|
150
|
-
tty-markdown (0.7.
|
153
|
+
tty-markdown (0.7.2)
|
151
154
|
kramdown (>= 1.16.2, < 3.0)
|
152
155
|
pastel (~> 0.8)
|
153
|
-
rouge (
|
156
|
+
rouge (>= 3.14, < 5.0)
|
154
157
|
strings (~> 0.2.0)
|
155
158
|
tty-color (~> 0.5)
|
156
159
|
tty-screen (~> 0.8)
|
@@ -191,4 +194,4 @@ DEPENDENCIES
|
|
191
194
|
webmock (~> 3.5)
|
192
195
|
|
193
196
|
BUNDLED WITH
|
194
|
-
2.4.
|
197
|
+
2.4.13
|
data/README.md
CHANGED
@@ -70,6 +70,7 @@ $ dri profile
|
|
70
70
|
- [7. analyze](#7-analyze)
|
71
71
|
- stacktraces
|
72
72
|
- [8. version](#8-version)
|
73
|
+
- [9. faq](#8-faq)
|
73
74
|
|
74
75
|
#### 1. init
|
75
76
|
|
@@ -97,6 +98,11 @@ $ dri fetch failures
|
|
97
98
|
Fetches today's opened failures and lists them according to their triage status.
|
98
99
|
Helpful to understand if there are missing recent failures to be reviewed.
|
99
100
|
|
101
|
+
There is the possibility to customise the timeframe for such failures by passing a
|
102
|
+
`--start_date=DD-MM-YYYY` and `--end_date=DD-MM-YYYY`. It is also possible to pass
|
103
|
+
a `--cutoff=HH:MM` to just show failures after a certain period of the day. The cutoff
|
104
|
+
time will be converted to UTC.
|
105
|
+
|
100
106
|
To surface most urgent issues pass the `--urgent` flag to see issues that are both
|
101
107
|
in `canary` and `staging-canary` pipelines just during today's timespan.
|
102
108
|
|
@@ -228,6 +234,15 @@ $ dri version
|
|
228
234
|
|
229
235
|
`dri` gem version.
|
230
236
|
|
237
|
+
#### 9. faq
|
238
|
+
|
239
|
+
```shell
|
240
|
+
$ dri faq
|
241
|
+
```
|
242
|
+
|
243
|
+
Returns a list of questions and answers related to on-call operations. This leverages
|
244
|
+
existing pages of documentation, redirecting directly to the relevant section to help
|
245
|
+
with a problem.
|
231
246
|
## Copyright
|
232
247
|
|
233
248
|
Copyright (c) 2022 GitLab, Inc. See [MIT License](LICENSE.txt) for further details.
|
data/dri.gemspec
CHANGED
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_dependency "gitlab", "~> 4.19"
|
27
27
|
spec.add_dependency 'httparty', '~> 0.21.0'
|
28
28
|
spec.add_dependency 'json', '~> 2.6.1'
|
29
|
+
spec.add_dependency 'launchy', '~> 2.4'
|
29
30
|
spec.add_dependency 'markdown-tables', '~> 1.1.1'
|
30
31
|
spec.add_dependency 'pastel', '~> 0.8.0'
|
31
32
|
spec.add_dependency 'thor', '~> 1.2.0'
|
data/faq.yaml
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
---
|
2
|
+
- question: "Which pipelines we currently have and what is their running cadence?"
|
3
|
+
link: "https://about.gitlab.com/handbook/engineering/quality/quality-engineering/debugging-qa-test-failures/#qa-test-pipelines"
|
4
|
+
- question: "Where can I find the rotation schedule?"
|
5
|
+
link: "https://gitlab.com/gitlab-org/quality/pipeline-triage#dri-weekly-rotation-schedule"
|
6
|
+
- question: "What is the process to quarantine a test?"
|
7
|
+
link: "https://about.gitlab.com/handbook/engineering/quality/quality-engineering/debugging-qa-test-failures/#quarantining-tests"
|
8
|
+
- question: "What is the process to dequarantine a test?"
|
9
|
+
link: "https://about.gitlab.com/handbook/engineering/quality/quality-engineering/debugging-qa-test-failures/#dequarantining-tests"
|
10
|
+
- question: "What are the failure classification labels?"
|
11
|
+
link: "https://about.gitlab.com/handbook/engineering/quality/quality-engineering/debugging-qa-test-failures/#classify-and-triage-the-test-failure"
|
12
|
+
- question: "I have a correlation ID. How to find logs from various GitLab components?"
|
13
|
+
link: "https://about.gitlab.com/handbook/engineering/quality/quality-engineering/debugging-qa-test-failures/#kibana-correlation-dashboards"
|
14
|
+
- question: "Where do I find the MR that introduced a feature flag?"
|
15
|
+
link: "https://samdbeckham.gitlab.io/feature-flags/#%5B%7B%22type%22:%22filtered-search-term%22,%22value%22:%7B%22data%22:%22%22%7D%7D%5D"
|
16
|
+
- question: "What to do when a failure needs escalation?"
|
17
|
+
link: "https://about.gitlab.com/handbook/engineering/quality/quality-engineering/debugging-qa-test-failures/#failure-needs-escalation"
|
18
|
+
- question: "I have an MR to fix the failure. How I make sure it is merged as soon as possible?"
|
19
|
+
link: "https://about.gitlab.com/handbook/engineering/quality/quality-engineering/debugging-qa-test-failures/#fixing-the-test"
|
20
|
+
|
21
|
+
|
data/lib/dri/api_client.rb
CHANGED
@@ -160,15 +160,24 @@ module Dri
|
|
160
160
|
|
161
161
|
# Fetch all new failures
|
162
162
|
#
|
163
|
-
# @param [String]
|
163
|
+
# @param [String] start_date
|
164
|
+
# @param [String] end_date
|
164
165
|
# @param [String] state
|
165
166
|
# @return [Array<Gitlab::ObjectifiedHash>]
|
166
|
-
def fetch_all_new_failures(
|
167
|
+
def fetch_all_new_failures(start_date:, end_date:, state:)
|
167
168
|
project_ids = [GITLAB_PROJECT_ID, CUSTOMERSDOT_PROJECT_ID]
|
168
169
|
failures = []
|
169
170
|
|
171
|
+
start_date_iso = start_date.strftime('%Y-%m-%dT00:00:00Z')
|
172
|
+
end_date_iso = end_date.strftime('%Y-%m-%dT23:59:59Z')
|
173
|
+
|
170
174
|
project_ids.each do |project_id|
|
171
|
-
failures += fetch_new_failures(
|
175
|
+
failures += fetch_new_failures(
|
176
|
+
project_id: project_id,
|
177
|
+
start_date: start_date_iso,
|
178
|
+
end_date: end_date_iso,
|
179
|
+
state: state
|
180
|
+
)
|
172
181
|
end
|
173
182
|
|
174
183
|
failures
|
@@ -177,17 +186,20 @@ module Dri
|
|
177
186
|
# Fetch new failures for a given project
|
178
187
|
#
|
179
188
|
# @param [Integer] project_id
|
180
|
-
# @param [String]
|
189
|
+
# @param [String] start_date
|
190
|
+
# @param [String] end_date
|
181
191
|
# @param [String] state
|
182
192
|
# @return [Array<Gitlab::ObjectifiedHash>]
|
183
|
-
def fetch_new_failures(project_id:,
|
193
|
+
def fetch_new_failures(project_id:, start_date:, end_date:, state:)
|
184
194
|
gitlab.issues(
|
185
195
|
project_id,
|
186
196
|
labels: FAILURE_NEW,
|
187
|
-
order_by: "
|
197
|
+
order_by: "created_at",
|
198
|
+
sort: 'desc',
|
188
199
|
state: state,
|
189
200
|
scope: "all",
|
190
|
-
created_after:
|
201
|
+
created_after: start_date,
|
202
|
+
created_before: end_date,
|
191
203
|
per_page: 100
|
192
204
|
)
|
193
205
|
end
|
data/lib/dri/cli.rb
CHANGED
@@ -77,6 +77,23 @@ module Dri
|
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
|
+
desc 'faq', 'Consult frequently ask questions while on-call'
|
81
|
+
method_option :help, aliases: '-h', type: :boolean,
|
82
|
+
desc: 'Display usage information'
|
83
|
+
|
84
|
+
def faq(*)
|
85
|
+
if options[:help]
|
86
|
+
invoke :help, ['faq']
|
87
|
+
else
|
88
|
+
begin
|
89
|
+
require_relative 'commands/faq'
|
90
|
+
Dri::Commands::FAQ.new(options).execute
|
91
|
+
rescue Dri::Commands::FAQ::ExitCommand
|
92
|
+
puts "Exiting faq command..."
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
80
97
|
require_relative 'commands/fetch'
|
81
98
|
register Dri::Commands::Fetch, 'fetch', 'fetch [SUBCOMMAND]', 'Fetch failures & testcases'
|
82
99
|
|
data/lib/dri/command.rb
CHANGED
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../command'
|
4
|
+
require 'tty-prompt'
|
5
|
+
require 'launchy'
|
6
|
+
|
7
|
+
module Dri
|
8
|
+
module Commands
|
9
|
+
class FAQ < Dri::Command
|
10
|
+
ExitCommand = Class.new(StandardError)
|
11
|
+
|
12
|
+
def execute(input: $stdin, output: $stdout)
|
13
|
+
root_dir = File.expand_path('../../..', __dir__)
|
14
|
+
faq_file = File.join(root_dir, 'faq.yaml')
|
15
|
+
faq_data = YAML.load_file(faq_file)
|
16
|
+
|
17
|
+
prompt = TTY::Prompt.new
|
18
|
+
|
19
|
+
choices = faq_data.map { |entry| { name: entry['question'], value: entry['link'] } }
|
20
|
+
|
21
|
+
url = prompt.select("Select a question:", choices)
|
22
|
+
raise ExitCommand if url.nil? || url.strip.empty?
|
23
|
+
|
24
|
+
begin
|
25
|
+
Launchy.open(url)
|
26
|
+
rescue Launchy::Error => e
|
27
|
+
puts "Failed to open URL: #{e.message}"
|
28
|
+
raise ExitCommand
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -12,17 +12,11 @@ module Dri
|
|
12
12
|
include Dri::Utils::Constants::Triage::Labels
|
13
13
|
using Refinements
|
14
14
|
|
15
|
-
SORT_BY_OPTIONS = {
|
16
|
-
title: 0,
|
17
|
-
triaged: 1,
|
18
|
-
environment: 2,
|
19
|
-
author: 3,
|
20
|
-
url: 4
|
21
|
-
}.freeze
|
22
|
-
|
23
15
|
def initialize(options)
|
24
16
|
@options = options
|
25
|
-
@
|
17
|
+
@start_date = @options[:start_date] ? Date.parse(@options[:start_date]) : Date.today
|
18
|
+
@end_date = @options[:end_date] ? Date.parse(@options[:end_date]) : Date.today
|
19
|
+
@cutoff_time = @options[:cutoff] ? Time.parse(options[:cutoff]).utc : nil
|
26
20
|
end
|
27
21
|
|
28
22
|
def execute(input: $stdin, output: $stdout) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength
|
@@ -35,26 +29,40 @@ module Dri
|
|
35
29
|
environment = add_color('Environment', :bright_yellow)
|
36
30
|
author = add_color('Author', :bright_yellow)
|
37
31
|
url = add_color('URL', :bright_yellow)
|
32
|
+
updated_at = add_color('Updated at', :bright_yellow)
|
38
33
|
|
39
34
|
sorted_failures = []
|
40
|
-
labels =
|
35
|
+
labels = { title: title, triaged: triaged, environment: environment, author: author, url: url,
|
36
|
+
updated_at: updated_at }
|
41
37
|
triaged_counter = 0
|
42
38
|
|
43
|
-
|
39
|
+
if @cutoff_time
|
40
|
+
@start_date = Time.new(
|
41
|
+
@start_date.year,
|
42
|
+
@start_date.month,
|
43
|
+
@start_date.day,
|
44
|
+
@cutoff_time.hour,
|
45
|
+
@cutoff_time.min, 0,
|
46
|
+
"+00:00"
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
logger.info "Fetching failures from #{@start_date} (UTC) to #{@end_date} (UTC)..."
|
44
51
|
|
45
52
|
spinner.run do # rubocop:disable Metrics/BlockLength
|
46
|
-
failures = api_client.fetch_all_new_failures(
|
53
|
+
failures = api_client.fetch_all_new_failures(start_date: @start_date, end_date: @end_date, state: 'opened')
|
47
54
|
|
48
55
|
if failures.empty?
|
49
|
-
logger.info
|
56
|
+
logger.info "Life is great, there are no new failures between #{@start_date} and #{@end_date}!"
|
50
57
|
exit 0
|
51
58
|
end
|
52
59
|
|
53
60
|
failures.each do |failure|
|
54
61
|
project_id = failure.project_id
|
55
62
|
title = failure.title.truncate(60)
|
56
|
-
author = failure.to_h.dig('author', 'username')
|
63
|
+
author = failure.to_h.dig('author', 'username').truncate(25)
|
57
64
|
url = failure.web_url
|
65
|
+
updated_at = failure.updated_at
|
58
66
|
triaged = add_color('x', :red)
|
59
67
|
envs = failure.labels.select { |l| l.include?(FOUND) }.map do |l|
|
60
68
|
env = l.split(':').last.gsub('.gitlab.com', '')
|
@@ -63,6 +71,8 @@ module Dri
|
|
63
71
|
end
|
64
72
|
urgent = urgent_environments.all? { |env| envs.include?(env) }
|
65
73
|
|
74
|
+
next if @options[:urgent] && !urgent
|
75
|
+
|
66
76
|
emoji_awards = api_client.fetch_awarded_emojis(failure.iid, project_id: project_id).find do |e|
|
67
77
|
e.name == emoji && e.to_h.dig('user', 'username') == username
|
68
78
|
end
|
@@ -72,14 +82,11 @@ module Dri
|
|
72
82
|
triaged_counter += 1
|
73
83
|
end
|
74
84
|
|
75
|
-
|
76
|
-
|
77
|
-
else
|
78
|
-
sorted_failures << [title, triaged, envs.first, author, url]
|
79
|
-
end
|
85
|
+
sorted_failures << { title: title, triaged: triaged, environment: envs.first, author: author, url: url,
|
86
|
+
updated_at: updated_at }
|
80
87
|
end
|
81
88
|
|
82
|
-
sorted_failures.sort_by! { |failure| failure[
|
89
|
+
sorted_failures.sort_by! { |failure| failure[@options[:sort_by]&.to_sym || :environment] }
|
83
90
|
end
|
84
91
|
|
85
92
|
msg = if @options[:urgent]
|
@@ -92,7 +99,14 @@ module Dri
|
|
92
99
|
MSG
|
93
100
|
end
|
94
101
|
|
95
|
-
|
102
|
+
terminal_width = TTY::Screen.width
|
103
|
+
|
104
|
+
if terminal_width <= 210 # adjust the desired minimum width
|
105
|
+
labels.delete(:updated_at)
|
106
|
+
sorted_failures.map { |failure| failure.delete(:updated_at) }
|
107
|
+
end
|
108
|
+
|
109
|
+
print_table(labels.values, sorted_failures.map(&:values), alignments: [:left, :center, :center, :left, :left])
|
96
110
|
output.puts(msg)
|
97
111
|
end
|
98
112
|
end
|
@@ -120,7 +120,6 @@ module Dri
|
|
120
120
|
tests_exceed_threshold?(project_id: project_id, pipeline_id: pipeline_id, ops: ops)
|
121
121
|
else
|
122
122
|
contains_stage?(jobs, "qa") || contains_stage?(jobs, "test")
|
123
|
-
# Nightly pipeline does not execute full E2E suite if sanity fails so can't check tests count
|
124
123
|
end
|
125
124
|
end
|
126
125
|
|
@@ -161,8 +160,6 @@ module Dri
|
|
161
160
|
case pipeline_name
|
162
161
|
when "master"
|
163
162
|
"e2e-package-and-test"
|
164
|
-
when "nightly"
|
165
|
-
pipeline_name
|
166
163
|
when "pre_prod"
|
167
164
|
"preprod-#{run_type(sanity)}"
|
168
165
|
else
|
data/lib/dri/commands/fetch.rb
CHANGED
@@ -45,13 +45,20 @@ module Dri
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
-
desc 'failures', 'Display failures opened
|
48
|
+
desc 'failures', 'Display failures opened on a given period.'
|
49
49
|
method_option :help, aliases: '-h', type: :boolean,
|
50
50
|
desc: 'Display usage information'
|
51
51
|
method_option :urgent, type: :boolean,
|
52
52
|
desc: 'Shows failures that quickly escalated'
|
53
53
|
method_option :sort_by, type: :string,
|
54
54
|
desc: 'Shows failures in specified order'
|
55
|
+
method_option :start_date, type: :string,
|
56
|
+
desc: 'Fetch failures created after this date (YYYY-MM-DD)'
|
57
|
+
method_option :end_date, type: :string,
|
58
|
+
desc: 'Fetch failures created before this date (YYYY-MM-DD)'
|
59
|
+
method_option :cutoff, type: :string,
|
60
|
+
desc: 'Fetch failures created after this time (HH:MM)'
|
61
|
+
|
55
62
|
def failures(*)
|
56
63
|
if options[:help]
|
57
64
|
invoke :help, ['failures']
|
data/lib/dri/commands/profile.rb
CHANGED
@@ -20,10 +20,12 @@ module Dri
|
|
20
20
|
logger.info "🔎 Looking for profiles...\n"
|
21
21
|
|
22
22
|
if config.exist?
|
23
|
+
width = handover_report_path.nil? ? 30 : 75
|
24
|
+
|
23
25
|
frame_args = {
|
24
|
-
width:
|
26
|
+
width: width,
|
25
27
|
height: 10,
|
26
|
-
align: :
|
28
|
+
align: :left,
|
27
29
|
padding: 1,
|
28
30
|
border: :thick,
|
29
31
|
title: { top_left: add_color('PROFILE:', :bright_cyan) }
|
@@ -37,10 +39,13 @@ module Dri
|
|
37
39
|
|
38
40
|
def pretty_print_profile
|
39
41
|
<<~PROFILE
|
40
|
-
#{add_color('User:', :bright_cyan)} #{username}
|
42
|
+
#{add_color('User:', :bright_cyan)} #{username}
|
43
|
+
#{add_color('Token:', :bright_cyan)} #{token}
|
41
44
|
#{add_color('OpsToken:', :bright_cyan)} #{ops_token}
|
42
45
|
#{add_color('Timezone:', :bright_cyan)} #{timezone}
|
43
46
|
#{add_color('Emoji:', :bright_cyan)} #{emoji}
|
47
|
+
#{add_color('Report Path:', :bright_cyan)} #{handover_report_path}
|
48
|
+
|
44
49
|
PROFILE
|
45
50
|
end
|
46
51
|
end
|
data/lib/dri/report.rb
CHANGED
@@ -83,7 +83,6 @@ module Dri
|
|
83
83
|
'canary.staging.gitlab.com' => '/quality/staging-canary',
|
84
84
|
'main' => '/gitlab-org/gitlab-qa-mirror',
|
85
85
|
'master' => '/gitlab-org/gitlab-qa-mirror',
|
86
|
-
'nightly' => '/quality/nightly',
|
87
86
|
'pre.gitlab.com' => '/quality/preprod',
|
88
87
|
'staging-ref' => '/quality/staging-ref',
|
89
88
|
'staging.gitlab.com' => '/quality/staging',
|
data/lib/dri/utils/constants.rb
CHANGED
@@ -63,12 +63,6 @@ module Dri
|
|
63
63
|
project_id: "547",
|
64
64
|
search_hours_ago: 12
|
65
65
|
},
|
66
|
-
nightly: {
|
67
|
-
name: "nightly",
|
68
|
-
url: "https://gitlab.com/gitlab-org/quality/nightly",
|
69
|
-
project_id: "7523614",
|
70
|
-
search_hours_ago: 24
|
71
|
-
},
|
72
66
|
pre_prod: {
|
73
67
|
name: "pre.gitlab.com",
|
74
68
|
url: "https://ops.gitlab.net/gitlab-org/quality/preprod",
|
@@ -85,7 +79,7 @@ module Dri
|
|
85
79
|
name: "master",
|
86
80
|
url: "https://gitlab.com/gitlab-org/gitlab",
|
87
81
|
project_id: "278964",
|
88
|
-
search_hours_ago:
|
82
|
+
search_hours_ago: 24
|
89
83
|
}
|
90
84
|
}.freeze
|
91
85
|
end
|
data/lib/dri/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dri
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.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: 2023-
|
11
|
+
date: 2023-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: amatch
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 2.6.1
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: launchy
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.4'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.4'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: markdown-tables
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -343,12 +357,14 @@ files:
|
|
343
357
|
- bin/setup
|
344
358
|
- dri.gemspec
|
345
359
|
- exe/dri
|
360
|
+
- faq.yaml
|
346
361
|
- lib/dri.rb
|
347
362
|
- lib/dri/api_client.rb
|
348
363
|
- lib/dri/cli.rb
|
349
364
|
- lib/dri/command.rb
|
350
365
|
- lib/dri/commands/analyze.rb
|
351
366
|
- lib/dri/commands/analyze/stack_traces.rb
|
367
|
+
- lib/dri/commands/faq.rb
|
352
368
|
- lib/dri/commands/fetch.rb
|
353
369
|
- lib/dri/commands/fetch/failures.rb
|
354
370
|
- lib/dri/commands/fetch/featureflags.rb
|