danger-changelog 0.4.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 450307fc09c7eaaa1c231f41cd538c3a77ec15b466bcfb0f1e0bd0bbe5948376
4
- data.tar.gz: 5c59cc348309c6f0b244ee9316ebe9d95b4850bb6a33d4aaf9588947866d3702
3
+ metadata.gz: 581ec6b4b9c3833ce61d201ec1337a6b232a2fa2e0282eaea52aec6b4c313381
4
+ data.tar.gz: 5b0fe3313f22e010b1213eab4aaf3c6c6ba73d22702646b4d66f1bb8051975b7
5
5
  SHA512:
6
- metadata.gz: 3b117b228586220f9ca929114e838d6811837daff83c0b5822de7283806d607ba66be2f37f393bb0d7b630914487b18b55b74ac79ce52ea2bffb94193b53b671
7
- data.tar.gz: a4538cb355fa4039ce90715456b16b850fc9e9fc7713b73fd411e8c1f3070ed486c8ab725548921940d762c7af42a35ed43ac305b62e75983933ff4d9763b2e5
6
+ metadata.gz: 671e4065da9320cc167b2e96332127f492098c1e41230ec7b78a6adf7f21cabb9da0fb49f343a95d35a8eaab637bceb1a99d13621f5757212b1ec2cf331c1ca2
7
+ data.tar.gz: d8a16a3aa427a157266f02a26687bc2ac3c9dc51ab7914c4a301b6b60cbc23587a72794644b5666fb0dca6624ee78481fb1852ca343a51248793525a12a5a5ed
@@ -1,5 +1,10 @@
1
1
  ## Changelog
2
2
 
3
+ ### 0.5.0 (2019/05/31)
4
+
5
+ * [#41](https://github.com/dblock/danger-changelog/pull/41): Document what's a correctly-formatted CHANGELOG - [@ivoanjo](https://github.com/ivoanjo).
6
+ * [#44](https://github.com/dblock/danger-changelog/pull/44): Add support for the [Keep a Changelog](https://keepachangelog.com) format for the change log - [@michaelherold](https://github.com/michaelherold).
7
+
3
8
  ### 0.4.2 (2018/12/21)
4
9
 
5
10
  * [#37](https://github.com/dblock/danger-changelog/issues/37): Allow for parenthesis and brackets around headers - [@dblock](https://github.com/dblock).
data/README.md CHANGED
@@ -6,6 +6,13 @@ It can make sure, for example, that changes are attributed properly, have a vali
6
6
  [![Gem Version](https://badge.fury.io/rb/danger-changelog.svg)](https://badge.fury.io/rb/danger-changelog)
7
7
  [![Build Status](https://travis-ci.org/dblock/danger-changelog.svg?branch=master)](https://travis-ci.org/dblock/danger-changelog)
8
8
 
9
+ ## What's a correctly formatted CHANGELOG file?
10
+
11
+ By design, `danger-changelog` is quite strict with what it allows as a valid changelog file. However, there are more than one format that it supports.
12
+
13
+ * By default, it uses the [Intridea style](doc/intridea.md)
14
+ * Optionally, you can enable the [Keep a Changelog style](doc/keep_a_changelog.md)
15
+
9
16
  ## Installation
10
17
 
11
18
  Add `danger-changelog` to your Gemfile.
@@ -44,6 +51,8 @@ Set the CHANGELOG file name, defaults to `CHANGELOG.md`.
44
51
 
45
52
  Run all checks with defaults.
46
53
 
54
+ You can pass a different format to this method, such as `changelog.check(:keep_a_changelog)`.
55
+
47
56
  #### changelog.have_you_updated_changelog?
48
57
 
49
58
  Checks whether you have updated CHANGELOG.md.
@@ -0,0 +1,151 @@
1
+ # Intridea Style
2
+
3
+ The Intridea style changelog was pioneered on the Hashie project. It has many elements that can you use and prevents some other elements as follows.
4
+
5
+ ### Titles
6
+
7
+ ✅ You can have up to four levels of titles
8
+
9
+ ```markdown
10
+ # This is a title for my changelog
11
+ ## lower case also works and so do numbers 123
12
+ ### Colons: They are awesome
13
+ #### Probably not used all that often
14
+ ```
15
+
16
+ ❌ Only letters (a-z), numbers, underscores and colons are allowed in titles
17
+
18
+ ```markdown
19
+ #### Emoji is not allowed 😢
20
+ #### Hyphens are not allowed thus sugar-free is not valid
21
+ #### Multiple sentences. Are not allowed
22
+ #### Commas, neither
23
+ #### No accented characters sorry Beyoncé
24
+ ```
25
+
26
+ ❌ Titles must start with a leading space
27
+
28
+ ```markdown
29
+ #This is not valid
30
+ ```
31
+
32
+ ✅ You can place your titles inside a single parens
33
+
34
+ ```markdown
35
+ # (This is allowed)
36
+ ## [This is allowed]
37
+ ### {This is also allowed}
38
+ ```
39
+
40
+ ❌ Parens in a title must match, and you can only have one set
41
+
42
+ ```markdown
43
+ # (Not valid
44
+ ## {Not valid)
45
+ ### Not valid ()
46
+ #### [] Not valid
47
+ #### ((Not valid))
48
+ ```
49
+
50
+ ✅ You can have a [semantic-versioning](https://semver.org/) compatible version number
51
+
52
+ ```markdown
53
+ # 1.0.0
54
+ ## 1.0.0-alpha
55
+ ### (3.2.1-beta+reallybuggy.1)
56
+ ```
57
+
58
+ ❌ Version numbers which do not follow [semantic-versioning](https://semver.org/) are not allowed
59
+
60
+ ```markdown
61
+ # 01.0.0.notvalid
62
+ ```
63
+
64
+ ❌ You cannot combine version numbers with other text
65
+
66
+ ```markdown
67
+ # Not valid 1.0.0
68
+ # Not valid (1.0.0)
69
+ ```
70
+
71
+ ✅ You can include an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)-formatted date along with a version, inside or outside parens
72
+
73
+ ```markdown
74
+ # 1.0.0 2019
75
+ ## 1.0.0 (2019-12-31)
76
+ ### (1.0.0) (2019/12/31)
77
+ #### (1.0.0) 20191231
78
+ ```
79
+
80
+ ❌ No other date or time formats are allowed
81
+
82
+ ```markdown
83
+ # 1.0.0 (2019-12)
84
+ # 1.0.0 (2019-W1)
85
+ # 1.0.0 (2019-04-28T09:21:58Z)
86
+ # 1.0.0 (31/12/2019)
87
+ ```
88
+
89
+ ❌ Dates cannot be combined with normal titles
90
+
91
+ ```markdown
92
+ # Not valid (2019/12/31)
93
+ ```
94
+
95
+ ### Changelog entries
96
+
97
+ ✅ Under each title, you can have changelog entries in the format: `* {optional link to GitHub pull request that must be followed by a colon} {a single sentence of text description} - {author github link}.`:
98
+
99
+ ```markdown
100
+ * Entry without a PR link - [@ivoanjo](https://github.com/ivoanjo).
101
+ * [#1](https://github.com/dblock/danger-changelog/pull/1): Entry with a PR link - [@dblock](https://github.com/dblock).
102
+ * Yes, this is a weird entry, but it's still valid! Also Beyoncé is welcome here, as is 松本 行弘 and our nice emojis 👍 - [@ivoanjo](https://github.com/ivoanjo).
103
+ ```
104
+
105
+ ❌ Entry descriptions need to start with an uppercase A-Z letter
106
+
107
+ ```markdown
108
+ * not valid - [@ivoanjo](https://github.com/ivoanjo).
109
+ * いいえ - [@ivoanjo](https://github.com/ivoanjo).
110
+ * ❌ - [@ivoanjo](https://github.com/ivoanjo).
111
+ * [#1](https://github.com/dblock/danger-changelog/pull/1): not valid - [@dblock](https://github.com/dblock).
112
+ ```
113
+
114
+ ❌ GitHub pull request links need to be followed with a colon
115
+
116
+ ```markdown
117
+ * [#1](https://github.com/dblock/danger-changelog/pull/1) Not valid - [@dblock](https://github.com/dblock).
118
+ ```
119
+
120
+ ❌ Only links to GitHub are allowed, and only using `https`
121
+
122
+ ```markdown
123
+ * No GitLab - [@ivoanjo](https://gitlab.com/ivoanjo).
124
+ * No insecure http - [@ivoanjo](http://github.com/ivoanjo).
125
+ * [#1](https://you-get-the-point.com): Entry with a PR link - [@dblock](https://github.com/dblock).
126
+ ```
127
+ ❌ Only a single sentence is allowed
128
+
129
+ ```markdown
130
+ * Did stuff. Then more stuff - [@ivoanjo](https://github.com/ivoanjo).
131
+ ```
132
+
133
+ ❌ A dash needs to separate the text description from the author
134
+
135
+ ```markdown
136
+ * Missing a dash here ➡️ [@ivoanjo](https://github.com/ivoanjo).
137
+ ```
138
+
139
+ ❌ An entry must end with a period
140
+
141
+ ```markdown
142
+ * Not valid - [@ivoanjo](https://github.com/ivoanjo)
143
+ ```
144
+
145
+ ### Blank lines
146
+
147
+ ✅ You can have them
148
+
149
+ ```markdown
150
+
151
+ ```
@@ -0,0 +1,192 @@
1
+ # Keep a Changelog Style
2
+
3
+ The Keep a Changelog style format checks that your changelog is formatted like the specification outlined at [KeepAChangelog.com](https://keepachangelog.com).
4
+
5
+ As an example, here is a changelog formatted in the Keep a Changelog style, as borrowed from the Keep a Changelog project:
6
+
7
+ ```markdown
8
+ # Changelog
9
+
10
+ All notable changes to this project will be documented in this file.
11
+
12
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
13
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
14
+
15
+ ## [Unreleased]
16
+
17
+ ## [1.0.0] - 2017-06-20
18
+
19
+ ### Added
20
+
21
+ - New visual identity by [@tylerfortune8](https://github.com/tylerfortune8).
22
+ - Version navigation.
23
+ - Links to latest released version in previous versions.
24
+ - "Why keep a changelog?" section.
25
+ - "Who needs a changelog?" section.
26
+ - "How do I make a changelog?" section.
27
+ - "Frequently Asked Questions" section.
28
+ - New "Guiding Principles" sub-section to "How do I make a changelog?".
29
+ - Simplified and Traditional Chinese translations from [@tianshuo](https://github.com/tianshuo).
30
+ - German translation from [@mpbzh](https://github.com/mpbzh) & [@Art4](https://github.com/Art4).
31
+ - Italian translation from [@azkidenz](https://github.com/azkidenz).
32
+ - Swedish translation from [@magol](https://github.com/magol).
33
+ - Turkish translation from [@karalamalar](https://github.com/karalamalar).
34
+ - French translation from [@zapashcanon](https://github.com/zapashcanon).
35
+ - Brazilian Portugese translation from [@Webysther](https://github.com/Webysther).
36
+ - Polish translation from [@amielucha](https://github.com/amielucha) & [@m-aciek](https://github.com/m-aciek).
37
+ - Russian translation from [@aishek](https://github.com/aishek).
38
+ - Czech translation from [@h4vry](https://github.com/h4vry).
39
+ - Slovak translation from [@jkostolansky](https://github.com/jkostolansky).
40
+ - Korean translation from [@pierceh89](https://github.com/pierceh89).
41
+ - Croatian translation from [@porx](https://github.com/porx).
42
+ - Persian translation from [@Hameds](https://github.com/Hameds).
43
+ - Ukrainian translation from [@osadchyi-s](https://github.com/osadchyi-s).
44
+
45
+ ### Changed
46
+
47
+ - Start using "changelog" over "change log" since it's the common usage.
48
+ - Start versioning based on the current English version at 0.3.0 to help
49
+ translation authors keep things up-to-date.
50
+ - Rewrite "What makes unicorns cry?" section.
51
+ - Rewrite "Ignoring Deprecations" sub-section to clarify the ideal
52
+ scenario.
53
+ - Improve "Commit log diffs" sub-section to further argument against
54
+ them.
55
+ - Merge "Why can’t people just use a git log diff?" with "Commit log
56
+ diffs"
57
+ - Fix typos in Simplified Chinese and Traditional Chinese translations.
58
+ - Fix typos in Brazilian Portuguese translation.
59
+ - Fix typos in Turkish translation.
60
+ - Fix typos in Czech translation.
61
+ - Fix typos in Swedish translation.
62
+ - Improve phrasing in French translation.
63
+ - Fix phrasing and spelling in German translation.
64
+
65
+ ### Removed
66
+
67
+ - Section about "changelog" vs "CHANGELOG".
68
+
69
+ ## [0.3.0] - 2015-12-03
70
+
71
+ ### Added
72
+
73
+ - RU translation from [@aishek](https://github.com/aishek).
74
+ - pt-BR translation from [@tallesl](https://github.com/tallesl).
75
+ - es-ES translation from [@ZeliosAriex](https://github.com/ZeliosAriex).
76
+
77
+ ## [0.2.0] - 2015-10-06
78
+
79
+ ### Changed
80
+
81
+ - Remove exclusionary mentions of "open source" since this project can
82
+ benefit both "open" and "closed" source projects equally.
83
+
84
+ ## [0.1.0] - 2015-10-06
85
+
86
+ ### Added
87
+
88
+ - Answer "Should you ever rewrite a change log?".
89
+
90
+ ### Changed
91
+
92
+ - Improve argument against commit logs.
93
+ - Start following [SemVer](https://semver.org) properly.
94
+
95
+ ## [0.0.8] - 2015-02-17
96
+
97
+ ### Changed
98
+
99
+ - Update year to match in every README example.
100
+ - Reluctantly stop making fun of Brits only, since most of the world
101
+ writes dates in a strange way.
102
+
103
+ ### Fixed
104
+
105
+ - Fix typos in recent README changes.
106
+ - Update outdated unreleased diff link.
107
+
108
+ ## [0.0.7] - 2015-02-16
109
+
110
+ ### Added
111
+
112
+ - Link, and make it obvious that date format is ISO 8601.
113
+
114
+ ### Changed
115
+
116
+ - Clarified the section on "Is there a standard change log format?".
117
+
118
+ ### Fixed
119
+
120
+ - Fix Markdown links to tag comparison URL with footnote-style links.
121
+
122
+ ## [0.0.6] - 2014-12-12
123
+
124
+ ### Added
125
+
126
+ - README section on "yanked" releases.
127
+
128
+ ## [0.0.5] - 2014-08-09
129
+
130
+ ### Added
131
+
132
+ - Markdown links to version tags on release headings.
133
+ - Unreleased section to gather unreleased changes and encourage note
134
+ keeping prior to releases.
135
+
136
+ ## [0.0.4] - 2014-08-09
137
+
138
+ ### Added
139
+
140
+ - Better explanation of the difference between the file ("CHANGELOG")
141
+ and its function "the change log".
142
+
143
+ ### Changed
144
+
145
+ - Refer to a "change log" instead of a "CHANGELOG" throughout the site
146
+ to differentiate between the file and the purpose of the file — the
147
+ logging of changes.
148
+
149
+ ### Removed
150
+
151
+ - Remove empty sections from CHANGELOG, they occupy too much space and
152
+ create too much noise in the file. People will have to assume that the
153
+ missing sections were intentionally left out because they contained no
154
+ notable changes.
155
+
156
+ ## [0.0.3] - 2014-08-09
157
+
158
+ ### Added
159
+
160
+ - "Why should I care?" section mentioning The Changelog podcast.
161
+
162
+ ## [0.0.2] - 2014-07-10
163
+
164
+ ### Added
165
+
166
+ - Explanation of the recommended reverse chronological release ordering.
167
+
168
+ ## [0.0.1] - 2014-05-31
169
+
170
+ ### Added
171
+
172
+ - This CHANGELOG file to hopefully serve as an evolving example of a
173
+ standardized open source project CHANGELOG.
174
+ - CNAME file to enable GitHub Pages custom domain
175
+ - README now contains answers to common questions about CHANGELOGs
176
+ - Good examples and basic guidelines, including proper date formatting.
177
+ - Counter-examples: "What makes unicorns cry?"
178
+
179
+ [Unreleased]: https://github.com/olivierlacan/keep-a-changelog/compare/v1.0.0...HEAD
180
+ [1.0.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.3.0...v1.0.0
181
+ [0.3.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.2.0...v0.3.0
182
+ [0.2.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.1.0...v0.2.0
183
+ [0.1.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.8...v0.1.0
184
+ [0.0.8]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.7...v0.0.8
185
+ [0.0.7]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.6...v0.0.7
186
+ [0.0.6]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.5...v0.0.6
187
+ [0.0.5]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.4...v0.0.5
188
+ [0.0.4]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.3...v0.0.4
189
+ [0.0.3]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.2...v0.0.3
190
+ [0.0.2]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.1...v0.0.2
191
+ [0.0.1]: https://github.com/olivierlacan/keep-a-changelog/releases/tag/v0.0.1
192
+ ```
@@ -2,60 +2,52 @@ module Danger
2
2
  module Changelog
3
3
  # A CHANGELOG.md file reader.
4
4
  class ChangelogFile
5
- attr_reader :filename, :bad_lines, :exists
5
+ attr_reader :filename, :bad_lines, :exists, :global_failures
6
6
 
7
- def initialize(filename = 'CHANGELOG.md')
7
+ def initialize(filename = 'CHANGELOG.md', parser: Parsers.lookup(Parsers.default_format))
8
8
  @filename = filename
9
9
  @exists = File.exist?(filename)
10
- parse if @exists
10
+ @bad_lines = []
11
+ @global_failures = []
12
+ @parser = parser
13
+
14
+ parser.add_listener(self)
15
+ end
16
+
17
+ def add_bad_line(line)
18
+ @bad_lines << line
19
+ end
20
+
21
+ def add_global_failure(message)
22
+ @global_failures << message
23
+ end
24
+
25
+ def parse
26
+ return unless exists?
27
+
28
+ @parser.parse(filename)
11
29
  end
12
30
 
13
31
  # Any bad_lines?
14
32
  def bad_lines?
15
- !!bad_lines && bad_lines.any?
33
+ bad_lines.any?
16
34
  end
17
35
 
18
- def exists?
19
- !!@exists
36
+ def global_failures?
37
+ global_failures.any?
20
38
  end
21
39
 
22
- def your_contribution_here?
23
- !!@your_contribution_here
40
+ def exists?
41
+ !!@exists
24
42
  end
25
43
 
26
44
  def bad?
27
- bad_lines? || !(your_contribution_here? || !Danger::Changelog.config.placeholder_line?)
45
+ bad_lines? || global_failures?
28
46
  end
29
47
 
30
48
  def good?
31
49
  !bad?
32
50
  end
33
-
34
- private
35
-
36
- # Parse CHANGELOG file.
37
- def parse
38
- @your_contribution_here = false
39
- @bad_lines = []
40
- File.open(filename).each_line do |line|
41
- next if line.strip.empty?
42
-
43
- changelog_line = ChangelogLineParser.parse(line)
44
-
45
- # puts "#{line.strip}: #{changelog_line.invalid?} (#{changelog_line})"
46
-
47
- if changelog_line.nil? || changelog_line.invalid?
48
- @bad_lines << line
49
- next
50
- end
51
-
52
- # notice your contribution here
53
- if changelog_line.is_a?(ChangelogPlaceholderLine)
54
- @your_contribution_here = true
55
- next
56
- end
57
- end
58
- end
59
51
  end
60
52
  end
61
53
  end
@@ -1,3 +1,3 @@
1
1
  module Changelog
2
- VERSION = '0.4.2'.freeze
2
+ VERSION = '0.5.0'.freeze
3
3
  end
@@ -0,0 +1,19 @@
1
+ require 'changelog/parsers/base'
2
+ require 'changelog/parsers/intridea_format'
3
+ require 'changelog/parsers/keep_a_changelog'
4
+
5
+ module Danger
6
+ module Changelog
7
+ module Parsers
8
+ def self.default_format
9
+ :intridea
10
+ end
11
+
12
+ def self.lookup(format)
13
+ { intridea: IntrideaFormat, keep_a_changelog: KeepAChangelog }
14
+ .fetch(format, IntrideaFormat)
15
+ .new
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,27 @@
1
+ module Danger
2
+ module Changelog
3
+ module Parsers
4
+ class Base
5
+ def initialize(listeners = [])
6
+ @listeners = listeners
7
+ end
8
+
9
+ attr_reader :listeners
10
+
11
+ def add_listener(changelog)
12
+ listeners << changelog
13
+ end
14
+
15
+ private
16
+
17
+ def notify_of_bad_line(message)
18
+ listeners.each { |changelog| changelog.add_bad_line(message) }
19
+ end
20
+
21
+ def notify_of_global_failure(message)
22
+ listeners.each { |changelog| changelog.add_global_failure(message) }
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,41 @@
1
+ module Danger
2
+ module Changelog
3
+ module Parsers
4
+ class IntrideaFormat < Base
5
+ def bad_line_message(filename)
6
+ "One of the lines below found in #{filename} doesn't match the " \
7
+ '[expected format](https://github.com/dblock/danger-changelog/blob/master/README.md#whats-a-correctly-formatted-changelog-file). ' \
8
+ 'Please make it look like the other lines, pay attention to version ' \
9
+ 'numbers, periods, spaces and date formats.'
10
+ end
11
+
12
+ def parse(filename)
13
+ your_contribution_here = false
14
+
15
+ File.open(filename).each_line do |line|
16
+ next if line.strip.empty?
17
+
18
+ changelog_line = ChangelogLineParser.parse(line)
19
+
20
+ if changelog_line.nil? || changelog_line.invalid?
21
+ notify_of_bad_line line
22
+ next
23
+ end
24
+
25
+ # notice your contribution here
26
+ if changelog_line.is_a?(ChangelogPlaceholderLine)
27
+ your_contribution_here = true
28
+ next
29
+ end
30
+ end
31
+
32
+ return if your_contribution_here
33
+ return unless Danger::Changelog.config.placeholder_line?
34
+ return unless (placeholder = Danger::Changelog.config.placeholder_line.chomp)
35
+
36
+ notify_of_global_failure "Please put back the `#{placeholder}` line into #{filename}."
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,81 @@
1
+ module Danger
2
+ module Changelog
3
+ module Parsers
4
+ class KeepAChangelog < Base
5
+ def bad_line_message(filename)
6
+ "One of the lines below found in #{filename} doesn't match the " \
7
+ '[expected format](https://keepachangelog.com).'
8
+ end
9
+
10
+ def parse(filename)
11
+ blocks = parse_into_blocks(File.open(filename).each_line)
12
+
13
+ if contains_header_block?(blocks.first)
14
+ blocks = blocks[1..-1]
15
+ else
16
+ notify_of_global_failure(
17
+ 'The changelog is missing the version header for the Keep A ' \
18
+ 'Changelog format. See <https://keepachangelog.com> to see ' \
19
+ 'the format of the header'
20
+ )
21
+ end
22
+
23
+ blocks.each do |header, *body|
24
+ notify_of_bad_line(header) unless ChangelogHeaderLine.new(header).valid?
25
+
26
+ body.each do |line|
27
+ next if approved_section?(line)
28
+ next if markdown_link?(line)
29
+ next if markdown_list_item_or_continuation?(line)
30
+
31
+ notify_of_bad_line(line)
32
+ end
33
+ end
34
+ end
35
+
36
+ private
37
+
38
+ def parse_into_blocks(lines)
39
+ blocks = []
40
+ block = []
41
+
42
+ lines.each do |line|
43
+ line = line.chomp
44
+
45
+ if /##?[^#]/.match?(line)
46
+ blocks << block.dup unless block.empty?
47
+ block.clear
48
+ end
49
+
50
+ block << line unless line.empty?
51
+ end
52
+
53
+ blocks << block.dup
54
+ end
55
+
56
+ def approved_section?(line)
57
+ /^### (Added|Changed|Deprecated|Removed|Fixed|Security)/.match?(line)
58
+ end
59
+
60
+ def contains_header_block?(block)
61
+ return false unless block
62
+ return false unless block.first == '# Changelog'
63
+
64
+ regex = %r{All notable changes to this project will be documented in this file. The format is based on \[Keep a Changelog\]\(https://keepachangelog.com/en/\d\.\d\.\d/\), and this project adheres to \[Semantic Versioning\]\(https:\/\/semver.org\/spec\/v2.0.0.html\).}
65
+
66
+ block_content = block[1..-1].join(' ')
67
+
68
+ regex.match?(block_content)
69
+ end
70
+
71
+ def markdown_link?(line)
72
+ /^\[.*\]:/.match?(line)
73
+ end
74
+
75
+ def markdown_list_item_or_continuation?(line)
76
+ /^(?:[\*-]\s| )/.match?(line)
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -26,10 +26,10 @@ module Danger
26
26
  end
27
27
 
28
28
  # Run all checks.
29
- # @return [void]
30
- def check
31
- have_you_updated_changelog?
32
- is_changelog_format_correct?
29
+ # @param format [Symbol] the format to check against
30
+ # @return [Boolean] true when the check passes
31
+ def check(format = Danger::Changelog::Parsers.default_format)
32
+ have_you_updated_changelog? && is_changelog_format_correct?(format)
33
33
  end
34
34
 
35
35
  # Has the CHANGELOG file been modified?
@@ -58,17 +58,24 @@ Here's an example of a #{filename} entry:
58
58
 
59
59
  # Is the CHANGELOG.md format correct?
60
60
  # @return [boolean]
61
- def is_changelog_format_correct?
62
- changelog_file = Danger::Changelog::ChangelogFile.new(filename)
61
+ def is_changelog_format_correct?(format)
62
+ parser = Danger::Changelog::Parsers.lookup(format)
63
+ changelog_file = Danger::Changelog::ChangelogFile.new(filename, parser: parser)
64
+
63
65
  if changelog_file.exists?
66
+ changelog_file.parse
64
67
  changelog_file.bad_lines.each do |line|
65
68
  markdown <<-MARKDOWN
66
69
  ```markdown
67
70
  #{line}```
68
71
  MARKDOWN
69
72
  end
70
- messaging.fail("One of the lines below found in #{filename} doesn't match the expected format. Please make it look like the other lines, pay attention to version numbers, periods, spaces and date formats.", sticky: false) if changelog_file.bad_lines?
71
- messaging.fail("Please put back the `#{Danger::Changelog.config.placeholder_line.chomp}` line into #{filename}.", sticky: false) unless changelog_file.your_contribution_here? || !Danger::Changelog.config.placeholder_line?
73
+ messaging.fail(parser.bad_line_message(filename), sticky: false) if changelog_file.bad_lines?
74
+
75
+ changelog_file.global_failures.each do |failure|
76
+ messaging.fail(failure, sticy: false)
77
+ end
78
+
72
79
  changelog_file.good?
73
80
  else
74
81
  messaging.fail("The #{filename} file does not exist.", sticky: false)
@@ -5,4 +5,5 @@ require 'changelog/changelog_line/changelog_placeholder_line'
5
5
  require 'changelog/changelog_line/changelog_line'
6
6
  require 'changelog/changelog_file'
7
7
  require 'changelog/config'
8
+ require 'changelog/parsers'
8
9
  require 'changelog/plugin'
@@ -3,105 +3,108 @@ require File.expand_path('spec_helper', __dir__)
3
3
  describe Danger::Changelog::ChangelogFile do
4
4
  let(:filename) { 'CHANGELOG.md' }
5
5
  subject do
6
- Danger::Changelog::ChangelogFile.new(filename)
6
+ Danger::Changelog::ChangelogFile.new(filename).tap(&:parse)
7
7
  end
8
- context 'minimal example' do
9
- let(:filename) { File.expand_path('fixtures/changelogs/minimal.md', __dir__) }
10
- it 'exists?' do
11
- expect(subject.exists?).to be true
12
- end
13
- it 'bad_lines?' do
14
- expect(subject.bad_lines).to eq []
15
- expect(subject.bad_lines?).to be false
16
- end
17
- it 'is valid' do
18
- expect(subject.bad_lines?).to be false
19
- end
20
- it 'has your contribution here' do
21
- expect(subject.your_contribution_here?).to be true
22
- end
23
- end
24
- context 'missing your contribution here' do
25
- let(:filename) { File.expand_path('fixtures/changelogs/missing_your_contribution_here.md', __dir__) }
26
- it 'is valid' do
27
- expect(subject.bad_lines?).to be false
28
- end
29
- it 'is missing your contribution here' do
30
- expect(subject.your_contribution_here?).to be false
31
- end
32
- end
33
- context 'does not exist' do
34
- let(:filename) { 'whatever.md' }
35
- it 'exists?' do
36
- expect(subject.exists?).to be false
37
- end
38
- it 'bad_lines?' do
39
- expect(subject.bad_lines).to be nil
40
- expect(subject.bad_lines?).to be false
41
- end
42
- end
43
- context 'with bad lines' do
44
- let(:filename) { File.expand_path('fixtures/changelogs/lines.md', __dir__) }
45
- it 'is invalid' do
46
- expect(subject.bad_lines?).to be true
47
- end
48
- it 'reports all bad lines' do
49
- expect(subject.bad_lines).to eq [
50
- "Missing star - [@dblock](https://github.com/dblock).\n",
51
- "* [#1](https://github.com/dblock/danger-changelog/pull/1) - Not a colon - [@dblock](https://github.com/dblock).\n",
52
- "* [#1](https://github.com/dblock/danger-changelog/pull/1): No final period - [@dblock](https://github.com/dblock)\n",
53
- "# [#1](https://github.com/dblock/danger-changelog/pull/1): Hash instead of star - [@dblock](https://github.com/dblock).\n",
54
- "* [#1](https://github.com/dblock/danger-changelog/pull/1): Extra period. - [@dblock](https://github.com/dblock).\n",
55
- "* [#1](https://github.com/dblock/danger-changelog/pull/1): Unbalanced ( - [@dblock](https://github.com/dblock).\n",
56
- "* [#1](https://github.com/dblock/danger-changelog/pull/1): Unbalanced ] - [@dblock](https://github.com/dblock).\n"
57
- ]
58
- end
59
- it 'has your contribution here' do
60
- expect(subject.your_contribution_here?).to be true
61
- end
62
- end
63
- context 'with bad dates' do
64
- let(:filename) { File.expand_path('fixtures/changelogs/dates.md', __dir__) }
65
- it 'is invalid' do
66
- expect(subject.bad_lines?).to be true
67
- end
68
- it 'reports all bad dates' do
69
- expect(subject.bad_lines).to eq [
70
- "### 1.2.3 (1/2/2018)\n",
71
- "### 1.2.3 (2018/13/1)\n",
72
- "### 1.2.3 (2018/13)\n",
73
- "### 1.2.3 (2018/1/1/3)\n"
74
- ]
75
- end
76
- end
77
- context 'with bad semver' do
78
- let(:filename) { File.expand_path('fixtures/changelogs/semver.md', __dir__) }
79
- it 'is invalid' do
80
- expect(subject.bad_lines?).to be true
81
- end
82
- it 'reports all bad dates' do
83
- expect(subject.bad_lines).to eq [
84
- "### 0 (2018/1/1)\n",
85
- "### 0. (2018/1/1)\n",
86
- "### 0.1. (2018/1/1)\n"
87
- ]
88
- end
89
- end
90
- context 'with imbalanced parenthesis' do
91
- let(:filename) { File.expand_path('fixtures/changelogs/imbalanced.md', __dir__) }
92
- it 'is invalid' do
93
- expect(subject.bad_lines?).to be true
94
- end
95
- it 'reports all bad lines' do
96
- expect(subject.bad_lines).to eq [
97
- "### 0.0.0)\n",
98
- "### (0.0.1\n",
99
- "### 1.2.3 (2018/1/1\n",
100
- "### 0.1.0 2018/1/1)\n",
101
- "### 0 ((2018/1/1)\n",
102
- "### 0. [2018/1/1)\n",
103
- "### 0.1. (2018/1/1)]\n"
104
- ]
8
+
9
+ describe 'with the default format checker' do
10
+ context 'minimal example' do
11
+ let(:filename) { File.expand_path('fixtures/changelogs/minimal.md', __dir__) }
12
+ it 'exists?' do
13
+ expect(subject.exists?).to be true
14
+ end
15
+ it 'bad_lines?' do
16
+ expect(subject.bad_lines).to eq []
17
+ expect(subject.bad_lines?).to be false
18
+ end
19
+ it 'is valid' do
20
+ expect(subject.bad_lines?).to be false
21
+ end
22
+ it 'has your contribution here' do
23
+ expect(subject.global_failures?).to be false
24
+ end
25
+ end
26
+ context 'missing your contribution here' do
27
+ let(:filename) { File.expand_path('fixtures/changelogs/missing_your_contribution_here.md', __dir__) }
28
+ it 'is valid' do
29
+ expect(subject.bad_lines?).to be false
30
+ end
31
+ it 'is missing your contribution here' do
32
+ expect(subject.global_failures?).to be true
33
+ end
34
+ end
35
+ context 'does not exist' do
36
+ let(:filename) { 'whatever.md' }
37
+ it 'exists?' do
38
+ expect(subject.exists?).to be false
39
+ end
40
+ it 'bad_lines?' do
41
+ expect(subject.bad_lines).to be_empty
42
+ expect(subject.bad_lines?).to be false
43
+ end
44
+ end
45
+ context 'with bad lines' do
46
+ let(:filename) { File.expand_path('fixtures/changelogs/lines.md', __dir__) }
47
+ it 'is invalid' do
48
+ expect(subject.bad_lines?).to be true
49
+ end
50
+ it 'reports all bad lines' do
51
+ expect(subject.bad_lines).to eq [
52
+ "Missing star - [@dblock](https://github.com/dblock).\n",
53
+ "* [#1](https://github.com/dblock/danger-changelog/pull/1) - Not a colon - [@dblock](https://github.com/dblock).\n",
54
+ "* [#1](https://github.com/dblock/danger-changelog/pull/1): No final period - [@dblock](https://github.com/dblock)\n",
55
+ "# [#1](https://github.com/dblock/danger-changelog/pull/1): Hash instead of star - [@dblock](https://github.com/dblock).\n",
56
+ "* [#1](https://github.com/dblock/danger-changelog/pull/1): Extra period. - [@dblock](https://github.com/dblock).\n",
57
+ "* [#1](https://github.com/dblock/danger-changelog/pull/1): Unbalanced ( - [@dblock](https://github.com/dblock).\n",
58
+ "* [#1](https://github.com/dblock/danger-changelog/pull/1): Unbalanced ] - [@dblock](https://github.com/dblock).\n"
59
+ ]
60
+ end
61
+ it 'has your contribution here' do
62
+ expect(subject.global_failures?).to be false
63
+ end
64
+ end
65
+ context 'with bad dates' do
66
+ let(:filename) { File.expand_path('fixtures/changelogs/dates.md', __dir__) }
67
+ it 'is invalid' do
68
+ expect(subject.bad_lines?).to be true
69
+ end
70
+ it 'reports all bad dates' do
71
+ expect(subject.bad_lines).to eq [
72
+ "### 1.2.3 (1/2/2018)\n",
73
+ "### 1.2.3 (2018/13/1)\n",
74
+ "### 1.2.3 (2018/13)\n",
75
+ "### 1.2.3 (2018/1/1/3)\n"
76
+ ]
77
+ end
78
+ end
79
+ context 'with bad semver' do
80
+ let(:filename) { File.expand_path('fixtures/changelogs/semver.md', __dir__) }
81
+ it 'is invalid' do
82
+ expect(subject.bad_lines?).to be true
83
+ end
84
+ it 'reports all bad dates' do
85
+ expect(subject.bad_lines).to eq [
86
+ "### 0 (2018/1/1)\n",
87
+ "### 0. (2018/1/1)\n",
88
+ "### 0.1. (2018/1/1)\n"
89
+ ]
90
+ end
91
+ end
92
+ context 'with imbalanced parenthesis' do
93
+ let(:filename) { File.expand_path('fixtures/changelogs/imbalanced.md', __dir__) }
94
+ it 'is invalid' do
95
+ expect(subject.bad_lines?).to be true
96
+ end
97
+ it 'reports all bad lines' do
98
+ expect(subject.bad_lines).to eq [
99
+ "### 0.0.0)\n",
100
+ "### (0.0.1\n",
101
+ "### 1.2.3 (2018/1/1\n",
102
+ "### 0.1.0 2018/1/1)\n",
103
+ "### 0 ((2018/1/1)\n",
104
+ "### 0. [2018/1/1)\n",
105
+ "### 0.1. (2018/1/1)]\n"
106
+ ]
107
+ end
105
108
  end
106
109
  end
107
110
  end
@@ -77,7 +77,7 @@ describe Danger::Changelog do
77
77
 
78
78
  context 'is_changelog_format_correct?' do
79
79
  subject do
80
- changelog.is_changelog_format_correct?
80
+ changelog.is_changelog_format_correct?(Danger::Changelog::Parsers.default_format)
81
81
  end
82
82
 
83
83
  context 'without a CHANGELOG file' do
@@ -178,7 +178,7 @@ describe Danger::Changelog do
178
178
 
179
179
  it 'complains' do
180
180
  expect(subject).to be false
181
- expect(status_report[:errors]).to eq ["One of the lines below found in #{filename} doesn't match the expected format. Please make it look like the other lines, pay attention to version numbers, periods, spaces and date formats."]
181
+ expect(status_report[:errors]).to eq ["One of the lines below found in #{filename} doesn't match the [expected format](https://github.com/dblock/danger-changelog/blob/master/README.md#whats-a-correctly-formatted-changelog-file). Please make it look like the other lines, pay attention to version numbers, periods, spaces and date formats."]
182
182
  expect(status_report[:warnings]).to eq []
183
183
  expect(status_report[:markdowns].map(&:message)).to eq [
184
184
  "```markdown\n* Your contribution here.\n```\n"
@@ -191,7 +191,7 @@ describe Danger::Changelog do
191
191
  let(:filename) { File.expand_path('fixtures/changelogs/lines.md', __dir__) }
192
192
  it 'complains' do
193
193
  expect(subject).to be false
194
- expect(status_report[:errors]).to eq ["One of the lines below found in #{filename} doesn't match the expected format. Please make it look like the other lines, pay attention to version numbers, periods, spaces and date formats."]
194
+ expect(status_report[:errors]).to eq ["One of the lines below found in #{filename} doesn't match the [expected format](https://github.com/dblock/danger-changelog/blob/master/README.md#whats-a-correctly-formatted-changelog-file). Please make it look like the other lines, pay attention to version numbers, periods, spaces and date formats."]
195
195
  expect(status_report[:warnings]).to eq []
196
196
  expect(status_report[:markdowns].map(&:message)).to eq [
197
197
  "```markdown\nMissing star - [@dblock](https://github.com/dblock).\n```\n",
@@ -208,4 +208,60 @@ describe Danger::Changelog do
208
208
  end
209
209
  end
210
210
  end
211
+
212
+ describe 'with the Keep a Changelog format' do
213
+ let(:filename) { File.expand_path('fixtures/changelogs/keep_a_changelog.md', __dir__) }
214
+ let(:dangerfile) { testing_dangerfile }
215
+ let(:changelog) do
216
+ dangerfile.changelog.filename = filename
217
+ dangerfile.changelog
218
+ end
219
+ let(:status_report) { changelog.status_report }
220
+
221
+ describe 'in a PR' do
222
+ before do
223
+ changelog.env.request_source.pr_json = {
224
+ 'number' => 123,
225
+ 'title' => 'being dangerous',
226
+ 'html_url' => 'https://github.com/dblock/danger-changelog/pull/123',
227
+ 'user' => {
228
+ 'login' => 'dblock'
229
+ }
230
+ }
231
+ end
232
+
233
+ context '#check(:keep_a_changelog)' do
234
+ subject { changelog.check(:keep_a_changelog) }
235
+
236
+ context 'without CHANGELOG changes' do
237
+ before do
238
+ allow(changelog.git).to receive(:modified_files).and_return([])
239
+ allow(changelog.git).to receive(:added_files).and_return([])
240
+ end
241
+
242
+ it 'complains when no CHANGELOG can be found' do
243
+ expect(subject).to be false
244
+ expect(status_report[:errors]).to eq []
245
+ expect(status_report[:warnings]).to eq ["Unless you're refactoring existing code or improving documentation, please update #{filename}."]
246
+ expect(status_report[:markdowns].map(&:message)).to eq ["Here's an example of a #{filename} entry:\n\n```markdown\n* [#123](https://github.com/dblock/danger-changelog/pull/123): Being dangerous - [@dblock](https://github.com/dblock).\n```\n"]
247
+ end
248
+ end
249
+
250
+ context 'with CHANGELOG changes' do
251
+ before do
252
+ allow(changelog.git).to receive(:modified_files).and_return([filename])
253
+ allow(changelog.git).to receive(:added_files).and_return([])
254
+ end
255
+
256
+ it 'has no complaints' do
257
+ subject
258
+ # expect(subject).to be true
259
+ expect(status_report[:errors]).to eq []
260
+ expect(status_report[:warnings]).to eq []
261
+ expect(status_report[:markdowns]).to eq []
262
+ end
263
+ end
264
+ end
265
+ end
266
+ end
211
267
  end
@@ -0,0 +1,161 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [1.0.0] - 2017-06-20
11
+
12
+ ### Added
13
+
14
+ - New visual identity by [@tylerfortune8](https://github.com/tylerfortune8).
15
+ - Version navigation.
16
+ - Links to latest released version in previous versions.
17
+ - "Why keep a changelog?" section.
18
+ - "Who needs a changelog?" section.
19
+ - "How do I make a changelog?" section.
20
+ - "Frequently Asked Questions" section.
21
+ - New "Guiding Principles" sub-section to "How do I make a changelog?".
22
+ - Simplified and Traditional Chinese translations from [@tianshuo](https://github.com/tianshuo).
23
+ - German translation from [@mpbzh](https://github.com/mpbzh) & [@Art4](https://github.com/Art4).
24
+ - Italian translation from [@azkidenz](https://github.com/azkidenz).
25
+ - Swedish translation from [@magol](https://github.com/magol).
26
+ - Turkish translation from [@karalamalar](https://github.com/karalamalar).
27
+ - French translation from [@zapashcanon](https://github.com/zapashcanon).
28
+ - Brazilian Portugese translation from [@Webysther](https://github.com/Webysther).
29
+ - Polish translation from [@amielucha](https://github.com/amielucha) & [@m-aciek](https://github.com/m-aciek).
30
+ - Russian translation from [@aishek](https://github.com/aishek).
31
+ - Czech translation from [@h4vry](https://github.com/h4vry).
32
+ - Slovak translation from [@jkostolansky](https://github.com/jkostolansky).
33
+ - Korean translation from [@pierceh89](https://github.com/pierceh89).
34
+ - Croatian translation from [@porx](https://github.com/porx).
35
+ - Persian translation from [@Hameds](https://github.com/Hameds).
36
+ - Ukrainian translation from [@osadchyi-s](https://github.com/osadchyi-s).
37
+
38
+ ### Changed
39
+
40
+ - Start using "changelog" over "change log" since it's the common usage.
41
+ - Start versioning based on the current English version at 0.3.0 to help
42
+ translation authors keep things up-to-date.
43
+ - Rewrite "What makes unicorns cry?" section.
44
+ - Rewrite "Ignoring Deprecations" sub-section to clarify the ideal
45
+ scenario.
46
+ - Improve "Commit log diffs" sub-section to further argument against
47
+ them.
48
+ - Merge "Why can’t people just use a git log diff?" with "Commit log
49
+ diffs"
50
+ - Fix typos in Simplified Chinese and Traditional Chinese translations.
51
+ - Fix typos in Brazilian Portuguese translation.
52
+ - Fix typos in Turkish translation.
53
+ - Fix typos in Czech translation.
54
+ - Fix typos in Swedish translation.
55
+ - Improve phrasing in French translation.
56
+ - Fix phrasing and spelling in German translation.
57
+
58
+ ### Removed
59
+
60
+ - Section about "changelog" vs "CHANGELOG".
61
+
62
+ ## [0.3.0] - 2015-12-03
63
+
64
+ ### Added
65
+
66
+ - RU translation from [@aishek](https://github.com/aishek).
67
+ - pt-BR translation from [@tallesl](https://github.com/tallesl).
68
+ - es-ES translation from [@ZeliosAriex](https://github.com/ZeliosAriex).
69
+
70
+ ## [0.2.0] - 2015-10-06
71
+
72
+ ### Changed
73
+
74
+ - Remove exclusionary mentions of "open source" since this project can
75
+ benefit both "open" and "closed" source projects equally.
76
+
77
+ ## [0.1.0] - 2015-10-06
78
+
79
+ ### Added
80
+
81
+ - Answer "Should you ever rewrite a change log?".
82
+
83
+ ### Changed
84
+
85
+ - Improve argument against commit logs.
86
+ - Start following [SemVer](https://semver.org) properly.
87
+
88
+ ## [0.0.8] - 2015-02-17
89
+
90
+ ### Changed
91
+
92
+ - Update year to match in every README example.
93
+ - Reluctantly stop making fun of Brits only, since most of the world
94
+ writes dates in a strange way.
95
+
96
+ ### Fixed
97
+
98
+ - Fix typos in recent README changes.
99
+ - Update outdated unreleased diff link.
100
+
101
+ ## [0.0.7] - 2015-02-16
102
+
103
+ ### Added
104
+ - Link, and make it obvious that date format is ISO 8601.
105
+
106
+ ### Changed
107
+ - Clarified the section on "Is there a standard change log format?".
108
+
109
+ ### Fixed
110
+ - Fix Markdown links to tag comparison URL with footnote-style links.
111
+
112
+ ## [0.0.6] - 2014-12-12
113
+
114
+ ### Added
115
+ - README section on "yanked" releases.
116
+
117
+ ## [0.0.5] - 2014-08-09
118
+
119
+ ### Added
120
+ - Markdown links to version tags on release headings.
121
+ - Unreleased section to gather unreleased changes and encourage note
122
+ keeping prior to releases.
123
+
124
+ ## [0.0.4] - 2014-08-09
125
+
126
+ ### Added
127
+ - Better explanation of the difference between the file ("CHANGELOG")
128
+ and its function "the change log".
129
+
130
+ ### Changed
131
+ - Refer to a "change log" instead of a "CHANGELOG" throughout the site
132
+ to differentiate between the file and the purpose of the file — the
133
+ logging of changes.
134
+
135
+ ### Removed
136
+ - Remove empty sections from CHANGELOG, they occupy too much space and
137
+ create too much noise in the file. People will have to assume that the
138
+ missing sections were intentionally left out because they contained no
139
+ notable changes.
140
+
141
+ ## [0.0.3] - 2014-08-09
142
+
143
+ ### Added
144
+ - "Why should I care?" section mentioning The Changelog podcast.
145
+
146
+ ## [0.0.2] - 2014-07-10
147
+
148
+ ### Added
149
+
150
+ - Explanation of the recommended reverse chronological release ordering.
151
+
152
+ ## [0.0.1] - 2014-05-31
153
+
154
+ ### Added
155
+
156
+ - This CHANGELOG file to hopefully serve as an evolving example of a
157
+ standardized open source project CHANGELOG.
158
+ - CNAME file to enable GitHub Pages custom domain
159
+ - README now contains answers to common questions about CHANGELOGs
160
+ - Good examples and basic guidelines, including proper date formatting.
161
+ - Counter-examples: "What makes unicorns cry?"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danger-changelog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - dblock
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-21 00:00:00.000000000 Z
11
+ date: 2019-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: danger-plugin-api
@@ -186,6 +186,8 @@ files:
186
186
  - RELEASING.md
187
187
  - Rakefile
188
188
  - danger-changelog.gemspec
189
+ - doc/intridea.md
190
+ - doc/keep_a_changelog.md
189
191
  - images/have_you_updated_changelog.png
190
192
  - images/is_changelog_format_correct.png
191
193
  - lib/changelog/changelog_file.rb
@@ -196,6 +198,10 @@ files:
196
198
  - lib/changelog/changelog_line/changelog_placeholder_line.rb
197
199
  - lib/changelog/config.rb
198
200
  - lib/changelog/gem_version.rb
201
+ - lib/changelog/parsers.rb
202
+ - lib/changelog/parsers/base.rb
203
+ - lib/changelog/parsers/intridea_format.rb
204
+ - lib/changelog/parsers/keep_a_changelog.rb
199
205
  - lib/changelog/plugin.rb
200
206
  - lib/danger_changelog.rb
201
207
  - lib/danger_plugin.rb
@@ -209,6 +215,7 @@ files:
209
215
  - spec/fixtures/changelogs/customized.md
210
216
  - spec/fixtures/changelogs/dates.md
211
217
  - spec/fixtures/changelogs/imbalanced.md
218
+ - spec/fixtures/changelogs/keep_a_changelog.md
212
219
  - spec/fixtures/changelogs/lines.md
213
220
  - spec/fixtures/changelogs/minimal.md
214
221
  - spec/fixtures/changelogs/missing_your_contribution_here.md
@@ -234,8 +241,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
234
241
  - !ruby/object:Gem::Version
235
242
  version: '0'
236
243
  requirements: []
237
- rubyforge_project:
238
- rubygems_version: 2.7.6
244
+ rubygems_version: 3.0.3
239
245
  signing_key:
240
246
  specification_version: 4
241
247
  summary: A danger.systems plugin that is OCD about your CHANGELOG.
@@ -250,6 +256,7 @@ test_files:
250
256
  - spec/fixtures/changelogs/customized.md
251
257
  - spec/fixtures/changelogs/dates.md
252
258
  - spec/fixtures/changelogs/imbalanced.md
259
+ - spec/fixtures/changelogs/keep_a_changelog.md
253
260
  - spec/fixtures/changelogs/lines.md
254
261
  - spec/fixtures/changelogs/minimal.md
255
262
  - spec/fixtures/changelogs/missing_your_contribution_here.md