GitLab steht wegen Wartungsarbeiten am Montag, den 10. Mai, zwischen 17:00 und 19:00 Uhr nicht zur Verfügung.

Dangerfile 2.49 KB
Newer Older
1
# frozen_string_literal: true
2

3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
# All the files/directories that should be reviewed by the DB team.
DB_FILES = [
  'db/',
  'app/models/project_authorization.rb',
  'app/services/users/refresh_authorized_projects_service.rb',
  'lib/gitlab/background_migration.rb',
  'lib/gitlab/background_migration/',
  'lib/gitlab/database.rb',
  'lib/gitlab/database/',
  'lib/gitlab/github_import.rb',
  'lib/gitlab/github_import/',
  'lib/gitlab/sql/',
  'rubocop/cop/migration',
  'ee/db/',
  'ee/lib/gitlab/database/'
].freeze

20 21 22 23 24 25 26 27
SCHEMA_NOT_UPDATED_MESSAGE = <<~MSG
**New %<migrations>s added but %<schema>s wasn't updated.**

Usually, when adding new %<migrations>s, %<schema>s should be
updated too (unless the migration isn't changing the DB schema
and isn't the most recent one).
MSG

28 29 30 31 32 33 34 35 36 37 38 39 40 41
def database_paths_requiring_review(files)
  to_review = []

  files.each do |file|
    review = DB_FILES.any? do |pattern|
      file.start_with?(pattern)
    end

    to_review << file if review
  end

  to_review
end

42 43
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?
44 45 46 47 48 49 50 51 52 53

non_geo_migration_created = !git.added_files.grep(%r{\A(db/(post_)?migrate)/}).empty?
geo_migration_created = !git.added_files.grep(%r{\Aee/db/geo/(post_)?migrate/}).empty?

if non_geo_migration_created && !non_geo_db_schema_updated
  warn format(SCHEMA_NOT_UPDATED_MESSAGE, migrations: 'migrations', schema: gitlab.html_link("db/schema.rb"))
end

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"))
54
end
55

56
db_paths_to_review = database_paths_requiring_review(helper.all_changed_files)
57 58 59 60 61 62 63 64

unless db_paths_to_review.empty?
  message 'This merge request adds or changes files that require a ' \
    'review from the Database team.'

  markdown(<<~MARKDOWN.strip)
## Database Review

65
The following files require a review from the Database team:
66

67
* #{db_paths_to_review.map { |path| "`#{path}`" }.join("\n* ")}
68 69 70 71 72 73 74 75 76 77 78 79 80 81

To make sure these changes are reviewed, take the following steps:

1. Edit your merge request, and add `gl-database` to the list of Group
   approvers.
1. Mention `@gl-database` in a separate comment, and explain what needs to be
   reviewed by the team. Please don't mention the team until your changes are
   ready for review.
  MARKDOWN

  unless gitlab.mr_labels.include?('database')
    warn 'This merge request is missing the ~database label.'
  end
end