From 7948e0ef58e23336c4698d973b149886831755a4 Mon Sep 17 00:00:00 2001 From: Andrew Jung <ajung@gitlab.com> Date: Thu, 28 Nov 2024 15:45:02 +0000 Subject: [PATCH] Revert "Merge branch '480172/add-danger-for-internal-users-change' into 'master'" This reverts merge request !171439 --- danger/internal_users/Dangerfile | 3 - danger/plugins/internal_users.rb | 9 - spec/tooling/danger/internal_users_spec.rb | 256 --------------------- tooling/danger/internal_users.rb | 110 --------- 4 files changed, 378 deletions(-) delete mode 100644 danger/internal_users/Dangerfile delete mode 100644 danger/plugins/internal_users.rb delete mode 100644 spec/tooling/danger/internal_users_spec.rb delete mode 100644 tooling/danger/internal_users.rb diff --git a/danger/internal_users/Dangerfile b/danger/internal_users/Dangerfile deleted file mode 100644 index c86353394008b..0000000000000 --- a/danger/internal_users/Dangerfile +++ /dev/null @@ -1,3 +0,0 @@ -# frozen_string_literal: true - -internal_users.add_comment_for_internal_users_changes diff --git a/danger/plugins/internal_users.rb b/danger/plugins/internal_users.rb deleted file mode 100644 index 5506b026c5cbc..0000000000000 --- a/danger/plugins/internal_users.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: true - -require_relative '../../tooling/danger/internal_users' - -module Danger - class InternalUsers < Plugin - include Tooling::Danger::InternalUsers - end -end diff --git a/spec/tooling/danger/internal_users_spec.rb b/spec/tooling/danger/internal_users_spec.rb deleted file mode 100644 index 8e6b6dab3a4b4..0000000000000 --- a/spec/tooling/danger/internal_users_spec.rb +++ /dev/null @@ -1,256 +0,0 @@ -# frozen_string_literal: true - -require 'fast_spec_helper' -require 'gitlab/dangerfiles/spec_helper' - -require_relative '../../../tooling/danger/internal_users' -require_relative '../../../tooling/danger/project_helper' - -RSpec.describe Tooling::Danger::InternalUsers, feature_category: :tooling do - include_context "with dangerfile" - - let(:fake_danger) { DangerSpecHelper.fake_danger.include(described_class) } - let(:fake_project_helper) { instance_double(Tooling::Danger::ProjectHelper) } - let(:file_path) { 'app/models/user.rb' } - let(:changed_lines) { [] } - let(:file_lines) { [] } - - subject(:helper) { fake_danger.new(helper: fake_helper) } - - before do - allow(helper).to receive(:project_helper).and_return(fake_project_helper) - allow(fake_helper).to receive(:all_changed_files).and_return([file_path]) - allow(fake_helper).to receive(:changed_lines).with(file_path).and_return(changed_lines) - allow(fake_project_helper).to receive(:file_lines).with(file_path).and_return(file_lines) - end - - describe '#add_comment_for_internal_users_changes' do - shared_examples 'no violations' do - it 'adds no comments' do - expect(helper).not_to receive(:markdown) - expect(helper).not_to receive(:warn) - - helper.add_comment_for_internal_users_changes - end - end - - shared_examples 'has violations' do - it 'adds file and MR level comments' do - expect(helper).to receive(:markdown).once - expect(helper).to receive(:warn).once - - helper.add_comment_for_internal_users_changes - end - end - - context 'when documentation is changed' do - before do - allow(fake_helper).to receive(:all_changed_files).and_return([described_class::DOCS_PATH]) - end - - include_examples 'no violations' - end - - context 'when method name is changed' do - let(:changed_lines) do - [ - '- def security_bot', - '+ def security_bot_v2' - ] - end - - let(:file_lines) { [' def security_bot_v2'] } - - include_examples 'has violations' - end - - context 'when method body is changed' do - let(:changed_lines) do - [ - ' def security_bot', - '+ super', - ' end' - ] - end - - let(:file_lines) do - [ - 'def security_bot', - ' super', - 'end' - ] - end - - include_examples 'has violations' - end - - context 'when bot module is referenced' do - let(:changed_lines) do - [ - '+ Users::Internal.security_bot' - ] - end - - let(:file_lines) { [' Users::Internal.security_bot'] } - - include_examples 'has violations' - end - - context 'when bot symbol is used' do - let(:changed_lines) do - [ - '+ user_type: :security_bot' - ] - end - - let(:file_lines) { [' user_type: :security_bot'] } - - include_examples 'has violations' - end - - context 'when changes are unrelated' do - let(:changed_lines) do - [ - '+ user.name = "Regular User"' - ] - end - - let(:file_lines) { [' user.name = "Regular User"'] } - - include_examples 'no violations' - end - - context 'when changing lines inside a bot method definition' do - let(:changed_lines) do - [ - ' user.name = "Bot Name"' - ] - end - - let(:file_lines) do - [ - 'def security_bot', - ' user.name = "Bot Name"', - 'end' - ] - end - - include_examples 'has violations' - end - - context 'when changing lines outside any bot method definition' do - let(:changed_lines) do - [ - ' user.name = "Regular Name"' - ] - end - - let(:file_lines) do - [ - 'def regular_method', - ' user.name = "Regular Name"', - 'end' - ] - end - - include_examples 'no violations' - end - - context 'when bot method spans multiple ends' do - let(:changed_lines) do - [ - ' user.tap do |u|', - ' u.name = "Bot Name"', - ' end' - ] - end - - let(:file_lines) do - [ - 'def security_bot', - ' user.tap do |u|', - ' u.name = "Bot Name"', - ' end', - 'end' - ] - end - - include_examples 'has violations' - end - - context 'when modifying code between bot methods' do - let(:changed_lines) do - [ - ' user.name = "Regular Name"' - ] - end - - let(:file_lines) do - [ - 'def security_bot', - ' # bot code', - 'end', - ' user.name = "Regular Name"', - 'def alert_bot', - ' # bot code', - 'end' - ] - end - - include_examples 'no violations' - end - end - - describe '#file_has_violations?' do - context 'when tracking bot method boundaries' do - let(:changed_lines) { [' some_code'] } - - it 'correctly tracks entering and exiting bot methods' do - allow(fake_project_helper).to receive(:file_lines).and_return([ - 'def security_bot', - ' some_code', - 'end' - ]) - - expect(helper.send(:file_has_violations?, file_path)).to be true - - allow(fake_project_helper).to receive(:file_lines).and_return([ - 'def security_bot', - ' other_code', - 'end', - ' some_code' - ]) - - expect(helper.send(:file_has_violations?, file_path)).to be false - end - - it 'handles nested end keywords' do - allow(fake_project_helper).to receive(:file_lines).and_return([ - 'def security_bot', - ' some_code', - ' if true', - ' some_code', - ' end', - 'end' - ]) - - expect(helper.send(:file_has_violations?, file_path)).to be true - end - - it 'processes all lines in method body' do - lines = [ - 'def security_bot', - ' line1', - ' line2', - ' line3', - 'end' - ] - - allow(fake_project_helper).to receive(:file_lines).and_return(lines) - allow(fake_helper).to receive(:changed_lines).and_return([' line2']) - - expect(helper.send(:file_has_violations?, file_path)).to be true - end - end - end -end diff --git a/tooling/danger/internal_users.rb b/tooling/danger/internal_users.rb deleted file mode 100644 index 082fe4391ec80..0000000000000 --- a/tooling/danger/internal_users.rb +++ /dev/null @@ -1,110 +0,0 @@ -# frozen_string_literal: true - -require_relative 'suggestor' - -module Tooling - module Danger - module InternalUsers - include ::Tooling::Danger::Suggestor - - DOCS_PATH = 'doc/administration/internal_users.md' - - INLINE_COMMENT = - <<~MESSAGE.freeze - This line modifies internal user behavior or references an internal bot user. - If this introduces new capabilities or changes existing behavior, please update the [internal users documentation](#{DOCS_PATH}). - - This comment will only appear once per file. - MESSAGE - - MR_LEVEL_COMMENT = - <<~SUGGEST_COMMENT.freeze - This MR changes internal user behavior or usage. - Please ensure [internal users documentation](#{DOCS_PATH}) is up to date. - - If this is not applicable, please ignore this message. - - Consider documenting: - - Any changes to internal user behavior or capabilities - - New use cases or integrations - - Changes in how bots may interact with GitLab and its features - SUGGEST_COMMENT - - BOT_METHODS = %w[ - support_bot - alert_bot - visual_review_bot - ghost - migration_bot - security_bot - automation_bot - security_policy_bot - admin_bot - suggested_reviewers_bot - llm_bot - placeholder - duo_code_review_bot - import_user - ].freeze - - BOT_NAMES = BOT_METHODS.join('|') - - BOT_METHOD_DEF_REGEX = /^\s*def\s+(?:self\.)?\s*(#{BOT_NAMES})(?!\w)/ - BOT_MODULE_CALL_REGEX = /^\s*Users::Internal\.(?:#{BOT_NAMES})(?!\w)/ - BOT_SYMBOL_TYPE_REGEX = /^\s*(?!#|")[^#"]*:(?:#{BOT_NAMES})(?!\w)/ - - def add_comment_for_internal_users_changes - return if helper.all_changed_files.include?(DOCS_PATH) - - violations_found = false - - helper.all_changed_files.each do |filename| - next unless file_has_violations?(filename) - - violations_found = true - markdown(INLINE_COMMENT, file: filename) - end - - warn(MR_LEVEL_COMMENT) if violations_found - end - - private - - def file_has_violations?(filename) - changed_lines = helper.changed_lines(filename) - file_lines = project_helper.file_lines(filename) - - in_bot_method = false - has_violation = false - - changed_lines.each do |line| - clean_line = line.delete_prefix('+').delete_prefix('-').strip - next unless clean_line.match?(BOT_METHOD_DEF_REGEX) || - clean_line.match?(BOT_MODULE_CALL_REGEX) || - clean_line.match?(BOT_SYMBOL_TYPE_REGEX) - - has_violation = true - break - end - - return has_violation if has_violation - - file_lines.each_with_index do |line, _| - if line.match?(BOT_METHOD_DEF_REGEX) - in_bot_method = true - elsif line.strip == 'end' - in_bot_method = false - end - - next unless in_bot_method - next unless changed_lines.any? { |cl| cl.delete_prefix('+').delete_prefix('-').strip == line.strip } - - has_violation = true - break - end - - has_violation - end - end - end -end -- GitLab