class Danger::DangerChangelog

Enforce CHANGELOG.md O.C.D. in your projects.

This plugin can, for example, make sure the changes are attributes properly and that they are always terminated with a period.

@example Run all checks on the default CHANGELOG.md.

changelog.check!

@example Customize the CHANGELOG file name and remind the requester to update it when necessary.

changelog.filename = 'CHANGES.md'
changelog.placeholder_line = "* Your contribution here.\n"
changelog.have_you_updated_changelog?

@see dblock/danger-changelog @tags changelog

Public Instance Methods

changelog_changes?() click to toggle source

Has the CHANGELOG file been modified? @return [boolean]

# File lib/changelog/plugin.rb, line 41
def changelog_changes?
  git.modified_files.include?(filename) || git.added_files.include?(filename)
end
check(parser = Danger::Changelog::Config.format) click to toggle source

Run all checks. @param format [Symbol] the format to check against @return [Boolean] true when the check passes

# File lib/changelog/plugin.rb, line 33
def check(parser = Danger::Changelog::Config.format)
  warn '[DEPRECATION] `check` is deprecated. Set format with `.format` and use `check!` instead.'
  config.format = parser
  check!
end
check!() click to toggle source

Run all checks. @return [Boolean] true when the check passes

# File lib/changelog/plugin.rb, line 26
def check!
  have_you_updated_changelog? && is_changelog_format_correct?
end
file_changes?() click to toggle source

Are any files CHANGELOG cares about modified? @return [boolean]

# File lib/changelog/plugin.rb, line 47
def file_changes?
  all_files = git.modified_files + git.added_files
  Danger::Changelog::Config.ignore_files.each do |f|
    all_files.reject! { |modified_file| f.is_a?(Regexp) ? f.match?(modified_file) : f == modified_file }
    break if all_files.empty?
  end
  all_files.any?
end
have_you_updated_changelog?() click to toggle source

Have you updated CHANGELOG.md? @return [boolean]

# File lib/changelog/plugin.rb, line 58
def have_you_updated_changelog?
  if changelog_changes?
    true
  elsif file_changes?
    warn_update_changelog
    false
  else
    true
  end
end
is_changelog_format_correct?() click to toggle source

Is the CHANGELOG.md format correct? @return [boolean]

# File lib/changelog/plugin.rb, line 71
    def is_changelog_format_correct?
      parser = Danger::Changelog::Config.parser
      changelog_file = Danger::Changelog::ChangelogFile.new(filename, parser: parser)

      if changelog_file.exists?
        changelog_file.parse
        changelog_file.bad_lines.each do |line|
          markdown <<~MARKDOWN
            ```markdown
            #{line.map(&:strip).join("\n")}
            ```
          MARKDOWN
        end
        messaging.fail(parser.bad_line_message(filename), sticky: false) if changelog_file.bad_lines?

        changelog_file.global_failures.each do |failure|
          messaging.fail(failure, sticky: false)
        end

        changelog_file.good?
      else
        messaging.fail("The #{filename} file does not exist.", sticky: false)
        false
      end
    end

Private Instance Methods

warn_update_changelog() click to toggle source
# File lib/changelog/plugin.rb, line 99
    def warn_update_changelog
      markdown <<~MARKDOWN
        Here's an example of a #{filename} entry:

        ```markdown
        #{Danger::Changelog::ChangelogEntryLine.example(github)}
        ```
      MARKDOWN
      warn "Unless you're refactoring existing code or improving documentation, please update #{filename}.", sticky: false
    end