gitlab-dangerfiles 3.6.6 → 3.7.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 +4 -4
- data/.gitlab-ci.yml +3 -3
- data/.rubocop.yml +6 -0
- data/lib/danger/plugins/changelog.rb +1 -1
- data/lib/danger/plugins/roulette.rb +12 -5
- data/lib/danger/rules/simple_roulette/Dangerfile +16 -0
- data/lib/gitlab/dangerfiles/category.rb +36 -1
- data/lib/gitlab/dangerfiles/teammate.rb +3 -2
- data/lib/gitlab/dangerfiles/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c8b3755415a3a732fc13c70da4176927062a9d5b6452a7d2513d3ef29617c89
|
4
|
+
data.tar.gz: 1822e18dcc9e51d93f0ea1f3df574aaf5c1dd5ec1b0fd552bfea34f8b114971d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d86af6131e0703fcab736fb75f09b62d1e656bec379f76f8bee6223899e99b34a085c86dc94d7c6d99ce88642acbea4d9079050ab50331abbc10d6c47c0fcc76
|
7
|
+
data.tar.gz: dc878dcd339bed44e0cb4059ec965cce1f6e0513099002126779640c3f8986417bbfabdbbec1ffd4137729839d682d8f7bc6f69cf1654ee03b9a75007f561f93
|
data/.gitlab-ci.yml
CHANGED
@@ -35,7 +35,7 @@ test:rspec:
|
|
35
35
|
- bundle exec rspec
|
36
36
|
parallel:
|
37
37
|
matrix:
|
38
|
-
- RUBY_VERSION: ['
|
38
|
+
- RUBY_VERSION: ['3.0', '3.1', '3.2']
|
39
39
|
|
40
40
|
test:rubocop:
|
41
41
|
extends: .default
|
@@ -44,7 +44,7 @@ test:rubocop:
|
|
44
44
|
- bundle exec rubocop -P -E .
|
45
45
|
parallel:
|
46
46
|
matrix:
|
47
|
-
- RUBY_VERSION: ['
|
47
|
+
- RUBY_VERSION: ['3.0', '3.1', '3.2']
|
48
48
|
|
49
49
|
test:rufo:
|
50
50
|
extends: .default
|
@@ -53,7 +53,7 @@ test:rufo:
|
|
53
53
|
- bundle exec rufo --check .
|
54
54
|
parallel:
|
55
55
|
matrix:
|
56
|
-
- RUBY_VERSION: ['
|
56
|
+
- RUBY_VERSION: ['3.0', '3.1', '3.2']
|
57
57
|
|
58
58
|
include:
|
59
59
|
- template: Security/Dependency-Scanning.gitlab-ci.yml
|
data/.rubocop.yml
CHANGED
@@ -27,6 +27,8 @@ RSpec/FilePath:
|
|
27
27
|
|
28
28
|
Style/HashSyntax:
|
29
29
|
EnforcedStyle: ruby19_no_mixed_keys
|
30
|
+
# Introduced in Ruby 3.1. Disable for now.
|
31
|
+
EnforcedShorthandSyntax: never
|
30
32
|
|
31
33
|
# To respect rufo formatting
|
32
34
|
Style/StringLiterals:
|
@@ -36,6 +38,10 @@ Style/StringLiterals:
|
|
36
38
|
Style/TrailingCommaInHashLiteral:
|
37
39
|
EnforcedStyleForMultiline: consistent_comma
|
38
40
|
|
41
|
+
# To respect rufo formatting
|
42
|
+
Style/TrailingCommaInArguments:
|
43
|
+
Enabled: false
|
44
|
+
|
39
45
|
# To respect rufo formatting
|
40
46
|
Layout/MultilineOperationIndentation:
|
41
47
|
Enabled: false
|
@@ -134,7 +134,7 @@ module Danger
|
|
134
134
|
def critical_checks
|
135
135
|
check_result = ChangelogCheckResult.empty
|
136
136
|
|
137
|
-
check_result.
|
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
140
|
check_result.warning(IF_REVERT_MR_TEXT) if helper.revert_mr?
|
@@ -120,6 +120,10 @@ module Danger
|
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
123
|
+
def warnings
|
124
|
+
@warnings ||= []
|
125
|
+
end
|
126
|
+
|
123
127
|
private
|
124
128
|
|
125
129
|
def spin_for_approval_rule?(rule)
|
@@ -258,16 +262,18 @@ module Danger
|
|
258
262
|
#
|
259
263
|
# @param [String] url
|
260
264
|
#
|
261
|
-
# @return [Hash, Array]
|
265
|
+
# @return [Hash, Array, NilClass]
|
262
266
|
def http_get_json(url)
|
263
267
|
rsp = Net::HTTP.get_response(URI.parse(url))
|
264
268
|
|
265
269
|
if rsp.is_a?(Net::HTTPRedirection)
|
266
|
-
|
270
|
+
warnings << "Redirection detected. Stopping."
|
271
|
+
return nil
|
267
272
|
end
|
268
273
|
|
269
274
|
unless rsp.is_a?(Net::HTTPOK)
|
270
|
-
|
275
|
+
warnings << "HTTPError: Failed to read #{url}: #{rsp.code}."
|
276
|
+
return nil
|
271
277
|
end
|
272
278
|
|
273
279
|
JSON.parse(rsp.body)
|
@@ -279,10 +285,11 @@ module Danger
|
|
279
285
|
# @return [Array<Gitlab::Dangerfiles::Teammate>]
|
280
286
|
def company_members
|
281
287
|
@company_members ||= begin
|
282
|
-
data = http_get_json(ROULETTE_DATA_URL)
|
288
|
+
data = http_get_json(ROULETTE_DATA_URL) || []
|
283
289
|
data.map { |hash| Gitlab::Dangerfiles::Teammate.new(hash) }
|
284
290
|
rescue JSON::ParserError
|
285
|
-
|
291
|
+
warnings << "Failed to parse JSON response from #{ROULETTE_DATA_URL}"
|
292
|
+
[]
|
286
293
|
end
|
287
294
|
end
|
288
295
|
|
@@ -39,6 +39,11 @@ TABLE_HEADER_WITHOUT_CATEGORIES = <<MARKDOWN
|
|
39
39
|
| -------- | ---------- |
|
40
40
|
MARKDOWN
|
41
41
|
|
42
|
+
WARNING_MESSAGE = <<MARKDOWN
|
43
|
+
⚠ Failed to retrieve information ⚠
|
44
|
+
%{warnings}
|
45
|
+
MARKDOWN
|
46
|
+
|
42
47
|
OPTIONAL_REVIEW_TEMPLATE = '%{role} review is optional'
|
43
48
|
NOT_AVAILABLE_TEMPLATE = 'No %{role} available'
|
44
49
|
|
@@ -69,6 +74,12 @@ def markdown_row_for_spins(category, spins_array, show_category_column:)
|
|
69
74
|
row
|
70
75
|
end
|
71
76
|
|
77
|
+
def warning_list(roulette)
|
78
|
+
return unless roulette.warnings.any?
|
79
|
+
|
80
|
+
roulette.warnings.map { |warning| "* #{warning}" }.join("\n")
|
81
|
+
end
|
82
|
+
|
72
83
|
changes = helper.changes_by_category
|
73
84
|
|
74
85
|
# Replicating label based categories from:
|
@@ -101,5 +112,10 @@ if changes.any?
|
|
101
112
|
table_header = show_category_column ? TABLE_HEADER_WITH_CATEGORIES : TABLE_HEADER_WITHOUT_CATEGORIES
|
102
113
|
|
103
114
|
markdown(MESSAGE)
|
115
|
+
|
116
|
+
if (warnings = warning_list(roulette))
|
117
|
+
markdown(format(WARNING_MESSAGE, warnings: warnings))
|
118
|
+
end
|
119
|
+
|
104
120
|
markdown(TABLE_MARKDOWN + table_header + rows.join("\n")) unless rows.empty?
|
105
121
|
end
|
@@ -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
|
-
|
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/
|
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"]
|
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.
|
4
|
+
version: 3.7.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-
|
11
|
+
date: 2023-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|