# frozen_string_literal: true SCHEMA_NOT_UPDATED_MESSAGE_SHORT = "New %s added but %s wasn't updated" SCHEMA_NOT_UPDATED_MESSAGE_FULL = <<~MSG **#{SCHEMA_NOT_UPDATED_MESSAGE_SHORT}** Usually, when adding new %s, %s should be updated too (unless the migration isn't changing the DB schema and isn't the most recent one). MSG DB_MESSAGE = <<~MSG This merge request requires a database review. To make sure these changes are reviewed, take the following steps: 1. Ensure the merge request has ~database and ~"database::review pending" labels. If the merge request modifies database files, Danger will do this for you. 1. Prepare your MR for database review according to the [docs](https://docs.gitlab.com/ee/development/database_review.html#how-to-prepare-the-merge-request-for-a-database-review). 1. Assign and mention the database reviewer suggested by Reviewer Roulette. MSG DB_FILES_MESSAGE = <<~MSG The following files require a review from the Database team: MSG DB_REMOVE_MESSAGE = <<~MSG If you no longer require a database review, you can remove this suggestion by removing the ~database label and re-running the [`danger-review` job](#{ENV['CI_JOB_URL']}). MSG DB_MIGRATION_TESTING_REQUIRED_MESSAGE = <<~MSG 1. Kick off the `db:gitlabcom-database-testing` manual job. This job can also be used before requesting review to test your migrations against production data. MSG DATABASE_APPROVED_LABEL = 'database::approved' non_geo_db_schema_updated = !git.modified_files.grep(%r{\Adb/structure\.sql}).empty? geo_db_schema_updated = !git.modified_files.grep(%r{\Aee/db/geo/structure\.sql}).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? format_str = helper.ci? ? SCHEMA_NOT_UPDATED_MESSAGE_FULL : SCHEMA_NOT_UPDATED_MESSAGE_SHORT if non_geo_migration_created && !non_geo_db_schema_updated warn format(format_str, migrations: 'migrations', schema: helper.html_link("db/structure.sql")) end if geo_migration_created && !geo_db_schema_updated warn format(format_str, migrations: 'Geo migrations', schema: helper.html_link("ee/db/geo/structure.sql")) end return unless helper.ci? return if helper.mr_labels.include?(DATABASE_APPROVED_LABEL) db_paths_to_review = helper.changes_by_category[:database] if helper.mr_labels.include?('database') || db_paths_to_review.any? message 'This merge request adds or changes files that require a ' \ 'review from the [Database team](https://gitlab.com/groups/gl-database/-/group_members).' markdown(DB_MESSAGE) markdown(DB_MIGRATION_TESTING_REQUIRED_MESSAGE) if non_geo_migration_created if db_paths_to_review.any? markdown(DB_FILES_MESSAGE + helper.markdown_list(db_paths_to_review.to_set)) else markdown(DB_REMOVE_MESSAGE) end unless helper.has_scoped_label_with_scope?("database") helper.labels_to_add << 'database::review pending' end end