dri 0.11.0 → 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 (50) 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/.ruby-version +1 -1
  7. data/.tool-versions +1 -1
  8. data/CODE_OF_CONDUCT.md +74 -0
  9. data/Gemfile.lock +21 -2
  10. data/README.md +88 -98
  11. data/dri.gemspec +4 -0
  12. data/exe/dri +2 -1
  13. data/lefthook.yml +24 -0
  14. data/lib/dri/api_client.rb +18 -23
  15. data/lib/dri/cli.rb +0 -15
  16. data/lib/dri/command.rb +17 -51
  17. data/lib/dri/commands/add/fast_quarantine.rb +0 -2
  18. data/lib/dri/commands/add.rb +0 -1
  19. data/lib/dri/commands/analyze/stack_traces.rb +0 -3
  20. data/lib/dri/commands/analyze.rb +0 -1
  21. data/lib/dri/commands/faq.rb +0 -1
  22. data/lib/dri/commands/fetch/failures.rb +25 -25
  23. data/lib/dri/commands/fetch/{featureflags.rb → feature_flags.rb} +0 -5
  24. data/lib/dri/commands/fetch/pipelines.rb +0 -4
  25. data/lib/dri/commands/fetch/runbooks.rb +0 -2
  26. data/lib/dri/commands/fetch/testcases.rb +0 -2
  27. data/lib/dri/commands/fetch/triaged.rb +1 -5
  28. data/lib/dri/commands/fetch.rb +0 -6
  29. data/lib/dri/commands/incidents.rb +1 -5
  30. data/lib/dri/commands/init.rb +0 -2
  31. data/lib/dri/commands/profile.rb +0 -2
  32. data/lib/dri/commands/publish/report.rb +23 -23
  33. data/lib/dri/commands/publish.rb +0 -1
  34. data/lib/dri/commands/rm/emoji.rb +0 -2
  35. data/lib/dri/commands/rm/profile.rb +0 -1
  36. data/lib/dri/commands/rm/reports.rb +0 -1
  37. data/lib/dri/commands/rm.rb +0 -3
  38. data/lib/dri/commands/view/fast_quarantine.rb +0 -2
  39. data/lib/dri/commands/view.rb +0 -1
  40. data/lib/dri/feature_flag_report.rb +0 -2
  41. data/lib/dri/refinements/gitlab.rb +22 -0
  42. data/lib/dri/refinements/string.rb +19 -0
  43. data/lib/dri/report.rb +1 -3
  44. data/lib/dri/support/configuration.rb +62 -0
  45. data/lib/dri/utils/helpers.rb +15 -0
  46. data/lib/dri/version.rb +1 -1
  47. data/lib/dri.rb +8 -1
  48. metadata +72 -10
  49. data/lib/dri/gitlab/issues.rb +0 -19
  50. data/lib/dri/refinements/truncate.rb +0 -15
@@ -14,7 +14,6 @@ module Dri
14
14
  if options[:help]
15
15
  invoke :help, ['profile']
16
16
  else
17
- require_relative 'rm/profile'
18
17
  Dri::Commands::Rm::Profile.new(options).execute
19
18
  end
20
19
  end
@@ -26,7 +25,6 @@ module Dri
26
25
  if options[:help]
27
26
  invoke :help, ['reports']
28
27
  else
29
- require_relative 'rm/reports'
30
28
  Dri::Commands::Rm::Reports.new(options).execute
31
29
  end
32
30
  end
@@ -38,7 +36,6 @@ module Dri
38
36
  if options[:help]
39
37
  invoke :help, ['emoji']
40
38
  else
41
- require_relative 'rm/emoji'
42
39
  Dri::Commands::Rm::Emoji.new(options).execute
43
40
  end
44
41
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../command'
4
-
5
3
  module Dri
6
4
  module Commands
7
5
  class View
@@ -14,7 +14,6 @@ module Dri
14
14
  if options[:help]
15
15
  invoke :help, ['fastquarantine']
16
16
  else
17
- require_relative 'view/fast_quarantine'
18
17
  Dri::Commands::View::FastQuarantine.new(options).execute
19
18
  end
20
19
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative './utils/constants'
4
-
5
3
  module Dri
6
4
  class FeatureFlagReport
7
5
  include Dri::Utils::Constants::FeatureFlag::Labels
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Gitlab gem refinement for related merge requests
4
+ # TODO: Add method upstream (https://github.com/NARKOZ/gitlab/pull/683)
5
+ module Dri
6
+ module Refinements
7
+ module Gitlab
8
+ refine ::Gitlab::Client::Issues do
9
+ # List related merge requests
10
+ #
11
+ # @example
12
+ # Gitlab.related_issue_merge_requests(3, 42)
13
+ #
14
+ # @param [Integer, String] project The ID or name of a project.
15
+ # @param [Integer] id The ID of an issue.
16
+ def related_issue_merge_requests(project, id)
17
+ get("/projects/#{url_encode project}/issues/#{id}/related_merge_requests")
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dri
4
+ module Refinements
5
+ module String
6
+ refine ::String do
7
+ # Truncate string to limit of _n_ characters
8
+ # @param [Integer] limit the limit of characters
9
+ # @return [String] the resulting string after truncation
10
+ def truncate(limit = 50)
11
+ return freeze if size <= limit
12
+
13
+ # limit - 3 for the ellipses
14
+ self[0...(limit - 3)] << '...'
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
data/lib/dri/report.rb CHANGED
@@ -1,11 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative './utils/constants'
4
-
5
3
  module Dri
6
4
  class Report # rubocop:disable Metrics/ClassLength
7
5
  include Dri::Utils::Constants::Triage::Labels
8
- using Refinements
6
+ using Refinements::String
9
7
 
10
8
  attr_reader :header, :failures, :labels, :labels_incidents, :incidents
11
9
 
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "tzinfo"
4
+ require "tty-config"
5
+
6
+ module Dri
7
+ module Support
8
+ class Configuration
9
+ include Utils::Helpers
10
+
11
+ TZ = {
12
+ "AMER" => "America/New_York",
13
+ "EMEA" => "Europe/London",
14
+ "APAC" => "Asia/Tokyo"
15
+ }.freeze
16
+
17
+ def initialize
18
+ @config = TTY::Config.new do |conf|
19
+ conf.filename = ".dri_profile"
20
+ conf.extname = ".yml"
21
+ conf.append_path Dir.home
22
+ conf.append_path Dir.pwd
23
+ end
24
+ end
25
+
26
+ attr_reader :config
27
+
28
+ def profile
29
+ @profile ||= config.read
30
+ end
31
+
32
+ def emoji
33
+ @emoji ||= profile["settings"]["emoji"]
34
+ end
35
+
36
+ def username
37
+ @username ||= profile["settings"]["user"]
38
+ end
39
+
40
+ def token
41
+ @token ||= profile["settings"]["token"]
42
+ end
43
+
44
+ def ops_token
45
+ @ops_token ||= profile["settings"]["ops_token"]
46
+ end
47
+
48
+ def handover_report_path
49
+ @handover_report_path ||= profile["settings"]["handover_report_path"] || File.join(Dir.home,
50
+ ".handover_reports")
51
+ end
52
+
53
+ def timezone
54
+ @timezone ||= profile["settings"]["timezone"]
55
+ end
56
+
57
+ def tz
58
+ @tz ||= TZInfo::Timezone.get(profile["settings"]["tz"] || TZ[timezone])
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "tty-logger"
4
+
5
+ module Dri
6
+ module Utils
7
+ module Helpers
8
+ def logger
9
+ @logger ||= TTY::Logger.new
10
+ end
11
+
12
+ module_function :logger
13
+ end
14
+ end
15
+ 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.11.0"
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.11.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Test Platform
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-11-30 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
@@ -262,6 +276,20 @@ dependencies:
262
276
  - - "~>"
263
277
  - !ruby/object:Gem::Version
264
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'
265
293
  - !ruby/object:Gem::Dependency
266
294
  name: gitlab-styles
267
295
  requirement: !ruby/object:Gem::Requirement
@@ -276,6 +304,20 @@ dependencies:
276
304
  - - "~>"
277
305
  - !ruby/object:Gem::Version
278
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'
279
321
  - !ruby/object:Gem::Dependency
280
322
  name: pry
281
323
  requirement: !ruby/object:Gem::Requirement
@@ -332,6 +374,20 @@ dependencies:
332
374
  - - "~>"
333
375
  - !ruby/object:Gem::Version
334
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
335
391
  - !ruby/object:Gem::Dependency
336
392
  name: webmock
337
393
  requirement: !ruby/object:Gem::Requirement
@@ -346,7 +402,7 @@ dependencies:
346
402
  - - "~>"
347
403
  - !ruby/object:Gem::Version
348
404
  version: '3.5'
349
- description:
405
+ description:
350
406
  email:
351
407
  - quality+dri@gitlab.com
352
408
  executables:
@@ -357,11 +413,14 @@ files:
357
413
  - ".editorconfig"
358
414
  - ".gitignore"
359
415
  - ".gitlab-ci.yml"
416
+ - ".gitlab/changelog_config.yml"
417
+ - ".gitlab/merge_request_templates/Default.md"
360
418
  - ".gitlab/merge_request_templates/Release.md"
361
419
  - ".rspec"
362
420
  - ".rubocop.yml"
363
421
  - ".ruby-version"
364
422
  - ".tool-versions"
423
+ - CODE_OF_CONDUCT.md
365
424
  - Gemfile
366
425
  - Gemfile.lock
367
426
  - LICENSE.txt
@@ -372,6 +431,7 @@ files:
372
431
  - dri.gemspec
373
432
  - exe/dri
374
433
  - faq.yaml
434
+ - lefthook.yml
375
435
  - lib/dri.rb
376
436
  - lib/dri/api_client.rb
377
437
  - lib/dri/cli.rb
@@ -383,7 +443,7 @@ files:
383
443
  - lib/dri/commands/faq.rb
384
444
  - lib/dri/commands/fetch.rb
385
445
  - lib/dri/commands/fetch/failures.rb
386
- - lib/dri/commands/fetch/featureflags.rb
446
+ - lib/dri/commands/fetch/feature_flags.rb
387
447
  - lib/dri/commands/fetch/pipelines.rb
388
448
  - lib/dri/commands/fetch/runbooks.rb
389
449
  - lib/dri/commands/fetch/testcases.rb
@@ -400,11 +460,13 @@ files:
400
460
  - lib/dri/commands/view.rb
401
461
  - lib/dri/commands/view/fast_quarantine.rb
402
462
  - lib/dri/feature_flag_report.rb
403
- - lib/dri/gitlab/issues.rb
404
- - lib/dri/refinements/truncate.rb
463
+ - lib/dri/refinements/gitlab.rb
464
+ - lib/dri/refinements/string.rb
405
465
  - lib/dri/report.rb
466
+ - lib/dri/support/configuration.rb
406
467
  - lib/dri/support/influxdb_tools.rb
407
468
  - lib/dri/utils/constants.rb
469
+ - lib/dri/utils/helpers.rb
408
470
  - lib/dri/utils/markdown_lists.rb
409
471
  - lib/dri/utils/table.rb
410
472
  - lib/dri/version.rb
@@ -412,7 +474,7 @@ homepage: https://gitlab.com/gitlab-org/ruby/gems/dri
412
474
  licenses:
413
475
  - MIT
414
476
  metadata: {}
415
- post_install_message:
477
+ post_install_message:
416
478
  rdoc_options: []
417
479
  require_paths:
418
480
  - lib
@@ -427,8 +489,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
427
489
  - !ruby/object:Gem::Version
428
490
  version: '0'
429
491
  requirements: []
430
- rubygems_version: 3.1.6
431
- signing_key:
492
+ rubygems_version: 3.5.22
493
+ signing_key:
432
494
  specification_version: 4
433
495
  summary: CLI app to help triage GitLab QA pipelines
434
496
  test_files: []
@@ -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