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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2b398cef45fa101592e0abecf4d014969e4e26dac5b5e3fd9f7f774b6108618f
4
- data.tar.gz: 96a6b402d7dfcccf9fe2e69e01a4ece8af13d56be0213dc8ffa3824ea9a5ed2a
3
+ metadata.gz: b5791162eb6afd6c20228dc94f5c247233a1f9703743fb671df15f0cef3258c2
4
+ data.tar.gz: 2629b72f72f18669b362b7f904bce44a4abc63b8fa421a4dbb515c1dd17ee8cb
5
5
  SHA512:
6
- metadata.gz: 9d94573de9142a648b643819381244382a65fedd7c180ae5b78013ea2738204e54e543e43ed5ad6209c2a3ae5a3af4cd1ecb2a7937afa5607b3c04435ce5a2a2
7
- data.tar.gz: 48e010a476d8b1a2b48b3b74ba485e7a9c533aa17f96e4639eead23e486f2a309a8f60fed3c282a9b85ec38154cc2bb0b26fdbf28d3389981d1bf26578336b87
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 `6a9c4fcc150741d578ec75141d3706891b6694bc` 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...6a9c4fcc150741d578ec75141d3706891b6694bc
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.9.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.4.2)
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.1)
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.12.0)
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.22.1)
68
- parser (3.2.1.0)
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.4.2)
81
+ rack (3.0.7)
79
82
  rainbow (3.1.1)
80
83
  rake (13.0.6)
81
- regexp_parser (2.7.0)
84
+ regexp_parser (2.8.0)
82
85
  rexml (3.2.5)
83
- rouge (3.30.0)
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.27.0)
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.0)
126
+ ruby_parser (3.20.1)
124
127
  sexp_processor (~> 4.16)
125
- sexp_processor (4.16.1)
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.1)
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.1)
153
+ tty-markdown (0.7.2)
151
154
  kramdown (>= 1.16.2, < 3.0)
152
155
  pastel (~> 0.8)
153
- rouge (~> 3.14)
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.7
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
+
@@ -160,15 +160,24 @@ module Dri
160
160
 
161
161
  # Fetch all new failures
162
162
  #
163
- # @param [String] date
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(date:, state:)
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(project_id: project_id, date: date, state: state)
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] date
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:, date:, state:)
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: "updated_at",
197
+ order_by: "created_at",
198
+ sort: 'desc',
188
199
  state: state,
189
200
  scope: "all",
190
- created_after: date,
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
@@ -16,6 +16,10 @@ module Dri
16
16
 
17
17
  def_delegators :command, :run
18
18
 
19
+ def initialize(*options)
20
+ @options = options
21
+ end
22
+
19
23
  def pastel(**options)
20
24
  Pastel.new(**options)
21
25
  end
@@ -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
- @today_iso_format = Time.now.strftime('%Y-%m-%dT00:00:00Z')
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 = [title, triaged, environment, author, url]
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
- logger.info "Fetching today's failures..."
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(date: @today_iso_format, state: 'opened')
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 'Life is great, there are no new failures today!'
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
- if @options[:urgent]
76
- sorted_failures << [title, triaged, envs.first, author, url] if urgent
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[SORT_BY_OPTIONS[@options[:sort_by]&.to_sym || :environment]] }
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
- print_table(labels, sorted_failures, alignments: [:left, :center, :center, :left])
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
@@ -14,7 +14,6 @@ module Dri
14
14
  main
15
15
  canary
16
16
  master
17
- nightly
18
17
  production
19
18
  staging-canary
20
19
  staging-ref
@@ -45,13 +45,20 @@ module Dri
45
45
  end
46
46
  end
47
47
 
48
- desc 'failures', 'Display failures opened today'
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']
@@ -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: 30,
26
+ width: width,
25
27
  height: 10,
26
- align: :center,
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}\n #{add_color('Token:', :bright_cyan)} #{token}
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',
@@ -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: 3
82
+ search_hours_ago: 24
89
83
  }
90
84
  }.freeze
91
85
  end
data/lib/dri/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dri
4
- VERSION = "0.9.0"
4
+ VERSION = "0.10.0"
5
5
  end
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.9.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-03-08 00:00:00.000000000 Z
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