Add breaking-changes section to changelog (#530)

* add breaking-changes section to changelog

* Clean up parse_by_sections

* Thank you bastelfreak and ekohl!
This commit is contained in:
Tim Meusel
2017-10-10 20:27:23 +02:00
committed by Olle Jonsson
parent d1e09f6964
commit 21ec2db39b
5 changed files with 117 additions and 27 deletions
@@ -95,12 +95,13 @@ module GitHubChangelogGenerator
# @param [Array] pull_requests
# @return [String] generated log for issues
def issues_to_log(issues, pull_requests)
log = ""
bugs_a, enhancement_a, issues_a = parse_by_sections(issues, pull_requests)
sections = parse_by_sections(issues, pull_requests)
log += generate_sub_section(enhancement_a, options[:enhancement_prefix])
log += generate_sub_section(bugs_a, options[:bug_prefix])
log += generate_sub_section(issues_a, options[:issue_prefix])
log = ""
log += generate_sub_section(sections[:breaking], options[:breaking_prefix])
log += generate_sub_section(sections[:enhancement], options[:enhancement_prefix])
log += generate_sub_section(sections[:bugs], options[:bug_prefix])
log += generate_sub_section(sections[:issues], options[:issue_prefix])
log
end
@@ -109,47 +110,69 @@ module GitHubChangelogGenerator
#
# @param [Array] issues
# @param [Array] pull_requests
# @return [Array] tuple of filtered arrays: (Bugs, Enhancements Issues)
# @return [Hash] Mapping of filtered arrays: (Bugs, Enhancements, Breaking stuff, Issues)
def parse_by_sections(issues, pull_requests)
issues_a = []
enhancement_a = []
bugs_a = []
sections = {
issues: [],
enhancements: [],
bugs: [],
breaking: []
}
issues.each do |dict|
added = false
dict["labels"].each do |label|
if options[:bug_labels].include?(label["name"])
bugs_a.push(dict)
sections[:bugs] << dict
added = true
next
end
if options[:enhancement_labels].include?(label["name"])
enhancement_a.push(dict)
elsif options[:enhancement_labels].include?(label["name"])
sections[:enhancements] << dict
added = true
elsif options[:breaking_labels].include?(label["name"])
sections[:breaking] << dict
added = true
next
end
break if added
end
issues_a.push(dict) unless added
sections[:issues] << dict unless added
end
sort_pull_requests(pull_requests, sections)
end
# This method iterates through PRs and sorts them into sections
#
# @param [Array] pull_requests
# @param [Hash] sections
# @return [Hash] sections
def sort_pull_requests(pull_requests, sections)
added_pull_requests = []
pull_requests.each do |pr|
added = false
pr["labels"].each do |label|
if options[:bug_labels].include?(label["name"])
bugs_a.push(pr)
added_pull_requests.push(pr)
next
end
if options[:enhancement_labels].include?(label["name"])
enhancement_a.push(pr)
added_pull_requests.push(pr)
next
sections[:bugs] << pr
added_pull_requests << pr
added = true
elsif options[:enhancement_labels].include?(label["name"])
sections[:enhancements] << pr
added_pull_requests << pr
added = true
elsif options[:breaking_labels].include?(label["name"])
sections[:breaking] << pr
added_pull_requests << pr
added = true
end
break if added
end
end
added_pull_requests.each { |p| pull_requests.delete(p) }
[bugs_a, enhancement_a, issues_a]
sections
end
end
end
@@ -20,6 +20,8 @@ module GitHubChangelogGenerator
due_tag
enhancement_labels
enhancement_prefix
breaking_labels
breaking_prefix
exclude_labels
exclude_tags
exclude_tags_regex
+8
View File
@@ -70,6 +70,9 @@ module GitHubChangelogGenerator
opts.on("--enhancement-label [LABEL]", "Setup custom label for enhancements section. Default is \"**Implemented enhancements:**\"") do |v|
options[:enhancement_prefix] = v
end
opts.on("--breaking-label [LABEL]", "Setup custom label for the breaking changes section. Default is \"**Breaking changes:**\"") do |v|
options[:breaking_prefix] = v
end
opts.on("--issues-label [LABEL]", "Setup custom label for closed-issues section. Default is \"**Closed issues:**\"") do |v|
options[:issue_prefix] = v
end
@@ -127,6 +130,9 @@ module GitHubChangelogGenerator
opts.on("--enhancement-labels x,y,z", Array, 'Issues with the specified labels will be always added to "Implemented enhancements" section. Default is \'enhancement,Enhancement\'') do |list|
options[:enhancement_labels] = list
end
opts.on("--breaking-labels x,y,z", Array, 'Issues with these labels will be added to a new section, called "Breaking Changes". Default is \'backwards-incompatible\'') do |list|
options[:breaking_labels] = list
end
opts.on("--issue-line-labels x,y,z", Array, 'The specified labels will be shown in brackets next to each matching issue. Use "ALL" to show all labels. Default is [].') do |list|
options[:issue_line_labels] = list
end
@@ -208,6 +214,7 @@ module GitHubChangelogGenerator
enhancement_labels: ["enhancement", "Enhancement", "Type: Enhancement"],
bug_labels: ["bug", "Bug", "Type: Bug"],
exclude_labels: ["duplicate", "question", "invalid", "wontfix", "Duplicate", "Question", "Invalid", "Wontfix", "Meta: Exclude From Changelog"],
breaking_labels: %w[backwards-incompatible breaking],
issue_line_labels: [],
max_issues: nil,
simple_list: false,
@@ -218,6 +225,7 @@ module GitHubChangelogGenerator
issue_prefix: "**Closed issues:**",
bug_prefix: "**Fixed bugs:**",
enhancement_prefix: "**Implemented enhancements:**",
breaking_prefix: "**Breaking changes:**",
http_cache: true
)
end
@@ -67,7 +67,7 @@ module GitHubChangelogGenerator
end
KNOWN_ARRAY_KEYS = %i[exclude_labels include_labels bug_labels
enhancement_labels issue_line_labels between_tags exclude_tags]
enhancement_labels breaking_labels issue_line_labels between_tags exclude_tags]
KNOWN_INTEGER_KEYS = [:max_issues]
def convert_value(value, option_name)
@@ -91,6 +91,7 @@ module GitHubChangelogGenerator
header_label: :header,
front_matter: :frontmatter,
pr_label: :merge_prefix,
breaking_label: :breaking_prefix,
issues_wo_labels: :add_issues_wo_labels,
pr_wo_labels: :add_pr_wo_labels,
pull_requests: :pulls,