diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-03-20 15:19:03 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-03-20 15:19:03 +0000 |
commit | 14bd84b61276ef29b97d23642d698de769bacfd2 (patch) | |
tree | f9eba90140c1bd874211dea17750a0d422c04080 /tooling | |
parent | 891c388697b2db0d8ee0c8358a9bdbf6dc56d581 (diff) | |
download | gitlab-ce-14bd84b61276ef29b97d23642d698de769bacfd2.tar.gz |
Add latest changes from gitlab-org/gitlab@15-10-stable-eev15.10.0-rc42
Diffstat (limited to 'tooling')
-rw-r--r-- | tooling/danger/sidekiq_args.rb | 59 | ||||
-rw-r--r-- | tooling/danger/sidekiq_queues.rb | 2 | ||||
-rw-r--r-- | tooling/danger/specs.rb | 14 | ||||
-rw-r--r-- | tooling/lib/tooling/find_codeowners.rb | 6 | ||||
-rw-r--r-- | tooling/lib/tooling/kubernetes_client.rb | 26 | ||||
-rw-r--r-- | tooling/lib/tooling/mappings/js_to_system_specs_mappings.rb | 1 | ||||
-rw-r--r-- | tooling/lib/tooling/test_map_generator.rb | 4 |
7 files changed, 86 insertions, 26 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 diff --git a/tooling/danger/sidekiq_queues.rb b/tooling/danger/sidekiq_queues.rb index ae32b128682..bd6480fcba6 100644 --- a/tooling/danger/sidekiq_queues.rb +++ b/tooling/danger/sidekiq_queues.rb @@ -14,7 +14,7 @@ module Tooling def changed_queue_names @changed_queue_names ||= (new_queues.values_at(*old_queues.keys) - old_queues.values) - .compact.map { |queue| queue[:name] } + .compact.map { |queue| queue[:name] } # rubocop:disable Rails/Pluck end private diff --git a/tooling/danger/specs.rb b/tooling/danger/specs.rb index f95a798d53e..5359e71f8cc 100644 --- a/tooling/danger/specs.rb +++ b/tooling/danger/specs.rb @@ -90,15 +90,17 @@ module Tooling changed_lines.each_with_index do |changed_line, i| next unless changed_line =~ RSPEC_TOP_LEVEL_DESCRIBE_REGEX - next_line_in_file = file_lines[file_lines.find_index(changed_line.delete_prefix('+')) + 1] - - if changed_line.include?(FEATURE_CATEGORY_KEYWORD) || next_line_in_file.to_s.include?(FEATURE_CATEGORY_KEYWORD) - next - end - line_number = file_lines.find_index(changed_line.delete_prefix('+')) next unless line_number + # Get the top level RSpec.describe line and the next 5 lines + lines_to_check = file_lines[line_number, 5] + # Remove all the lines after the first one that ends in `do` + last_line_number_of_describe_declaration = lines_to_check.index { |line| line.end_with?(' do') } + lines_to_check = lines_to_check[0..last_line_number_of_describe_declaration] + + next if lines_to_check.any? { |line| line.include?(FEATURE_CATEGORY_KEYWORD) } + suggested_line = file_lines[line_number] markdown(comment(FEATURE_CATEGORY_SUGGESTION, suggested_line), file: filename, line: line_number.succ) diff --git a/tooling/lib/tooling/find_codeowners.rb b/tooling/lib/tooling/find_codeowners.rb index cc37d4db1ec..e542ab9967c 100644 --- a/tooling/lib/tooling/find_codeowners.rb +++ b/tooling/lib/tooling/find_codeowners.rb @@ -48,11 +48,7 @@ module Tooling def load_config config_path = "#{__dir__}/../../config/CODEOWNERS.yml" - if YAML.respond_to?(:safe_load_file) # Ruby 3.0+ - YAML.safe_load_file(config_path, symbolize_names: true) - else - YAML.safe_load(File.read(config_path), symbolize_names: true) - end + YAML.safe_load_file(config_path, symbolize_names: true) end # Copied and modified from ee/lib/gitlab/code_owners/file.rb diff --git a/tooling/lib/tooling/kubernetes_client.rb b/tooling/lib/tooling/kubernetes_client.rb index ab914db5777..27eb4c8151e 100644 --- a/tooling/lib/tooling/kubernetes_client.rb +++ b/tooling/lib/tooling/kubernetes_client.rb @@ -35,6 +35,19 @@ module Tooling delete_namespaces_by_exact_names(resource_names: namespaces, wait: wait) end + def delete_namespaces_by_exact_names(resource_names:, wait:) + command = [ + 'delete', + 'namespace', + '--now', + '--ignore-not-found', + %(--wait=#{wait}), + resource_names.join(' ') + ] + + run_command(command) + end + private def delete_by_selector(release_name:, wait:) @@ -74,19 +87,6 @@ module Tooling run_command(command) end - def delete_namespaces_by_exact_names(resource_names:, wait:) - command = [ - 'delete', - 'namespace', - '--now', - '--ignore-not-found', - %(--wait=#{wait}), - resource_names.join(' ') - ] - - run_command(command) - end - def delete_by_matching_name(release_name:) resource_names = raw_resource_names command = [ diff --git a/tooling/lib/tooling/mappings/js_to_system_specs_mappings.rb b/tooling/lib/tooling/mappings/js_to_system_specs_mappings.rb index 365e466011b..e78ce266a32 100644 --- a/tooling/lib/tooling/mappings/js_to_system_specs_mappings.rb +++ b/tooling/lib/tooling/mappings/js_to_system_specs_mappings.rb @@ -18,6 +18,7 @@ module Tooling @first_js_folder_extract_regexp = %r{ (?:.*/)? # Skips the GitLab edition (e.g. ee/, jh/) #{@js_base_folder}/ # Most likely app/assets/javascripts/ + (?:pages/)? # If under a pages folder, we capture the following folder ([\w-]*) # Captures the first folder }x end diff --git a/tooling/lib/tooling/test_map_generator.rb b/tooling/lib/tooling/test_map_generator.rb index f96f33ff074..88b4353b232 100644 --- a/tooling/lib/tooling/test_map_generator.rb +++ b/tooling/lib/tooling/test_map_generator.rb @@ -12,7 +12,9 @@ module Tooling def parse(yaml_files) Array(yaml_files).each do |yaml_file| data = File.read(yaml_file) - metadata, example_groups = data.split("---\n").reject(&:empty?).map { |yml| YAML.safe_load(yml, [Symbol]) } + metadata, example_groups = data.split("---\n").reject(&:empty?).map do |yml| + YAML.safe_load(yml, permitted_classes: [Symbol]) + end if example_groups.nil? puts "No examples in #{yaml_file}! Metadata: #{metadata}" |