gitlab-dangerfiles 2.3.0 → 2.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9514e55b5f6bd5a29333c3d08cd1cb2b6a0a61dc3f07a363625a60e52708095a
4
- data.tar.gz: '05359002275ba7bf06b2aca1d6a9a0acc8f149765ff87970bf12ebcb29b3f796'
3
+ metadata.gz: 93e497ecb88959ef6d916e995491d4a17644b2875b765a87d1b8dbf2a2e245cd
4
+ data.tar.gz: 2060f3bb306e1abf440eb4d2eead9f4a97dd5999d28a691fe119260fcf338b45
5
5
  SHA512:
6
- metadata.gz: 6309c8416ef0952e275acce5ec3fe12bbc72658857ad253e6fd92c86acc5d2d6a952cbb87f80b5d32073d6d9c5eb521482417e7ecfcfc1c93502107a11fbfa62
7
- data.tar.gz: 99c591108c94959166847f6bc11f2b0f7bcf7a1114c4176d982ecdbbc8c5cd6c3bef6edca889a6cd3dc0d5902077fcaa117835a521e9eb9d4bfd590a16161cbf
6
+ metadata.gz: 01a447e73d6550265ddf775674190816341bd07f484be816b7583fc3b70427bcfb2b1a0c9aa86b651486bed62953a8e97838c58527eee11af4c169f2633d7d2f
7
+ data.tar.gz: f85733f1b015c3170cafc990b0cf84c773ed8532f11e3978b59d21477ad592d8095ff6b46b4a673da98f956c1368ed4a6501e3ae26b62c1d1c534022bbc4b88b
@@ -0,0 +1 @@
1
+ * @gl-quality/eng-prod
data/.gitlab-ci.yml CHANGED
@@ -28,6 +28,12 @@ workflow:
28
28
  - Gemfile.lock
29
29
  policy: pull
30
30
 
31
+ danger-review:
32
+ extends: .default
33
+ stage: test
34
+ script:
35
+ - bundle exec danger --fail-on-errors=true --verbose
36
+
31
37
  test:rspec:
32
38
  extends: .default
33
39
  stage: test
data/Dangerfile ADDED
@@ -0,0 +1,10 @@
1
+ require_relative "lib/gitlab-dangerfiles"
2
+
3
+ # Get an instance of Gitlab::Dangerfiles
4
+ gitlab_dangerfiles = Gitlab::Dangerfiles::Engine.new(self)
5
+
6
+ # Import all plugins from the gem
7
+ gitlab_dangerfiles.import_plugins
8
+
9
+ # Import all rules from the gem
10
+ gitlab_dangerfiles.import_dangerfiles
data/Gemfile CHANGED
@@ -6,3 +6,7 @@ gemspec
6
6
  gem "rake", "~> 12.0"
7
7
  gem "guard-rspec"
8
8
  gem "yard"
9
+
10
+ group :test do
11
+ gem "pry-byebug", "~> 3.8", require: false
12
+ end
data/README.md CHANGED
@@ -55,7 +55,6 @@ For the full documentation about the plugins, please see https://www.rubydoc.inf
55
55
 
56
56
  ### Rules
57
57
 
58
-
59
58
  Danger rules are located under `lib/danger/rules`.
60
59
 
61
60
  #### `changes_size`
@@ -16,12 +16,15 @@ module Danger
16
16
  docs: "~documentation", # Docs are reviewed along DevOps stages, so don't need roulette for now.
17
17
  none: "",
18
18
  qa: "~QA",
19
+ ux: "~UX",
19
20
  test: "~test ~Quality for `spec/features/*`",
20
21
  # Deprecated as of 2.3.0 in favor of tooling
21
22
  engineering_productivity: '~"Engineering Productivity" for CI, Danger',
22
- tooling: "~tooling for CI, Danger",
23
+ tooling: '~"type::tooling" for CI, Danger',
23
24
  ci_template: '~"ci::templates"',
24
25
  product_intelligence: '~"product intelligence"',
26
+ integrations_be: '~"group::integrations" (backend)',
27
+ integrations_fe: '~"group::integrations" (frontend)',
25
28
  }.freeze
26
29
 
27
30
  # Allows to set specific rule's configuration by passing a block.
@@ -34,6 +34,9 @@ module Danger
34
34
  #
35
35
  # @return [Array<Spin>]
36
36
  def spin(project, categories = [nil], timezone_experiment: false)
37
+ project = project.downcase
38
+ categories = categories.map { |category| category&.downcase }
39
+
37
40
  spins = categories.sort_by(&:to_s).map do |category|
38
41
  including_timezone = INCLUDE_TIMEZONE_FOR_CATEGORY.fetch(category, timezone_experiment)
39
42
 
@@ -75,6 +78,8 @@ module Danger
75
78
  # Fetch an already picked maintainer, or pick one otherwise
76
79
  spin.maintainer = backend_spin&.maintainer || frontend_spin&.maintainer || spin_for_category(project, :backend, timezone_experiment: including_timezone).maintainer
77
80
  end
81
+ when :integrations_be, :integrations_fe
82
+ spin.optional_role = :maintainer
78
83
  end
79
84
  end
80
85
 
@@ -28,6 +28,10 @@ module Gitlab
28
28
  @problems = {}
29
29
  end
30
30
 
31
+ def inspect
32
+ "#{self.class}:#{object_id} @commit=#{@commit} @problems=#{@problems}"
33
+ end
34
+
31
35
  def failed?
32
36
  problems.any?
33
37
  end
@@ -78,7 +82,7 @@ module Gitlab
78
82
  return false if subject.empty?
79
83
  return false if ("A".."Z").cover?(subject[0])
80
84
 
81
- first_char = subject.sub(/\A(\[.+\]|\w+:)\s/, "")[0]
85
+ first_char = subject.sub(/\A(\[[^\]]+\]|[^:\s]+:)\s/, "")[0]
82
86
  first_char_downcased = first_char.downcase
83
87
  return true unless ("a".."z").cover?(first_char_downcased)
84
88
 
@@ -9,9 +9,9 @@ module Gitlab
9
9
  MAX_CHANGED_FILES_IN_COMMIT = 3
10
10
  MAX_CHANGED_LINES_IN_COMMIT = 30
11
11
  # Issue, MR, Epic
12
- SHORT_REFERENCE_REGEX = %r{([\w\-\/]+)?(?<!`)(#|!|&)\d+(?<!`)}.freeze
12
+ SHORT_REFERENCE_REGEX = %r{(\S*([\w\-\/]+)?(?<!`)(#|!|&)\d+(?<!`))}.freeze
13
13
  # Milestone
14
- MS_SHORT_REFERENCE_REGEX = %r{([\w\-\/]+)?(?<!`)%"?\d{1,3}\.\d{1,3}"?(?<!`)}.freeze
14
+ MS_SHORT_REFERENCE_REGEX = %r{(\S*([\w\-\/]+)?(?<!`)%"?\d{1,3}\.\d{1,3}"?(?<!`))}.freeze
15
15
  SUGGESTIONS_APPLIED_COMMIT_REGEX = /Apply \d+ suggestion\(s\) to \d+ file\(s\)/.freeze
16
16
 
17
17
  def self.problems_mapping
@@ -143,8 +143,13 @@ module Gitlab
143
143
  end
144
144
 
145
145
  def message_contains_short_reference?
146
- commit.message.match?(SHORT_REFERENCE_REGEX) ||
147
- commit.message.match?(MS_SHORT_REFERENCE_REGEX)
146
+ match_data = commit.message.match(SHORT_REFERENCE_REGEX) ||
147
+ commit.message.match(MS_SHORT_REFERENCE_REGEX)
148
+
149
+ return false unless match_data
150
+
151
+ # Any URL would include "//". This works for http/https/ftp etc.
152
+ !match_data[1].include?("//")
148
153
  end
149
154
 
150
155
  def emoji_checker
@@ -12,7 +12,7 @@ module Gitlab
12
12
  @name = options["name"]
13
13
  @markdown_name = options["markdown_name"]
14
14
  @role = options["role"]
15
- @projects = options["projects"]
15
+ @projects = process_projects(options["projects"])
16
16
  @available = options["available"]
17
17
  @hungry = options["hungry"]
18
18
  @reduced_capacity = options["reduced_capacity"]
@@ -49,6 +49,18 @@ module Gitlab
49
49
  has_capability?(project, category, :maintainer, labels)
50
50
  end
51
51
 
52
+ def integrations_be?(project, category, labels)
53
+ return false unless category == :integrations_be
54
+
55
+ has_capability?(project, category, :reviewer, labels)
56
+ end
57
+
58
+ def integrations_fe?(project, category, labels)
59
+ return false unless category == :integrations_fe
60
+
61
+ has_capability?(project, category, :reviewer, labels)
62
+ end
63
+
52
64
  def markdown_name(author: nil)
53
65
  "#{@markdown_name} (#{utc_offset_text(author)})"
54
66
  end
@@ -67,6 +79,14 @@ module Gitlab
67
79
 
68
80
  private
69
81
 
82
+ def process_projects(projects)
83
+ return nil unless projects
84
+
85
+ projects.each_with_object({}) do |(project, capabilities), all|
86
+ all[project.downcase] = Array(capabilities).map(&:downcase)
87
+ end
88
+ end
89
+
70
90
  def utc_offset_text(author = nil)
71
91
  offset_text = if floored_offset_hours >= 0
72
92
  "UTC+#{floored_offset_hours}"
@@ -101,6 +121,12 @@ module Gitlab
101
121
  return true if capabilities(project).include?("#{kind} engineering_productivity")
102
122
 
103
123
  capabilities(project).include?("#{kind} backend")
124
+ when :integrations_be
125
+ kind == :reviewer &&
126
+ role.match?(/Backend Engineer.+Ecosystem:Integrations/)
127
+ when :integrations_fe
128
+ kind == :reviewer &&
129
+ role.match?(/Frontend Engineer.+Ecosystem:Integrations/)
104
130
  when nil
105
131
  capabilities(project).include?("#{kind}")
106
132
  else
@@ -1,5 +1,5 @@
1
1
  module Gitlab
2
2
  module Dangerfiles
3
- VERSION = "2.3.0"
3
+ VERSION = "2.5.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-dangerfiles
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitLab
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-07-22 00:00:00.000000000 Z
11
+ date: 2021-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: danger-gitlab
@@ -131,10 +131,12 @@ extra_rdoc_files: []
131
131
  files:
132
132
  - ".gitignore"
133
133
  - ".gitlab-ci.yml"
134
+ - ".gitlab/CODEOWNERS"
134
135
  - ".gitlab/merge_request_templates/Release.md"
135
136
  - ".rspec"
136
137
  - ".yardopts"
137
138
  - CODE_OF_CONDUCT.md
139
+ - Dangerfile
138
140
  - Gemfile
139
141
  - Guardfile
140
142
  - LICENSE.txt