gitlab-dangerfiles 3.8.0 → 3.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fcee2fd2dd96522a7b1a5d1f906bc7fccfa28c9d6e9f61d6843c1fcd22dee884
4
- data.tar.gz: c433e7fd8d3fd698c1eb71e5291f24a191ee2c4a86d376bae6f18b0735352f2a
3
+ metadata.gz: ad2ad158af390c0b6b52fdd86927b4dd0a6118b7b2eca3ad60aaa88ac40b840a
4
+ data.tar.gz: 2872e01e85bf7190e2a3fd4cab71868f2e4924234443797e7479a3ab03497120
5
5
  SHA512:
6
- metadata.gz: c014e0cf3905380549a0f088c5685b7e1251643f5bbdd3e5362e4cf3c0ca0c0e4a1456599db66eabd3dad006547b70010716a2ab5b9aa2318e573ced7bd3680d
7
- data.tar.gz: 0311fcec0f9cd30684470739798c5ab9c296d2c3cfb22d7e73a98f2c644b6db373edd752587a134199a366372b877bca4d3f198aed89f133483db45a2d5979e6
6
+ metadata.gz: 7dccc5481318999e83be3a9535983ebbf69d731d5394cf66543df0fd77bf7e274d1b012255c9582a503caae5248956aa2441af1b9ad6ffddf6c5bc2bc730013b
7
+ data.tar.gz: 5d217f45be9fb3c68032bbffd9a7eee4eb4cdb4056200c8dabdaf8255aa084a28ff3cd3ac74a5fa2588634607c4a5d23ffc6d58cc709e9343296112b6b3457b3
data/README.md CHANGED
@@ -218,17 +218,32 @@ danger-review:
218
218
  - bundle add gitlab-dangerfiles --version 3.1.0
219
219
  ```
220
220
 
221
- ## Rake tasks
221
+ ## Local Danger Rake task
222
222
 
223
- You can import this gem's Rake tasks by adding the following to your project's `Rakefile`:
223
+ You can run a Danger Rake task locally in a project to detect Danger errors before pushing commits to a remote
224
+ branch.
224
225
 
225
- ```ruby
226
- require 'gitlab-dangerfiles'
226
+ 1. [Install `gitlab-dangerfiles`](#installation) in your project.
227
+ 1. Add the following to your project's `Rakefile`:
228
+
229
+ ```ruby
230
+ require 'gitlab-dangerfiles'
231
+
232
+ Gitlab::Dangerfiles.load_tasks
233
+ ```
234
+
235
+ To run the Danger Rake task in a project that has `master` as the default branch, run:
227
236
 
228
- Gitlab::Dangerfiles.load_tasks
237
+ ```shell
238
+ bundle exec rake danger_local
229
239
  ```
230
240
 
231
- That will add the `danger_local` Rake task that allows to run Danger locally.
241
+ To run the Danger Rake task in a project that doesn't have `master` as the default branch, you must set the
242
+ `DANGER_LOCAL_BASE` environment variable. For example, in a project with `main` as the default branch:
243
+
244
+ ```shell
245
+ DANGER_LOCAL_BASE="origin/main" bundle exec rake danger_local
246
+ ```
232
247
 
233
248
  ## Documentation
234
249
 
@@ -264,6 +279,12 @@ end
264
279
 
265
280
  See an [example](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/92580) for more details.
266
281
 
282
+ ## Contributing
283
+
284
+ Bug reports and merge requests are welcome at https://gitlab.com/gitlab-org/gitlab-dangerfiles. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://gitlab.com/gitlab-org/gitlab-dangerfiles/blob/master/CODE_OF_CONDUCT.md).
285
+
286
+ Make sure to include a changelog entry in your commit message and read the [changelog entries section](https://docs.gitlab.com/ee/development/changelog.html).
287
+
267
288
  ## Release
268
289
 
269
290
  [Automated gem release process](https://gitlab.com/gitlab-org/quality/pipeline-common#release-process) is used to release new version of `gitlab-dangerfiles` through [pipelines](https://gitlab.com/gitlab-org/ruby/gems/gitlab-dangerfiles/-/blob/4f33cf30cab84f7e27ca0cb9a7c0da3ecc675c11/.gitlab-ci.yml#L51), and this will:
@@ -272,24 +293,22 @@ See an [example](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/92580) fo
272
293
  - Add a release in the `gitlab-dangerfiles` project: https://gitlab.com/gitlab-org/ruby/gems/gitlab-dangerfiles/-/releases
273
294
  - Populate the release log with the API contents. For example: https://gitlab.com/api/v4/projects/19861191/repository/changelog?version=3.4.4
274
295
 
296
+ We follow this release process in a separate merge request from the one that introduced the changes. The release merge request should just contain a version bump.
297
+
275
298
  ### Before release
276
299
 
277
- Make sure to include a changelog entry in your commit message and read the [changelog entries section](https://docs.gitlab.com/ee/development/changelog.html).
300
+ Changes merged since the last release should have had changelog entries (see [Contributing](#contributing)).
278
301
 
279
- If you forget to set the changelog entry in your commit messages, you can also edit the release notes after it's being released.
302
+ If changelog entries are missing, you can also edit the release notes after it's being released.
280
303
 
281
304
  ### Steps to release
282
305
 
283
- Use a `Release` merge request template and create a merge requet to update the version number in `version.rb`, and get the merge request merged by a maintainer.
306
+ Use a `Release` merge request template and create a merge request to update the version number in `version.rb`, and get the merge request merged by a maintainer.
284
307
 
285
308
  This will then be packaged into a gem and pushed to [rubygems.org](https://rubygems.org) by the CI/CD.
286
309
 
287
310
  For example: [Bump version to 3.4.3](https://gitlab.com/gitlab-org/ruby/gems/gitlab-dangerfiles/-/merge_requests/149).
288
311
 
289
- ## Contributing
290
-
291
- Bug reports and merge requests are welcome at https://gitlab.com/gitlab-org/gitlab-dangerfiles. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://gitlab.com/gitlab-org/gitlab-dangerfiles/blob/master/CODE_OF_CONDUCT.md).
292
-
293
312
  ## License
294
313
 
295
314
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -25,9 +25,9 @@ module Danger
25
25
  engineering_productivity: '~"Engineering Productivity" for CI, Danger',
26
26
  tooling: '~"maintenance::workflow" / ~"maintenance::pipelines" for CI, Danger',
27
27
  ci_template: '~"ci::templates"',
28
- product_intelligence: '~"product intelligence"',
29
- integrations_be: '~"group::integrations" (backend)',
30
- integrations_fe: '~"group::integrations" (frontend)',
28
+ analytics_instrumentation: '~"analytics instrumentation"',
29
+ import_integrate_be: '~"group::import and integrate" (backend)',
30
+ import_integrate_fe: '~"group::import and integrate" (frontend)',
31
31
  "Authentication and Authorization": '~"group::authentication and authorization"',
32
32
  Compliance: '~"group::compliance"',
33
33
  }.freeze
@@ -35,6 +35,8 @@ module Danger
35
35
 
36
36
  GITLAB_ORG_GROUP_ID = "9970"
37
37
 
38
+ STABLE_BRANCH_REGEX = %r{\A(?<version>\d+-\d+)-stable-ee\z}
39
+
38
40
  # Allows to set specific rule's configuration by passing a block.
39
41
  #
40
42
  # @yield [c] Yield a Gitlab::Dangerfiles::Config object
@@ -369,6 +371,10 @@ module Danger
369
371
  mr_web_url.include?("/gitlab-org/security/")
370
372
  end
371
373
 
374
+ def stable_branch_mr?
375
+ !!mr_target_branch.match(STABLE_BRANCH_REGEX) && !security_mr?
376
+ end
377
+
372
378
  # @return [Boolean] whether a MR title includes "cherry-pick" or not.
373
379
  def cherry_pick_mr?
374
380
  Gitlab::Dangerfiles::TitleLinting.has_cherry_pick_flag?(mr_title)
@@ -449,11 +455,16 @@ module Danger
449
455
  all_changed_files.grep(regex)
450
456
  end
451
457
 
452
- # @return [Array<String>] the group labels (i.e. +"group::*"+) set on the MR.
458
+ # @return [String] the group label (i.e. +"group::*"+) set on the MR.
453
459
  def group_label
454
460
  mr_labels.find { |label| label.start_with?("group::") }
455
461
  end
456
462
 
463
+ # @return [String] the stage label (i.e. +"devops::*"+) set on the MR.
464
+ def stage_label
465
+ mr_labels.find { |label| label.start_with?("devops::") }
466
+ end
467
+
457
468
  # Accessor for storing labels to add so that other rules can check if labels will be added after Danger
458
469
  # has evaluated all the rules.
459
470
  # For instance, a rule might require a specific label to be set, but another rule could add this label
@@ -52,7 +52,7 @@ module Danger
52
52
  def spin(project = nil, categories = [:none], timezone_experiment: false)
53
53
  project = (project || config_project_name).downcase
54
54
  categories = categories.map { |category| category&.downcase || :none }
55
- categories.reject! { |category| integrations_reject_category?(category, project) }
55
+ categories.reject! { |category| import_and_integrate_reject_category?(category, project) }
56
56
 
57
57
  spins = categories.sort_by(&:to_s).map do |category|
58
58
  including_timezone = INCLUDE_TIMEZONE_FOR_CATEGORY.fetch(category, timezone_experiment)
@@ -89,14 +89,14 @@ module Danger
89
89
  # Fetch an already picked backend maintainer, or pick one otherwise
90
90
  spin.maintainer = backend_spin&.maintainer || spin_for_category(project, :backend, timezone_experiment: including_timezone).maintainer
91
91
  end
92
- when :product_intelligence
92
+ when :analytics_instrumentation
93
93
  spin.optional_role = :maintainer
94
94
 
95
95
  if spin.maintainer.nil?
96
96
  # Fetch an already picked maintainer, or pick one otherwise
97
97
  spin.maintainer = backend_spin&.maintainer || frontend_spin&.maintainer || spin_for_category(project, :backend, timezone_experiment: including_timezone).maintainer
98
98
  end
99
- when :integrations_be, :integrations_fe
99
+ when :import_integrate_be, :import_integrate_fe
100
100
  spin.optional_role = :maintainer
101
101
  when :ux
102
102
  spin.optional_role = :maintainer
@@ -173,10 +173,10 @@ module Danger
173
173
 
174
174
  # @param [String] category name
175
175
  # @return [Boolean]
176
- def integrations_reject_category?(category, project)
177
- # Reject integrations categories if the MR author has reviewing abilities for the category.
178
- team_mr_author&.integrations_be?(project, category, helper.mr_labels) ||
179
- team_mr_author&.integrations_fe?(project, category, helper.mr_labels)
176
+ def import_and_integrate_reject_category?(category, project)
177
+ # Reject Import and Integrate categories if the MR author has reviewing abilities for the category.
178
+ team_mr_author&.import_integrate_be?(project, category, helper.mr_labels) ||
179
+ team_mr_author&.import_integrate_fe?(project, category, helper.mr_labels)
180
180
  end
181
181
 
182
182
  def random
@@ -267,12 +267,17 @@ module Danger
267
267
  rsp = Net::HTTP.get_response(URI.parse(url))
268
268
 
269
269
  if rsp.is_a?(Net::HTTPRedirection)
270
- warnings << "Redirection detected. Stopping."
270
+ if (uri = URI.parse(rsp.header["location"]))
271
+ uri.query = nil
272
+ end
273
+
274
+ warnings << "Redirection detected: #{uri}."
271
275
  return nil
272
276
  end
273
277
 
274
278
  unless rsp.is_a?(Net::HTTPOK)
275
- warnings << "HTTPError: Failed to read #{url}: #{rsp.code}."
279
+ message = rsp.message[0, 30]
280
+ warnings << "HTTPError: Failed to read #{url}: #{rsp.code} #{message}."
276
281
  return nil
277
282
  end
278
283
 
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ return if helper.stable_branch_mr?
4
+
3
5
  thresholds = helper.config.code_size_thresholds
4
6
  lines_changed = git.lines_of_code
5
7
 
@@ -5,7 +5,3 @@ fail("Merge request description is too short. Please provide a proper merge requ
5
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
6
 
7
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,11 @@ categories << :database if helper.mr_labels.include?('database')
92
92
  # Ensure to spin for UX reviewer when ~UX is applied (e.g. to review changes to the UI) except when it's from wider community contribution where we want to assign from the corresponding group
93
93
  categories << :ux if helper.mr_labels.include?('UX') && !helper.mr_labels.include?('Community contribution')
94
94
 
95
- # Ensure to spin for Product Intelligence reviewer when ~"product intelligence::review pending" is applied
96
- categories << :product_intelligence if helper.mr_labels.include?("product intelligence::review pending")
95
+ # Ensure to spin for Analytics Instrumentation reviewer when ~"analytics instrumentation::review pending" is applied
96
+ categories << :analytics_instrumentation if helper.mr_labels.include?("analytics instrumentation::review pending")
97
97
 
98
- # Skip Product intelligence reviews for growth experiment MRs
99
- categories.delete(:product_intelligence) if helper.mr_labels.include?("growth experiment")
98
+ # Skip Analytics Instrumentation reviews for growth experiment MRs
99
+ categories.delete(:analytics_instrumentation) if helper.mr_labels.include?("growth experiment")
100
100
 
101
101
  # Remove disabled categories
102
102
  categories.subtract(helper.config.disabled_roulette_categories)
@@ -14,8 +14,8 @@ module Gitlab
14
14
  none: None,
15
15
  test: Test,
16
16
  tooling: Tooling,
17
- integrations_be: IntegrationsBE,
18
- integrations_fe: IntegrationsFE,
17
+ import_integrate_be: ImportIntegrateBE,
18
+ import_integrate_fe: ImportIntegrateFE,
19
19
  ux: UX,
20
20
  }.freeze
21
21
  end
@@ -71,21 +71,21 @@ module Gitlab
71
71
  end
72
72
  end
73
73
 
74
- class IntegrationsBE < Category
74
+ class ImportIntegrateBE < Category
75
75
  private
76
76
 
77
77
  def has_particular_capability?(teammate)
78
78
  kind == :reviewer &&
79
- teammate.role.match?(/Backend Engineer.+Manage:Integrations/)
79
+ teammate.role.match?(/Backend Engineer.+Manage:Import and Integrate/)
80
80
  end
81
81
  end
82
82
 
83
- class IntegrationsFE < Category
83
+ class ImportIntegrateFE < Category
84
84
  private
85
85
 
86
86
  def has_particular_capability?(teammate)
87
87
  kind == :reviewer &&
88
- teammate.role.match?(/Frontend Engineer.+Manage:Integrations/)
88
+ teammate.role.match?(/Frontend Engineer.+Manage:Import and Integrate/)
89
89
  end
90
90
  end
91
91
 
@@ -55,14 +55,14 @@ module Gitlab
55
55
  has_capability?(project, category, :maintainer, labels)
56
56
  end
57
57
 
58
- def integrations_be?(project, category, labels)
59
- return false unless category == :integrations_be
58
+ def import_integrate_be?(project, category, labels)
59
+ return false unless category == :import_integrate_be
60
60
 
61
61
  has_capability?(project, category, :reviewer, labels)
62
62
  end
63
63
 
64
- def integrations_fe?(project, category, labels)
65
- return false unless category == :integrations_fe
64
+ def import_integrate_fe?(project, category, labels)
65
+ return false unless category == :import_integrate_fe
66
66
 
67
67
  has_capability?(project, category, :reviewer, labels)
68
68
  end
@@ -1,5 +1,5 @@
1
1
  module Gitlab
2
2
  module Dangerfiles
3
- VERSION = "3.8.0"
3
+ VERSION = "3.10.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: 3.8.0
4
+ version: 3.10.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-03-03 00:00:00.000000000 Z
11
+ date: 2023-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake