diff options
Diffstat (limited to 'lib/gitlab/danger/changelog.rb')
-rw-r--r-- | lib/gitlab/danger/changelog.rb | 57 |
1 files changed, 52 insertions, 5 deletions
diff --git a/lib/gitlab/danger/changelog.rb b/lib/gitlab/danger/changelog.rb index 4427c331b8e..607ca1200a0 100644 --- a/lib/gitlab/danger/changelog.rb +++ b/lib/gitlab/danger/changelog.rb @@ -11,8 +11,36 @@ module Gitlab 'meta' ].freeze NO_CHANGELOG_CATEGORIES = %i[docs none].freeze + CREATE_CHANGELOG_COMMAND = 'bin/changelog -m %<mr_iid>s "%<mr_title>s"' + CREATE_EE_CHANGELOG_COMMAND = 'bin/changelog --ee -m %<mr_iid>s "%<mr_title>s"' + CHANGELOG_MODIFIED_URL_TEXT = "**CHANGELOG.md was edited.** Please remove the additions and create a CHANGELOG entry.\n\n" + CHANGELOG_MISSING_URL_TEXT = "**[CHANGELOG missing](https://docs.gitlab.com/ee/development/changelog.html)**:\n\n" - def needed? + OPTIONAL_CHANGELOG_MESSAGE = <<~MSG + If you want to create a changelog entry for GitLab FOSS, run the following: + + #{CREATE_CHANGELOG_COMMAND} + + If you want to create a changelog entry for GitLab EE, run the following instead: + + #{CREATE_EE_CHANGELOG_COMMAND} + + If this merge request [doesn't need a CHANGELOG entry](https://docs.gitlab.com/ee/development/changelog.html#what-warrants-a-changelog-entry), feel free to ignore this message. + MSG + + REQUIRED_CHANGELOG_MESSAGE = <<~MSG + To create a changelog entry, run the following: + + #{CREATE_CHANGELOG_COMMAND} + + This merge request requires a changelog entry because it [introduces a database migration](https://docs.gitlab.com/ee/development/changelog.html#what-warrants-a-changelog-entry). + MSG + + def required? + git.added_files.any? { |path| path =~ %r{\Adb/(migrate|post_migrate)/} } + end + + def optional? categories_need_changelog? && without_no_changelog_label? end @@ -20,16 +48,35 @@ module Gitlab @found ||= git.added_files.find { |path| path =~ %r{\A(ee/)?(changelogs/unreleased)(-ee)?/} } end - def sanitized_mr_title - gitlab.mr_json["title"].gsub(/^WIP: */, '').gsub(/`/, '\\\`') - end - def ee_changelog? found.start_with?('ee/') end + def modified_text + CHANGELOG_MODIFIED_URL_TEXT + + format(OPTIONAL_CHANGELOG_MESSAGE, mr_iid: mr_iid, mr_title: sanitized_mr_title) + end + + def required_text + CHANGELOG_MISSING_URL_TEXT + + format(REQUIRED_CHANGELOG_MESSAGE, mr_iid: mr_iid, mr_title: sanitized_mr_title) + end + + def optional_text + CHANGELOG_MISSING_URL_TEXT + + format(OPTIONAL_CHANGELOG_MESSAGE, mr_iid: mr_iid, mr_title: sanitized_mr_title) + end + private + def mr_iid + gitlab.mr_json["iid"] + end + + def sanitized_mr_title + helper.sanitize_mr_title(gitlab.mr_json["title"]) + end + def categories_need_changelog? (helper.changes_by_category.keys - NO_CHANGELOG_CATEGORIES).any? end |