summaryrefslogtreecommitdiff
path: root/danger/database/Dangerfile
blob: 3550cb7eabf69399c96b8de337f180dcc34894d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# frozen_string_literal: true

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

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. Use the [Database changes checklist](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/.gitlab/merge_request_templates/Database%20changes.md)
   template or add the appropriate items to the MR description.
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

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?

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

db_paths_to_review = helper.changes_by_category[:database]

if gitlab.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_FILES_MESSAGE + helper.markdown_list(db_paths_to_review)) if db_paths_to_review.any?

  database_labels = helper.missing_database_labels(gitlab.mr_labels)

  if database_labels.any?
    gitlab.api.update_merge_request(gitlab.mr_json['project_id'],
                                        gitlab.mr_json['iid'],
                                        labels: (gitlab.mr_labels + database_labels).join(','))
  end
end