Skip to content
Snippets Groups Projects
Unverified Commit ced15dd5 authored by Yorick Peterse's avatar Yorick Peterse
Browse files

Tweak the Danger settings for DB changes

Instead of only checking for migrations, we now check for a variety of
files and directories that require a database review. We also include
some steps on how to make sure changes are reviewed.
parent ab87e7ba
No related branches found
No related tags found
1 merge request!10495Merge Requests - Assignee
# frozen_string_literal: true
# rubocop:disable Style/SignalException
 
ANY_MIGRATIONS_REGEX = %r{\A(ee/)?(db/(geo/)?(post_)?migrate)/}
# 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
SCHEMA_NOT_UPDATED_MESSAGE = <<~MSG
**New %<migrations>s added but %<schema>s wasn't updated.**
 
Loading
Loading
@@ -9,19 +26,28 @@ updated too (unless the migration isn't changing the DB schema
and isn't the most recent one).
MSG
 
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
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?
 
any_migration_created = !git.added_files.grep(ANY_MIGRATIONS_REGEX).empty?
any_migration_updated = !git.modified_files.grep(ANY_MIGRATIONS_REGEX).empty?
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 any_migration_created || any_migration_updated || non_geo_db_schema_updated || geo_db_schema_updated
message "Please make sure to ask a Database engineer for a review."
end
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
Loading
Loading
@@ -29,3 +55,30 @@ 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"))
end
db_paths_to_review = database_paths_requiring_review(all_files)
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
The following files require a review from the Database Team:
* #{db_paths_to_review.join("\n* ")}
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment