gitlab-dangerfiles 3.6.7 → 3.8.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: e8d0bdb87447c7436d0814db68d0e65423a2d693a2d89abdf59331cff1287253
4
- data.tar.gz: b79304e093b0be5dc9d0609b957c318c4e672b48a49263624bb9b3922885dfe4
3
+ metadata.gz: fcee2fd2dd96522a7b1a5d1f906bc7fccfa28c9d6e9f61d6843c1fcd22dee884
4
+ data.tar.gz: c433e7fd8d3fd698c1eb71e5291f24a191ee2c4a86d376bae6f18b0735352f2a
5
5
  SHA512:
6
- metadata.gz: 3173b6d8ec73814d7b0d3fdcf32270178fc76b38024ab4ba41cf106589f5f7fa4b9f0dfea9cb8fc9213b011c39691a695948caaca58455b80135e6c9af13d071
7
- data.tar.gz: f0922b64b753e15aff30716ca1a6ade6afc6b74bbeda983dfa29190a382990e7d21311175b058f3ef26d7071273426a5ea66e8a8843a57f18411e284f07fe38c
6
+ metadata.gz: c014e0cf3905380549a0f088c5685b7e1251643f5bbdd3e5362e4cf3c0ca0c0e4a1456599db66eabd3dad006547b70010716a2ab5b9aa2318e573ced7bd3680d
7
+ data.tar.gz: 0311fcec0f9cd30684470739798c5ab9c296d2c3cfb22d7e73a98f2c644b6db373edd752587a134199a366372b877bca4d3f198aed89f133483db45a2d5979e6
data/.rubocop.yml CHANGED
@@ -38,6 +38,10 @@ Style/StringLiterals:
38
38
  Style/TrailingCommaInHashLiteral:
39
39
  EnforcedStyleForMultiline: consistent_comma
40
40
 
41
+ # To respect rufo formatting
42
+ Style/TrailingCommaInArguments:
43
+ Enabled: false
44
+
41
45
  # To respect rufo formatting
42
46
  Layout/MultilineOperationIndentation:
43
47
  Enabled: false
data/README.md CHANGED
@@ -106,6 +106,8 @@ This rule ensures the merge request follows our [Changelog guidelines](https://d
106
106
 
107
107
  #### `changes_size`
108
108
 
109
+ This rule ensures the merge request isn't too big to be reviewed, otherwise it suggests to split the MR.
110
+
109
111
  ##### Available configurations
110
112
 
111
113
  - `code_size_thresholds`: A hash of the form `{ high: 42, medium: 12 }` where
@@ -119,6 +121,14 @@ This rule ensures the merge request follows our [Changelog guidelines](https://d
119
121
  - `max_commits_count`: The maximum number of allowed non-squashed/non-fixup commits for a given MR.
120
122
  A warning is triggered if the MR has more commits.
121
123
 
124
+ #### `commits_counter`
125
+
126
+ This rule posts a failure if the merge request has more than 20 commits.
127
+
128
+ #### `metadata`
129
+
130
+ This rule ensures basic metadata such as assignee, milestone and description are set on the merge request.
131
+
122
132
  #### `simple_roulette`
123
133
 
124
134
  The library includes a simplified default reviewer roulette that you can use in your
@@ -230,7 +240,7 @@ Latest documentation can be found at <https://www.rubydoc.info/gems/gitlab-dange
230
240
 
231
241
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
232
242
 
233
- To install this gem onto your local machine, run `bundle exec rake install`.
243
+ To install this gem onto your local machine, run `bundle exec rake install`.
234
244
 
235
245
  ### Activate lefthook locally
236
246
 
@@ -134,10 +134,10 @@ module Danger
134
134
  def critical_checks
135
135
  check_result = ChangelogCheckResult.empty
136
136
 
137
- check_result.error(modified_text) if git.modified_files.include?("CHANGELOG.md")
137
+ check_result.warning(modified_text) if git.modified_files.include?("CHANGELOG.md")
138
138
 
139
139
  # Help the user to apply the correct labels to skip this danger check in case it's a revert MR
140
- check_result.warning(IF_REVERT_MR_TEXT) if helper.revert_mr?
140
+ check_result.warning(IF_REVERT_MR_TEXT) if helper.revert_mr? && !helper.stable_branch?
141
141
 
142
142
  add_danger_messages(check_result)
143
143
  end
@@ -278,6 +278,13 @@ module Danger
278
278
  gitlab_helper.mr_author
279
279
  end
280
280
 
281
+ # @return [Array<Hash>] +[]+ when not in the CI context, and the MR assignees otherwise.
282
+ def mr_assignees
283
+ return [] unless ci?
284
+
285
+ gitlab_helper.mr_json["assignees"]
286
+ end
287
+
281
288
  # @return [String] +""+ when not in the CI context, and the MR title otherwise.
282
289
  def mr_title
283
290
  return "" unless ci?
@@ -285,6 +292,13 @@ module Danger
285
292
  gitlab_helper.mr_json["title"]
286
293
  end
287
294
 
295
+ # @return [String] +""+ when not in the CI context, and the MR description otherwise.
296
+ def mr_description
297
+ return "" unless ci?
298
+
299
+ gitlab_helper.mr_body
300
+ end
301
+
288
302
  # @return [String] +""+ when not in the CI context, and the MR URL otherwise.
289
303
  def mr_web_url
290
304
  return "" unless ci?
@@ -292,6 +306,13 @@ module Danger
292
306
  gitlab_helper.mr_json["web_url"]
293
307
  end
294
308
 
309
+ # @return [Hash, nil] +nil+ when not in the CI context, and the MR milestone otherwise.
310
+ def mr_milestone
311
+ return unless ci?
312
+
313
+ gitlab_helper.mr_json["milestone"]
314
+ end
315
+
295
316
  # @return [Array<String>] +[]+ when not in the CI context, and the MR labels otherwise.
296
317
  def mr_labels
297
318
  return [] unless ci?
@@ -1,5 +1,31 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- if git.commits.size > 20
4
- failure 'This MR has more than 20 commits. You need to rebase this branch to have fewer commits.'
3
+ gitlab_org_gitlab_project_id = 278964
4
+
5
+ return if git.commits.size <= 20
6
+
7
+ general_message = 'This merge request has more than 20 commits which may cause issues in some of the jobs. If you see errors like missing commits'
8
+
9
+ warning_message = "#{general_message}, please consider squashing some commits so it is within 20 commits."
10
+
11
+ failure_message = "#{general_message}, please enable squashing and consider squashing yourself as well."
12
+
13
+ # GitLab the project has quite some jobs relying on having less than 20
14
+ # commits due to GIT_DEPTH being set to 20. Those jobs require accessing to
15
+ # all the commits within the merge request thus it cannot have more than that.
16
+ # We also have a higher commit history standard for a larger project like that
17
+ # See also:
18
+ #
19
+ # https://gitlab.com/gitlab-org/gitlab/-/issues/358125
20
+ # https://gitlab.com/gitlab-org/ruby/gems/gitlab-dangerfiles/-/issues/49
21
+ if helper.mr_target_project_id == gitlab_org_gitlab_project_id
22
+ details = "See [comments in the file](https://gitlab.com/gitlab-org/ruby/gems/gitlab-dangerfiles/-/blob/master/lib/danger/rules/commits_counter/Dangerfile) implementing this for more details."
23
+
24
+ if helper.squash_mr?
25
+ warn "#{warning_message} #{details}"
26
+ else
27
+ failure "#{failure_message} #{details}"
28
+ end
29
+ else
30
+ warn warning_message
5
31
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ fail("Merge request description is too short. Please provide a proper merge request description.") if helper.mr_description.size < 5 # rubocop:disable Style/SignalException:
4
+
5
+ warn("This merge request does not have any assignee yet. Setting an assignee clarifies who needs to take action on the merge request at any given time.") if helper.mr_assignees.empty?
6
+
7
+ warn("This merge request does not refer to an existing milestone.", sticky: false) if helper.mr_milestone.nil?
8
+
9
+ default_branch = ENV['CI_DEFAULT_BRANCH'] || 'main'
10
+ has_pick_into_stable_label = helper.mr_labels.find { |label| label.start_with?('Pick into') }
11
+ warn("Most of the time, merge requests should target `#{default_branch}`. Otherwise, please set the relevant `Pick into X.Y` label.") if helper.mr_target_branch != default_branch && !has_pick_into_stable_label && !helper.security_mr?
@@ -92,11 +92,46 @@ module Gitlab
92
92
  class UX < Category
93
93
  private
94
94
 
95
+ def has_particular_capability?(teammate)
96
+ if labels.any?("Community contribution")
97
+ can_review_wider_community_contribution?(teammate)
98
+ else
99
+ super
100
+ end
101
+ end
102
+
95
103
  def has_universal_capability?(teammate)
96
- teammate.projects.each_value.find do |capabilities|
104
+ # No universal reviewer for community contribution.
105
+ # If we do, then picking from corresponding group won't be accurate.
106
+ # After solving the following issue, then we can revisit this:
107
+ # https://gitlab.com/gitlab-org/ruby/gems/gitlab-dangerfiles/-/issues/58
108
+ return false if labels.any?("Community contribution")
109
+
110
+ teammate.projects.each_value.any? do |capabilities|
97
111
  capabilities.include?(capability)
98
112
  end
99
113
  end
114
+
115
+ def can_review_wider_community_contribution?(teammate)
116
+ # Pick corresponding group for community contribution
117
+ # Role can be:
118
+ # Product Designer, Create:Source Code
119
+ # Product Designer, Verify:Pipeline Insights, Verify:Runner
120
+ # Product Designer, Release
121
+ # Specialty can be:
122
+ # Source Code
123
+ # [Growth: Activation, Growth: Expansion]
124
+ # Runner
125
+ areas = teammate.role[/Product Designer(?:.*?, (.+))/, 1]&.split(",")
126
+
127
+ group_labels = [*teammate.specialty, *areas].map do |field|
128
+ group = field.strip.sub(/^.+: ?/, "").downcase
129
+
130
+ "group::#{group}"
131
+ end
132
+
133
+ (group_labels & labels).any?
134
+ end
100
135
  end
101
136
  end
102
137
  end
@@ -5,10 +5,10 @@ require_relative "category"
5
5
  module Gitlab
6
6
  module Dangerfiles
7
7
  class Teammate
8
- attr_reader :options, :username, :name, :role, :projects, :available, :hungry, :reduced_capacity, :tz_offset_hours,
8
+ attr_reader :options, :username, :name, :role, :specialty, :projects, :available, :hungry, :reduced_capacity, :tz_offset_hours,
9
9
  :only_maintainer_reviews
10
10
 
11
- # The options data are produced by https://gitlab.com/gitlab-org/gitlab-roulette/-/blob/master/lib/team_member.rb
11
+ # The options data are produced by https://gitlab.com/gitlab-org/gitlab-roulette/-/blob/main/lib/team_member.rb
12
12
  def initialize(options = {})
13
13
  @options = options
14
14
  @username = options["username"]
@@ -16,6 +16,7 @@ module Gitlab
16
16
  @markdown_name = options["markdown_name"] ||
17
17
  default_markdown_name(*options.values_at("username", "name"))
18
18
  @role = options["role"]
19
+ @specialty = options["specialty"]
19
20
  @projects = process_projects(options["projects"])
20
21
  @available = options["available"]
21
22
  @hungry = options["hungry"]
@@ -1,5 +1,5 @@
1
1
  module Gitlab
2
2
  module Dangerfiles
3
- VERSION = "3.6.7"
3
+ VERSION = "3.8.0"
4
4
  end
5
5
  end
@@ -5,6 +5,7 @@ module Gitlab
5
5
  module Dangerfiles
6
6
  RULES_DIR = File.expand_path("../danger/rules", __dir__)
7
7
  CI_ONLY_RULES = %w[
8
+ metadata
8
9
  simple_roulette
9
10
  type_label
10
11
  subtype_label
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: 3.6.7
4
+ version: 3.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitLab
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-02-10 00:00:00.000000000 Z
11
+ date: 2023-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -174,6 +174,7 @@ files:
174
174
  - lib/danger/rules/changes_size/Dangerfile
175
175
  - lib/danger/rules/commit_messages/Dangerfile
176
176
  - lib/danger/rules/commits_counter/Dangerfile
177
+ - lib/danger/rules/metadata/Dangerfile
177
178
  - lib/danger/rules/simple_roulette/Dangerfile
178
179
  - lib/danger/rules/subtype_label/Dangerfile
179
180
  - lib/danger/rules/type_label/Dangerfile