dri 0.10.2 → 1.1.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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab/changelog_config.yml +13 -0
  3. data/.gitlab/merge_request_templates/Default.md +27 -0
  4. data/.gitlab/merge_request_templates/Release.md +8 -23
  5. data/.gitlab-ci.yml +6 -4
  6. data/.rubocop.yml +9 -1
  7. data/.ruby-version +1 -1
  8. data/.tool-versions +1 -1
  9. data/CODE_OF_CONDUCT.md +74 -0
  10. data/Gemfile.lock +58 -32
  11. data/README.md +88 -113
  12. data/dri.gemspec +9 -4
  13. data/exe/dri +2 -1
  14. data/faq.yaml +7 -7
  15. data/lefthook.yml +24 -0
  16. data/lib/dri/api_client.rb +66 -25
  17. data/lib/dri/cli.rb +2 -11
  18. data/lib/dri/command.rb +21 -52
  19. data/lib/dri/commands/add/fast_quarantine.rb +72 -0
  20. data/lib/dri/commands/add.rb +45 -0
  21. data/lib/dri/commands/analyze/stack_traces.rb +1 -4
  22. data/lib/dri/commands/analyze.rb +0 -1
  23. data/lib/dri/commands/faq.rb +1 -2
  24. data/lib/dri/commands/fetch/failures.rb +102 -43
  25. data/lib/dri/commands/fetch/{featureflags.rb → feature_flags.rb} +1 -6
  26. data/lib/dri/commands/fetch/pipelines.rb +3 -7
  27. data/lib/dri/commands/fetch/runbooks.rb +1 -3
  28. data/lib/dri/commands/fetch/testcases.rb +1 -3
  29. data/lib/dri/commands/fetch/triaged.rb +2 -6
  30. data/lib/dri/commands/fetch.rb +0 -30
  31. data/lib/dri/commands/incidents.rb +2 -6
  32. data/lib/dri/commands/init.rb +1 -3
  33. data/lib/dri/commands/profile.rb +3 -5
  34. data/lib/dri/commands/publish/report.rb +24 -26
  35. data/lib/dri/commands/publish.rb +0 -1
  36. data/lib/dri/commands/rm/emoji.rb +1 -3
  37. data/lib/dri/commands/rm/profile.rb +1 -2
  38. data/lib/dri/commands/rm/reports.rb +1 -2
  39. data/lib/dri/commands/rm.rb +0 -3
  40. data/lib/dri/commands/view/fast_quarantine.rb +25 -0
  41. data/lib/dri/commands/view.rb +22 -0
  42. data/lib/dri/feature_flag_report.rb +1 -3
  43. data/lib/dri/refinements/gitlab.rb +22 -0
  44. data/lib/dri/refinements/string.rb +19 -0
  45. data/lib/dri/report.rb +13 -55
  46. data/lib/dri/support/configuration.rb +62 -0
  47. data/lib/dri/support/influxdb_tools.rb +37 -0
  48. data/lib/dri/utils/constants.rb +2 -1
  49. data/lib/dri/utils/helpers.rb +15 -0
  50. data/lib/dri/version.rb +1 -1
  51. data/lib/dri.rb +8 -1
  52. metadata +96 -16
  53. data/lib/dri/commands/fetch/quarantines.rb +0 -55
  54. data/lib/dri/gitlab/issues.rb +0 -19
  55. data/lib/dri/refinements/truncate.rb +0 -15
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.10.2"
4
+ VERSION = "1.1.0"
5
5
  end
data/lib/dri.rb CHANGED
@@ -1,6 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dri/version"
3
+ require 'zeitwerk'
4
+
5
+ loader = Zeitwerk::Loader.for_gem
6
+ loader.inflector.inflect(
7
+ 'cli' => 'CLI',
8
+ 'faq' => 'FAQ'
9
+ )
10
+ loader.setup
4
11
 
5
12
  module Dri
6
13
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dri
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
- - GitLab Quality
8
- autorequire:
7
+ - Test Platform
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-07-17 00:00:00.000000000 Z
11
+ date: 2025-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '7.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '7.1'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: amatch
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +66,20 @@ dependencies:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
68
  version: 0.21.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: influxdb-client
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.9'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.9'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: json
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -248,20 +276,48 @@ dependencies:
248
276
  - - "~>"
249
277
  - !ruby/object:Gem::Version
250
278
  version: 0.12.0
279
+ - !ruby/object:Gem::Dependency
280
+ name: zeitwerk
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - "~>"
284
+ - !ruby/object:Gem::Version
285
+ version: '2.6'
286
+ type: :runtime
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - "~>"
291
+ - !ruby/object:Gem::Version
292
+ version: '2.6'
251
293
  - !ruby/object:Gem::Dependency
252
294
  name: gitlab-styles
253
295
  requirement: !ruby/object:Gem::Requirement
254
296
  requirements:
255
297
  - - "~>"
256
298
  - !ruby/object:Gem::Version
257
- version: 7.0.0
299
+ version: '10'
258
300
  type: :development
259
301
  prerelease: false
260
302
  version_requirements: !ruby/object:Gem::Requirement
261
303
  requirements:
262
304
  - - "~>"
263
305
  - !ruby/object:Gem::Version
264
- version: 7.0.0
306
+ version: '10'
307
+ - !ruby/object:Gem::Dependency
308
+ name: lefthook
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - "~>"
312
+ - !ruby/object:Gem::Version
313
+ version: '1.3'
314
+ type: :development
315
+ prerelease: false
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - "~>"
319
+ - !ruby/object:Gem::Version
320
+ version: '1.3'
265
321
  - !ruby/object:Gem::Dependency
266
322
  name: pry
267
323
  requirement: !ruby/object:Gem::Requirement
@@ -318,6 +374,20 @@ dependencies:
318
374
  - - "~>"
319
375
  - !ruby/object:Gem::Version
320
376
  version: 0.9.1
377
+ - !ruby/object:Gem::Dependency
378
+ name: vcr
379
+ requirement: !ruby/object:Gem::Requirement
380
+ requirements:
381
+ - - "~>"
382
+ - !ruby/object:Gem::Version
383
+ version: 6.2.0
384
+ type: :development
385
+ prerelease: false
386
+ version_requirements: !ruby/object:Gem::Requirement
387
+ requirements:
388
+ - - "~>"
389
+ - !ruby/object:Gem::Version
390
+ version: 6.2.0
321
391
  - !ruby/object:Gem::Dependency
322
392
  name: webmock
323
393
  requirement: !ruby/object:Gem::Requirement
@@ -332,7 +402,7 @@ dependencies:
332
402
  - - "~>"
333
403
  - !ruby/object:Gem::Version
334
404
  version: '3.5'
335
- description:
405
+ description:
336
406
  email:
337
407
  - quality+dri@gitlab.com
338
408
  executables:
@@ -343,11 +413,14 @@ files:
343
413
  - ".editorconfig"
344
414
  - ".gitignore"
345
415
  - ".gitlab-ci.yml"
416
+ - ".gitlab/changelog_config.yml"
417
+ - ".gitlab/merge_request_templates/Default.md"
346
418
  - ".gitlab/merge_request_templates/Release.md"
347
419
  - ".rspec"
348
420
  - ".rubocop.yml"
349
421
  - ".ruby-version"
350
422
  - ".tool-versions"
423
+ - CODE_OF_CONDUCT.md
351
424
  - Gemfile
352
425
  - Gemfile.lock
353
426
  - LICENSE.txt
@@ -358,18 +431,20 @@ files:
358
431
  - dri.gemspec
359
432
  - exe/dri
360
433
  - faq.yaml
434
+ - lefthook.yml
361
435
  - lib/dri.rb
362
436
  - lib/dri/api_client.rb
363
437
  - lib/dri/cli.rb
364
438
  - lib/dri/command.rb
439
+ - lib/dri/commands/add.rb
440
+ - lib/dri/commands/add/fast_quarantine.rb
365
441
  - lib/dri/commands/analyze.rb
366
442
  - lib/dri/commands/analyze/stack_traces.rb
367
443
  - lib/dri/commands/faq.rb
368
444
  - lib/dri/commands/fetch.rb
369
445
  - lib/dri/commands/fetch/failures.rb
370
- - lib/dri/commands/fetch/featureflags.rb
446
+ - lib/dri/commands/fetch/feature_flags.rb
371
447
  - lib/dri/commands/fetch/pipelines.rb
372
- - lib/dri/commands/fetch/quarantines.rb
373
448
  - lib/dri/commands/fetch/runbooks.rb
374
449
  - lib/dri/commands/fetch/testcases.rb
375
450
  - lib/dri/commands/fetch/triaged.rb
@@ -382,19 +457,24 @@ files:
382
457
  - lib/dri/commands/rm/emoji.rb
383
458
  - lib/dri/commands/rm/profile.rb
384
459
  - lib/dri/commands/rm/reports.rb
460
+ - lib/dri/commands/view.rb
461
+ - lib/dri/commands/view/fast_quarantine.rb
385
462
  - lib/dri/feature_flag_report.rb
386
- - lib/dri/gitlab/issues.rb
387
- - lib/dri/refinements/truncate.rb
463
+ - lib/dri/refinements/gitlab.rb
464
+ - lib/dri/refinements/string.rb
388
465
  - lib/dri/report.rb
466
+ - lib/dri/support/configuration.rb
467
+ - lib/dri/support/influxdb_tools.rb
389
468
  - lib/dri/utils/constants.rb
469
+ - lib/dri/utils/helpers.rb
390
470
  - lib/dri/utils/markdown_lists.rb
391
471
  - lib/dri/utils/table.rb
392
472
  - lib/dri/version.rb
393
- homepage: https://gitlab.com/gitlab-org/quality/dri
473
+ homepage: https://gitlab.com/gitlab-org/ruby/gems/dri
394
474
  licenses:
395
475
  - MIT
396
476
  metadata: {}
397
- post_install_message:
477
+ post_install_message:
398
478
  rdoc_options: []
399
479
  require_paths:
400
480
  - lib
@@ -402,15 +482,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
402
482
  requirements:
403
483
  - - ">="
404
484
  - !ruby/object:Gem::Version
405
- version: 2.7.0
485
+ version: 3.0.0
406
486
  required_rubygems_version: !ruby/object:Gem::Requirement
407
487
  requirements:
408
488
  - - ">="
409
489
  - !ruby/object:Gem::Version
410
490
  version: '0'
411
491
  requirements: []
412
- rubygems_version: 3.1.6
413
- signing_key:
492
+ rubygems_version: 3.5.22
493
+ signing_key:
414
494
  specification_version: 4
415
495
  summary: CLI app to help triage GitLab QA pipelines
416
496
  test_files: []
@@ -1,55 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../command'
4
- require_relative '../../utils/table'
5
- require_relative '../../utils/constants'
6
-
7
- module Dri
8
- module Commands
9
- class Fetch
10
- class Quarantines < Dri::Command
11
- include Dri::Utils::Table
12
- include Dri::Utils::Constants::Triage::Labels
13
- using Refinements
14
-
15
- def initialize(options, search: '[QUARANTINE]')
16
- @options = options
17
- @search = search
18
-
19
- @today_iso_format = Time.now.strftime('%Y-%m-%dT00:00:00Z')
20
- end
21
-
22
- def execute(input: $stdin, output: $stdout)
23
- verify_config_exists
24
- title = add_color('Example name', :bright_yellow)
25
- url = add_color('URL', :bright_yellow)
26
-
27
- headers = [title, url]
28
- mrs = []
29
-
30
- logger.info "Fetching #{@search} MRs..."
31
-
32
- spinner.run do
33
- response = api_client.fetch_mrs(
34
- project_id: 'gitlab-org/gitlab',
35
- labels: "#{QA},#{QUALITY}",
36
- search: @search,
37
- in: :title,
38
- state: :opened
39
- )
40
-
41
- mrs = response.each_with_object([]) do |mr, found_mrs|
42
- title = mr.title[13..].truncate(60) # remove the "[QUARANTINE] " prefix
43
- url = mr.web_url
44
-
45
- found_mrs << [title, url]
46
- end
47
- end
48
-
49
- print_table(headers, mrs, alignments: [:left, :left])
50
- output.puts "Found #{mrs.size} open #{@search} MRs"
51
- end
52
- end
53
- end
54
- end
55
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Gitlab gem monkeypatch for related merge requests
4
- # TODO: Add method upstream
5
- #
6
- class Gitlab::Client
7
- module Issues
8
- # List related merge requests
9
- #
10
- # @example
11
- # Gitlab.related_issue_merge_requests(3, 42)
12
- #
13
- # @param [Integer, String] project The ID or name of a project.
14
- # @param [Integer] id The ID of an issue.
15
- def related_issue_merge_requests(project, id)
16
- get("/projects/#{url_encode project}/issues/#{id}/related_merge_requests")
17
- end
18
- end
19
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Refinements
4
- refine String do
5
- # Truncate string to limit of _n_ characters
6
- # @param [Integer] limit the limit of characters
7
- # @return [String] the resulting string after truncation
8
- def truncate(limit = 50)
9
- return freeze if size <= limit
10
-
11
- # limit - 3 for the ellipses
12
- self[0...(limit - 3)] << '...'
13
- end
14
- end
15
- end