summaryrefslogtreecommitdiff
path: root/tooling
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-02-22 18:07:44 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2023-02-22 18:07:44 +0000
commitd0f16d56f3716d4a60027eb261f12080094f8db3 (patch)
treef9ecf9f4bda6d761f612bc4a5efb701b7c6b3d2d /tooling
parent68aa32736b50c3609348f3bf740b81a2dfd1fb25 (diff)
downloadgitlab-ce-d0f16d56f3716d4a60027eb261f12080094f8db3.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'tooling')
-rw-r--r--tooling/danger/sidekiq_args.rb59
1 files changed, 59 insertions, 0 deletions
diff --git a/tooling/danger/sidekiq_args.rb b/tooling/danger/sidekiq_args.rb
new file mode 100644
index 00000000000..d06bb92ca6d
--- /dev/null
+++ b/tooling/danger/sidekiq_args.rb
@@ -0,0 +1,59 @@
+# frozen_string_literal: true
+
+module Tooling
+ module Danger
+ module SidekiqArgs
+ include ::Danger::Helpers
+
+ WORKER_FILES_REGEX = 'app/workers'
+ EE_PREFIX = 'ee/'
+ DEF_PERFORM = "def perform"
+ DEF_PERFORM_REGEX = /[\s+-]*def perform\((.*)\)/
+ BEFORE_DEF_PERFORM_REGEX = /^[\s-]*def perform\b/
+ AFTER_DEF_PERFORM_REGEX = /^[\s+]*def perform\b/
+
+ SUGGEST_MR_COMMENT = <<~SUGGEST_COMMENT
+ Please follow the [sidekiq development guidelines](https://docs.gitlab.com/ee/development/sidekiq/compatibility_across_updates.html#changing-the-arguments-for-a-worker) when changing sidekiq worker arguments.
+ SUGGEST_COMMENT
+
+ def changed_worker_files(ee: :include)
+ changed_files = helper.all_changed_files
+ folder_prefix =
+ case ee
+ when :include
+ "(#{EE_PREFIX})?"
+ when :only
+ EE_PREFIX
+ when :exclude
+ nil
+ end
+
+ changed_files.grep(%r{\A#{folder_prefix}#{WORKER_FILES_REGEX}})
+ end
+
+ def args_changed?(diff)
+ # Find the "before" and "after" versions of the perform method definition
+ before_def_perform = diff.find { |line| BEFORE_DEF_PERFORM_REGEX.match?(line) }
+ after_def_perform = diff.find { |line| AFTER_DEF_PERFORM_REGEX.match?(line) }
+
+ # args are not changed if there is no before or after def perform method
+ return false unless before_def_perform && after_def_perform
+
+ # Extract the perform method arguments from the "before" and "after" versions
+ before_args, after_args = diff.flat_map { |line| line.scan(DEF_PERFORM_REGEX) }
+
+ before_args != after_args
+ end
+
+ def add_comment_for_matched_line(filename)
+ diff = helper.changed_lines(filename)
+ return unless args_changed?(diff)
+
+ file_lines = project_helper.file_lines(filename)
+
+ perform_method_line = file_lines.index { |line| line.include?(DEF_PERFORM) }
+ markdown(format(SUGGEST_MR_COMMENT), file: filename, line: perform_method_line.succ)
+ end
+ end
+ end
+end