Dangerfile 2.79 KB
Newer Older
1
# frozen_string_literal: true
2

3
SCHEMA_NOT_UPDATED_MESSAGE_SHORT = "New %<migrations>s added but %<schema>s wasn't updated"
Ash McKenzie's avatar
Ash McKenzie committed
4 5 6

SCHEMA_NOT_UPDATED_MESSAGE_FULL = <<~MSG
**#{SCHEMA_NOT_UPDATED_MESSAGE_SHORT}**
7 8 9 10 11 12

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

13 14 15 16 17 18
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.
Toon Claes's avatar
Toon Claes committed
19 20
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).
21 22 23 24 25 26 27
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

28 29 30 31 32
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

33 34
DATABASE_APPROVED_LABEL = 'database::approved'

Andreas Brandl's avatar
Andreas Brandl committed
35
non_geo_db_schema_updated = !git.modified_files.grep(%r{\Adb/structure\.sql}).empty?
36
geo_db_schema_updated = !git.modified_files.grep(%r{\Aee/db/geo/structure\.sql}).empty?
37 38 39 40

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?

41
format_str = helper.ci? ? SCHEMA_NOT_UPDATED_MESSAGE_FULL : SCHEMA_NOT_UPDATED_MESSAGE_SHORT
Ash McKenzie's avatar
Ash McKenzie committed
42

43
if non_geo_migration_created && !non_geo_db_schema_updated
44
  warn format(format_str, migrations: 'migrations', schema: helper.html_link("db/structure.sql"))
45 46 47
end

if geo_migration_created && !geo_db_schema_updated
48
  warn format(format_str, migrations: 'Geo migrations', schema: helper.html_link("ee/db/geo/structure.sql"))
49
end
50

51
return unless helper.ci?
52
return if gitlab.mr_labels.include?(DATABASE_APPROVED_LABEL)
Ash McKenzie's avatar
Ash McKenzie committed
53

54
db_paths_to_review = project_helper.changes_by_category[:database]
55

56
if gitlab.mr_labels.include?('database') || db_paths_to_review.any?
57
  message 'This merge request adds or changes files that require a ' \
58
    'review from the [Database team](https://gitlab.com/groups/gl-database/-/group_members).'
59

60
  markdown(DB_MESSAGE)
61 62 63 64 65 66

  if db_paths_to_review.any?
    markdown(DB_FILES_MESSAGE + helper.markdown_list(db_paths_to_review))
  else
    markdown(DB_REMOVE_MESSAGE)
  end
67

68
  unless helper.has_database_scoped_labels?
69
    gitlab.api.update_merge_request(gitlab.mr_json['project_id'],
70 71
                                    gitlab.mr_json['iid'],
                                    add_labels: 'database::review pending')
72 73
  end
end