diff --git a/Dangerfile b/Dangerfile index 10caacff4c4f6ecc0d917307a53e80c5f789c056..469e77b2514540453fe21f7ee2d0b8c1e958992c 100644 --- a/Dangerfile +++ b/Dangerfile @@ -1,3 +1,4 @@ +danger.import_plugin('danger/plugins/helper.rb') danger.import_dangerfile(path: 'danger/metadata') danger.import_dangerfile(path: 'danger/changes_size') danger.import_dangerfile(path: 'danger/changelog') diff --git a/danger/database/Dangerfile b/danger/database/Dangerfile index ad5f1c1e0f36b4752ad7b2d286a6ec381ada6baf..38ccbd94edbee9ed0aaa8a1e454dd57008a0a9e9 100644 --- a/danger/database/Dangerfile +++ b/danger/database/Dangerfile @@ -39,8 +39,6 @@ def database_paths_requiring_review(files) to_review end -all_files = git.added_files + git.modified_files - non_geo_db_schema_updated = !git.modified_files.grep(%r{\Adb/schema\.rb}).empty? geo_db_schema_updated = !git.modified_files.grep(%r{\Aee/db/geo/schema\.rb}).empty? @@ -55,7 +53,7 @@ if geo_migration_created && !geo_db_schema_updated warn format(SCHEMA_NOT_UPDATED_MESSAGE, migrations: 'Geo migrations', schema: gitlab.html_link("ee/db/geo/schema.rb")) end -db_paths_to_review = database_paths_requiring_review(all_files) +db_paths_to_review = database_paths_requiring_review(helper.all_changed_files) unless db_paths_to_review.empty? message 'This merge request adds or changes files that require a ' \ diff --git a/danger/documentation/Dangerfile b/danger/documentation/Dangerfile index d65bec123a92b260b219f9ccd04f2aad27c127d9..fe819ee250c303bd17e4675aaca6d0042eab4f32 100644 --- a/danger/documentation/Dangerfile +++ b/danger/documentation/Dangerfile @@ -11,9 +11,7 @@ def docs_paths_requiring_review(files) end end -all_files = git.added_files + git.modified_files - -docs_paths_to_review = docs_paths_requiring_review(all_files) +docs_paths_to_review = docs_paths_requiring_review(helper.all_changed_files) unless docs_paths_to_review.empty? message 'This merge request adds or changes files that require a ' \ diff --git a/danger/eslint/Dangerfile b/danger/eslint/Dangerfile index f78488cfd0a9549d8f451c1f907520bc86acd33e..4916cacfd7e355066d13ecb7e4baa14943d29672 100644 --- a/danger/eslint/Dangerfile +++ b/danger/eslint/Dangerfile @@ -7,7 +7,7 @@ def get_eslint_files(files) end end -eslint_candidates = get_eslint_files(git.added_files + git.modified_files) +eslint_candidates = get_eslint_files(helper.all_changed_files) return if eslint_candidates.empty? diff --git a/danger/plugins/helper.rb b/danger/plugins/helper.rb new file mode 100644 index 0000000000000000000000000000000000000000..f4eb91192662ceeb014818d301d856288eeff3db --- /dev/null +++ b/danger/plugins/helper.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +module Danger + # Common helper functions for our danger scripts + # If we find ourselves repeating code in our danger files, we might as well put them in here. + class Helper < Plugin + # Returns a list of all files that have been added, modified or renamed. + # `git.modified_files` might contain paths that already have been renamed, + # so we need to remove them from the list. + # + # Considering these changes: + # + # - A new_file.rb + # - D deleted_file.rb + # - M modified_file.rb + # - R renamed_file_before.rb -> renamed_file_after.rb + # + # it will return + # ``` + # [ 'new_file.rb', 'modified_file.rb', 'renamed_file_after.rb' ] + # ``` + # + # @return [Array<String>] + def all_changed_files + Set.new + .merge(git.added_files.to_a) + .merge(git.modified_files.to_a) + .merge(git.renamed_files.map { |x| x[:after] }) + .subtract(git.renamed_files.map { |x| x[:before] }) + .to_a + .sort + end + end +end diff --git a/danger/prettier/Dangerfile b/danger/prettier/Dangerfile index 86f9f6af475a9852f226082d250a5957a5d3d311..37c4b78a213bd33fae0fc6f25c40fef44c044795 100644 --- a/danger/prettier/Dangerfile +++ b/danger/prettier/Dangerfile @@ -6,7 +6,7 @@ def get_prettier_files(files) end end -prettier_candidates = get_prettier_files(git.added_files + git.modified_files) +prettier_candidates = get_prettier_files(helper.all_changed_files) return if prettier_candidates.empty?