release-notes 3.1.0 → 4.0.0.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE.md +0 -1
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -7
- data/CHANGELOG.md +26 -0
- data/README.md +127 -64
- data/bin/publish +4 -14
- data/exe/release-notes +1 -3
- data/lib/generators/release/notes/install/templates/release_notes.rb +13 -6
- data/lib/release/notes.rb +4 -10
- data/lib/release/notes/cmd.rb +28 -0
- data/lib/release/notes/configurable.rb +29 -8
- data/lib/release/notes/configuration.rb +52 -35
- data/lib/release/notes/errors.rb +8 -0
- data/lib/release/notes/git.rb +2 -2
- data/lib/release/notes/link.rb +1 -1
- data/lib/release/notes/log.rb +31 -15
- data/lib/release/notes/tag.rb +15 -3
- data/lib/release/notes/version.rb +1 -1
- data/lib/release/notes/write.rb +1 -1
- data/release-notes.gemspec +1 -0
- metadata +20 -5
- data/lib/tasks/update_release_notes.rake +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49daa419cb2bdfedfabbc46ebeca75fc652d578e7f998578b0d23ea56774f1fe
|
4
|
+
data.tar.gz: 89d93e9ff6270daccf930ae5726b4f6e4cfee434d86ccac17798faf99d69d8fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f207807fbf4170880c6d2a098a0153345f1e99f5a889fd76ea045e0e30684215be09aceeaeced121e9e3054a293b9b7b0672d257d9601944957ee5e504d0fd9b
|
7
|
+
data.tar.gz: 6b9f2670203e27019a0df4459b041aab6d3eaaa4db501a8d6713a1e74de598fe3d7858919b9146a5615a0efb9925463af662f14bde1f0437a055649da60d3042
|
data/.github/ISSUE_TEMPLATE.md
CHANGED
@@ -9,12 +9,5 @@ Fixes # (issue)
|
|
9
9
|
## Checklist
|
10
10
|
|
11
11
|
- [ ] My code follows the style guidelines of this project
|
12
|
-
- [ ] I have rebased the branch with the latest code from master
|
13
|
-
- [ ] I have performed a self-review of my own code
|
14
|
-
- [ ] I have commented my code, particularly in hard-to-understand areas, and at the top of new interactors
|
15
12
|
- [ ] I have added tests that prove my fix is effective or that my feature works
|
16
13
|
- [ ] The build is passing
|
17
|
-
|
18
|
-
## Screenshots (if applicable)
|
19
|
-
|
20
|
-
## Dependencies introduced
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,31 @@
|
|
1
1
|
# Release Notes
|
2
2
|
|
3
|
+
## v4.0.0.pre
|
4
|
+
|
5
|
+
**Implemented enhancements:**
|
6
|
+
|
7
|
+
- Update README remove git workflow recomendations for now
|
8
|
+
- Add in new Release::Notes::Cmd
|
9
|
+
- Add in predicate methods for Configuration
|
10
|
+
|
11
|
+
**Fixed bugs:**
|
12
|
+
|
13
|
+
- Fix cops
|
14
|
+
- Remove backslash for linked labels
|
15
|
+
- Remove rake task. Just support binstub usage
|
16
|
+
- Fix up github templates
|
17
|
+
|
18
|
+
**Miscellaneous:**
|
19
|
+
|
20
|
+
- Another README update
|
21
|
+
- Update README and template in generator
|
22
|
+
|
23
|
+
## v3.1.0
|
24
|
+
|
25
|
+
**Implemented enhancements:**
|
26
|
+
|
27
|
+
- Add configurable option for format when grabbing git tags
|
28
|
+
|
3
29
|
## v3.0.0
|
4
30
|
|
5
31
|
**Implemented enhancements:**
|
data/README.md
CHANGED
@@ -63,38 +63,144 @@ $ bundle exec rake release:notes:install
|
|
63
63
|
Override any of these defaults in `config/initializers/release_notes.rb`:
|
64
64
|
|
65
65
|
```ruby
|
66
|
+
# frozen_string_literal: true
|
67
|
+
|
66
68
|
Release::Notes.configure do |config|
|
67
|
-
|
68
|
-
|
69
|
+
# The absolute path of your generated log.
|
70
|
+
# Defaults to `./RELEASE_NOTES.md`.
|
71
|
+
# @return [String]
|
72
|
+
config.output_file = "./RELEASE_NOTES.md"
|
73
|
+
|
74
|
+
# The absolute path of the temporary generated log.
|
75
|
+
# Defaults to `./release-notes.tmp.md`.
|
76
|
+
# @return [String]
|
77
|
+
config.temp_file = "./release-notes.tmp.md"
|
78
|
+
|
79
|
+
# Determines whether to print commits with more than one parent.
|
80
|
+
# Defaults to `false`. For more, see
|
81
|
+
# [Git Log Docs](https://git-scm.com/docs/git-log)
|
82
|
+
# @return [Boolean]
|
69
83
|
config.include_merges = false
|
84
|
+
|
85
|
+
# Match the regular expression limiting patterns without regard to letter case
|
86
|
+
# when printing your git log.
|
87
|
+
# Defaults to `true`. For more, see
|
88
|
+
# [Git Log Docs](https://git-scm.com/docs/git-log)
|
89
|
+
# @return [Boolean]
|
70
90
|
config.ignore_case = true
|
91
|
+
|
92
|
+
# Consider the limiting patterns to be extended regular expressions patterns
|
93
|
+
# when printing your git log.
|
94
|
+
# Defaults to `true`. For more, see
|
95
|
+
# [Git Log Docs](https://git-scm.com/docs/git-log)
|
96
|
+
# @return [Boolean]
|
71
97
|
config.extended_regex = true
|
98
|
+
|
99
|
+
# Controls the header used in your generated log for all tags.
|
100
|
+
# "tag" and "date" are the two valid options
|
101
|
+
# Defaults to `tag`.
|
102
|
+
# @return [String]
|
72
103
|
config.header_title = "tag"
|
104
|
+
|
105
|
+
# Allows you to specify what information you want to print from your git log
|
106
|
+
# Defaults to `%s` for subject. For more, see
|
107
|
+
# [Git Log Docs](https://git-scm.com/docs/git-log)
|
108
|
+
# @return [String]
|
73
109
|
config.bug_labels = %w(Fix Update)
|
110
|
+
|
111
|
+
# Controls the labels grepped for in your commit subjects that will
|
112
|
+
# be add under you feature title
|
113
|
+
# Defaults to `%w(Add Create)`.
|
114
|
+
# @return [Array]
|
74
115
|
config.feature_labels = %w(Add Create)
|
116
|
+
|
117
|
+
# Controls the labels grepped for in your commit subjects that will
|
118
|
+
# be add under you miscellaneous title
|
119
|
+
# Defaults to `%w(Refactor)`.
|
120
|
+
# @return [Array]
|
75
121
|
config.misc_labels = %w(Refactor)
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
122
|
+
|
123
|
+
# Controls the title used in your generated log for all bugs listed
|
124
|
+
# Defaults to `**Fixed bugs:**`.
|
125
|
+
# @return [String]
|
126
|
+
config.bug_title = "**Fixed bugs:**"
|
127
|
+
|
128
|
+
# Controls the title used in your generated log for all features listed
|
129
|
+
# Defaults to `**Implemented enhancements:**`.
|
130
|
+
# @return [String]
|
131
|
+
config.feature_title = "**Implemented enhancements:**"
|
132
|
+
|
133
|
+
# Controls the title used in your generated log for all misc commits listed
|
134
|
+
# Defaults to `**Miscellaneous:**`.
|
135
|
+
# @return [String]
|
136
|
+
config.misc_title = "**Miscellaneous:**"
|
137
|
+
|
138
|
+
# Controls the title used in your generated log for all commits listed
|
139
|
+
# Defaults to `**Other:**`.
|
140
|
+
# @return [String]
|
141
|
+
config.log_all_title = "**Other:**"
|
142
|
+
|
143
|
+
# Controls whether all logs that do not match the other labels are listed
|
144
|
+
# Defaults to `false`
|
145
|
+
# @return [Boolean]
|
80
146
|
config.log_all = false
|
147
|
+
|
148
|
+
# The labels grepped for in your commit subject that you want to linkify.
|
149
|
+
# The index within the array must match the index for the site
|
150
|
+
# in `:link_to_humanize` and `:link_to_sites`.
|
151
|
+
# Defaults to `[]`.
|
152
|
+
# @return [Array]
|
81
153
|
config.link_to_labels = %w()
|
154
|
+
|
155
|
+
# The humanized output that you'd like to represent the associated `:link_to_label`
|
156
|
+
# The index within the array must match the index for the site
|
157
|
+
# in `:link_to_label` and `:link_to_sites`.
|
158
|
+
# Defaults to `[]`.
|
159
|
+
# @return [Array]
|
82
160
|
config.link_to_humanize = %w()
|
161
|
+
|
162
|
+
# The url for the site that you'd like to represent the associated `:link_to_label`
|
163
|
+
# The index within the array must match the index for the site
|
164
|
+
# in `:link_to_label` and `:link_to_humanize`.
|
165
|
+
# Defaults to `[]`.
|
166
|
+
# @return [Array]
|
83
167
|
config.link_to_sites = %w()
|
84
|
-
|
168
|
+
|
169
|
+
# Sets the timezone that should be used for setting the date.
|
170
|
+
# Defaults to `America/New_York`. For more, see
|
171
|
+
# [ActiveSupport Time Zones](http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html)
|
172
|
+
# @return [String]
|
173
|
+
config.timezone = "America/New_York"
|
174
|
+
|
175
|
+
# Controls whether your commit subject labels should be removed from the final
|
176
|
+
# ouput of your message on the generated log.
|
177
|
+
# Defaults to `false`.
|
178
|
+
# @return [Boolean]
|
85
179
|
config.prettify_messages = false
|
86
|
-
|
180
|
+
|
181
|
+
# If a commit message contains words that match more than
|
182
|
+
# one group of labels as defined in your configuration, the output
|
183
|
+
# will only contain the commit once.
|
184
|
+
# Defaults to `true`.
|
185
|
+
# @return [Boolean]
|
87
186
|
config.single_label = true
|
187
|
+
|
188
|
+
# Controls what will be passed to the format flag in `git for-each-ref`
|
189
|
+
# Defaults to `tag`.
|
190
|
+
# @return [String]
|
191
|
+
config.for_each_ref_format = "tag"
|
192
|
+
|
193
|
+
# Determines whether to use the last two tags to
|
194
|
+
# find commits for the output or if this gem should just
|
195
|
+
# find all commits after previous tag
|
196
|
+
# Defaults to `true`.
|
197
|
+
# @return [Boolean]
|
198
|
+
config.update_release_notes_before_tag = true
|
88
199
|
end
|
89
200
|
```
|
90
201
|
|
91
|
-
For more information about each individual setting checkout Release::Notes's
|
92
|
-
[config docs](https://www.rubydoc.info/gems/release-notes).
|
93
|
-
|
94
202
|
## Usage
|
95
203
|
|
96
|
-
### TL;DR
|
97
|
-
|
98
204
|
Install the binstub
|
99
205
|
|
100
206
|
```sh
|
@@ -104,62 +210,19 @@ $ bundle binstubs release-notes
|
|
104
210
|
and run
|
105
211
|
|
106
212
|
```sh
|
107
|
-
|
213
|
+
# make sure to pass your tag if updating before you've pushed the latest tag
|
214
|
+
$ bin/release-notes -t v0.2.0
|
215
|
+
# OR if running for the first time on a project that might have commits after the latest tag
|
216
|
+
$ bin/release-notes --ignore-head
|
217
|
+
# OR if using an output file that already exists in a project but would like to rerun all git tags
|
218
|
+
$ bin/release-notes --force-rewrite
|
108
219
|
```
|
109
220
|
|
110
|
-
|
111
|
-
|
112
|
-
```sh
|
113
|
-
$ bundle exec rake update_release_notes:run
|
114
|
-
```
|
115
|
-
|
116
|
-
### Git Worklow
|
117
|
-
|
118
|
-
Release::Notes works best with a rebase workflow and requires tagging. General rebase benefits include:
|
119
|
-
|
120
|
-
- One clear commit per feature, bug or miscellaneous addition to the codebase
|
121
|
-
- Commits in logical time manner
|
122
|
-
|
123
|
-
By default configuration, Release::Notes ignores merges. Along with rebasing, by deafult,
|
124
|
-
Release::Notes relies mainly on the subject of a commit. Therefore, it's important to craft concise and
|
125
|
-
meaningful commit subjects with longer bodies as needed for larger feature additions or bug fixes.
|
126
|
-
|
127
|
-
For more information about a rebase workflow or crafting solid commit messages
|
128
|
-
check out the following links
|
129
|
-
|
130
|
-
- [Commit Messages](http://chris.beams.io/posts/git-commit/)
|
131
|
-
- [Git Rebase Workflow](https://git-scm.com/book/en/v2/Git-Branching-Rebasing)
|
132
|
-
|
133
|
-
### Deploying with Capistrano
|
134
|
-
|
135
|
-
A sample capistrano rake task might look like:
|
136
|
-
|
137
|
-
```ruby
|
138
|
-
# config/deploy/production.rb
|
139
|
-
namespace :deploy do
|
140
|
-
before :starting, :update_release_notes
|
141
|
-
|
142
|
-
task :update_release_notes do
|
143
|
-
# use the binstub
|
144
|
-
sh 'bin/release-notes"'
|
145
|
-
|
146
|
-
# Then check in your release notes with a commit
|
147
|
-
sh "git commit -am 'Release to production #{Time.zone.now}'"
|
148
|
-
sh "git push origin master"
|
149
|
-
end
|
150
|
-
end
|
151
|
-
```
|
152
|
-
|
153
|
-
Useful information can be found here regarding the
|
154
|
-
[capistrano flow](http://capistranorb.com/documentation/getting-started/flow/).
|
155
|
-
|
156
|
-
**From there, make sure you tag your releases**
|
157
|
-
|
158
|
-
## Note
|
221
|
+
## Important Notes
|
159
222
|
|
160
223
|
- Your project must tag releases(release-notes uses the tag date to output the changes)
|
161
224
|
(PR's to make this more flexible are welcome)
|
162
|
-
- Linking is opinionated and will link to a URI structure of `#{site-url}
|
225
|
+
- Linking is opinionated and will link to a URI structure of `#{site-url}#{issue_number}`. It
|
163
226
|
will ouput something like: `[HONEYBADGER #33150353](https://app.honeybadger.io/projects/9999/faults/33150353)`.
|
164
227
|
This also means that your link_to_labels have to be something like `['HB #']` (PR's to make this more flexible are welcome)
|
165
228
|
|
data/bin/publish
CHANGED
@@ -48,10 +48,12 @@ FileUtils.chdir APP_ROOT do
|
|
48
48
|
end
|
49
49
|
FILE
|
50
50
|
|
51
|
-
|
52
51
|
puts "== Updating version to #{current_version.join('.')} =="
|
53
52
|
File.write("lib/release/notes/version.rb", contents)
|
54
53
|
|
54
|
+
puts "== Release Notes =="
|
55
|
+
system! "exe/release-notes generate -t #{current_version.join('.')}"
|
56
|
+
|
55
57
|
puts "== Adding Changed Files =="
|
56
58
|
system! "git add ."
|
57
59
|
|
@@ -60,16 +62,4 @@ FileUtils.chdir APP_ROOT do
|
|
60
62
|
|
61
63
|
puts "== Tagging release =="
|
62
64
|
system! "bundle exec rake release"
|
63
|
-
|
64
|
-
puts "== Release Notes =="
|
65
|
-
system! "exe/release-notes"
|
66
|
-
|
67
|
-
puts "== Adding updated CHANGELOG =="
|
68
|
-
system! "git add CHANGELOG.md"
|
69
|
-
|
70
|
-
puts "== Committing updated files =="
|
71
|
-
system! "git commit -m 'Modify CHANGELOG.md'"
|
72
|
-
|
73
|
-
puts "== Pushing updated files =="
|
74
|
-
system! "git push origin master"
|
75
|
-
end
|
65
|
+
end
|
data/exe/release-notes
CHANGED
@@ -12,9 +12,7 @@ file = File.exist?(rails_config_file) ? rails_config_file : config_file
|
|
12
12
|
|
13
13
|
begin
|
14
14
|
require file
|
15
|
-
|
16
|
-
Release::Notes.generate
|
17
|
-
warn "=> Done!"
|
15
|
+
Release::Notes::Cmd.start(ARGV)
|
18
16
|
rescue LoadError
|
19
17
|
warn "=> Missing release_notes.rb configuration file"
|
20
18
|
rescue SignalException => e
|
@@ -113,15 +113,22 @@ Release::Notes.configure do |config|
|
|
113
113
|
# @return [Boolean]
|
114
114
|
# config.prettify_messages = false
|
115
115
|
|
116
|
-
# Controls whether to rewrite the output file or append to it.
|
117
|
-
# Defaults to `false`.
|
118
|
-
# @return [Boolean]
|
119
|
-
# config.force_rewrite = false
|
120
|
-
|
121
116
|
# If a commit message contains words that match more than
|
122
117
|
# one group of labels as defined in your configuration, the output
|
123
118
|
# will only contain the commit once.
|
124
119
|
# Defaults to `true`.
|
125
120
|
# @return [Boolean]
|
126
|
-
#
|
121
|
+
# config.single_label = true
|
122
|
+
|
123
|
+
# Controls what will be passed to the format flag in `git for-each-ref`
|
124
|
+
# Defaults to `tag`.
|
125
|
+
# @return [String]
|
126
|
+
# config.for_each_ref_format = "tag"
|
127
|
+
|
128
|
+
# Determines whether to use the last two tags to
|
129
|
+
# find commits for the output or if this gem should just
|
130
|
+
# find all commits after previous tag
|
131
|
+
# Defaults to `true`.
|
132
|
+
# @return [Boolean]
|
133
|
+
# config.update_release_notes_before_tag = true
|
127
134
|
end
|
data/lib/release/notes.rb
CHANGED
@@ -3,6 +3,10 @@
|
|
3
3
|
require "active_support"
|
4
4
|
require "active_support/core_ext/time"
|
5
5
|
|
6
|
+
require "thor"
|
7
|
+
require "release/notes/cmd"
|
8
|
+
|
9
|
+
require "release/notes/errors"
|
6
10
|
require "release/notes/configurable"
|
7
11
|
require "release/notes/date_formatter"
|
8
12
|
require "release/notes/link"
|
@@ -26,19 +30,9 @@ module Release
|
|
26
30
|
NEWLINE = "\n"
|
27
31
|
|
28
32
|
class << self
|
29
|
-
def generate
|
30
|
-
log.perform
|
31
|
-
end
|
32
|
-
|
33
33
|
def root
|
34
34
|
File.expand_path("..", __dir__)
|
35
35
|
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
def log
|
40
|
-
Log.new
|
41
|
-
end
|
42
36
|
end
|
43
37
|
end
|
44
38
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Release
|
4
|
+
module Notes
|
5
|
+
class Cmd < Thor
|
6
|
+
desc "generate", "Generate release notes"
|
7
|
+
option :tag, type: :string,
|
8
|
+
aliases: "-t",
|
9
|
+
desc: "The latest tag to use on the file title if the tag is not yet pushed"
|
10
|
+
option :'force-rewrite', type: :boolean,
|
11
|
+
default: false,
|
12
|
+
aliases: "-r",
|
13
|
+
desc: "Force release-notes to look at all previous "\
|
14
|
+
"tags and rewrite the output file"
|
15
|
+
option :'ignore-head', type: :boolean,
|
16
|
+
default: false,
|
17
|
+
aliases: "-i",
|
18
|
+
desc: "If updating your changelog and you don't want the latest commits "\
|
19
|
+
"from the last tag to HEAD in a single "\
|
20
|
+
"instance of running, set to true"
|
21
|
+
def generate
|
22
|
+
warn "=> Generating release notes..."
|
23
|
+
Log.new(options).perform
|
24
|
+
warn "=> Done!"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -3,14 +3,35 @@
|
|
3
3
|
module Release
|
4
4
|
module Notes
|
5
5
|
module Configurable
|
6
|
-
delegate :
|
7
|
-
:
|
8
|
-
:
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:
|
12
|
-
:
|
13
|
-
:
|
6
|
+
delegate :all_labels,
|
7
|
+
:bug_title,
|
8
|
+
:bugs,
|
9
|
+
:feature_title,
|
10
|
+
:features,
|
11
|
+
:for_each_ref_format,
|
12
|
+
:force_rewrite?,
|
13
|
+
:grep_insensitive_flag,
|
14
|
+
:header_title_type,
|
15
|
+
:ignore_head?,
|
16
|
+
:link_commits?,
|
17
|
+
:link_to_humanize,
|
18
|
+
:link_to_labels,
|
19
|
+
:link_to_sites,
|
20
|
+
:log_all,
|
21
|
+
:log_all_title,
|
22
|
+
:merge_flag,
|
23
|
+
:misc,
|
24
|
+
:misc_title,
|
25
|
+
:newest_tag,
|
26
|
+
:output_file,
|
27
|
+
:prettify_messages?,
|
28
|
+
:regex_type,
|
29
|
+
:release_notes_exist?,
|
30
|
+
:single_label,
|
31
|
+
:temp_file,
|
32
|
+
:timezone,
|
33
|
+
:update_release_notes_before_tag?,
|
34
|
+
prefix: :config, to: :"Release::Notes.configuration"
|
14
35
|
end
|
15
36
|
end
|
16
37
|
end
|
@@ -114,11 +114,6 @@ module Release
|
|
114
114
|
# @return [Boolean]
|
115
115
|
attr_accessor :prettify_messages
|
116
116
|
|
117
|
-
# Controls whether to rewrite the output file or append to it.
|
118
|
-
# Defaults to `false`.
|
119
|
-
# @return [Boolean]
|
120
|
-
attr_accessor :force_rewrite
|
121
|
-
|
122
117
|
# If a commit message contains words that match more than
|
123
118
|
# one group of labels as defined in your configuration, the output
|
124
119
|
# will only contain the commit once.
|
@@ -131,29 +126,45 @@ module Release
|
|
131
126
|
# @return [String]
|
132
127
|
attr_accessor :for_each_ref_format
|
133
128
|
|
129
|
+
# Determines whether to use the last two tags to
|
130
|
+
# find commits for the output or if this gem should just
|
131
|
+
# find all commits after previous tag
|
132
|
+
# Defaults to `true`.
|
133
|
+
# @return [Boolean]
|
134
|
+
attr_accessor :update_release_notes_before_tag
|
135
|
+
|
134
136
|
def initialize
|
135
|
-
@output_file
|
136
|
-
@temp_file
|
137
|
-
@include_merges
|
138
|
-
@ignore_case
|
139
|
-
@extended_regex
|
140
|
-
@header_title
|
141
|
-
@bug_labels
|
142
|
-
@feature_labels
|
143
|
-
@misc_labels
|
144
|
-
@bug_title
|
145
|
-
@feature_title
|
146
|
-
@misc_title
|
147
|
-
@log_all_title
|
148
|
-
@log_all
|
149
|
-
@link_to_labels
|
150
|
-
@link_to_humanize
|
151
|
-
@link_to_sites
|
152
|
-
@timezone
|
153
|
-
@prettify_messages
|
154
|
-
@
|
155
|
-
@
|
156
|
-
@
|
137
|
+
@output_file = "./RELEASE_NOTES.md"
|
138
|
+
@temp_file = "./release-notes.tmp.md"
|
139
|
+
@include_merges = false
|
140
|
+
@ignore_case = true
|
141
|
+
@extended_regex = true
|
142
|
+
@header_title = "tag"
|
143
|
+
@bug_labels = %w(Fix Update)
|
144
|
+
@feature_labels = %w(Add Create)
|
145
|
+
@misc_labels = %w(Refactor)
|
146
|
+
@bug_title = "**Fixed bugs:**"
|
147
|
+
@feature_title = "**Implemented enhancements:**"
|
148
|
+
@misc_title = "**Miscellaneous:**"
|
149
|
+
@log_all_title = "**Other**"
|
150
|
+
@log_all = false
|
151
|
+
@link_to_labels = %w()
|
152
|
+
@link_to_humanize = %w()
|
153
|
+
@link_to_sites = %w()
|
154
|
+
@timezone = "America/New_York"
|
155
|
+
@prettify_messages = false
|
156
|
+
@single_label = true
|
157
|
+
@for_each_ref_format = "tag"
|
158
|
+
@update_release_notes_before_tag = true
|
159
|
+
end
|
160
|
+
|
161
|
+
instance_methods.each do |meth|
|
162
|
+
define_method("#{meth}?") do
|
163
|
+
return send(meth) == true if !!send(meth) == send(meth) # rubocop:disable Style/DoubleNegation
|
164
|
+
|
165
|
+
raise NotBoolean, "Configuration##{meth} does not return a Boolean and
|
166
|
+
therefore, has no predicate method."
|
167
|
+
end
|
157
168
|
end
|
158
169
|
|
159
170
|
# @return [String]
|
@@ -162,18 +173,18 @@ module Release
|
|
162
173
|
end
|
163
174
|
|
164
175
|
# @return [String]
|
165
|
-
def
|
166
|
-
|
176
|
+
def merge_flag
|
177
|
+
include_merges? ? "" : "--no-merges"
|
167
178
|
end
|
168
179
|
|
169
180
|
# @return [String]
|
170
181
|
def regex_type
|
171
|
-
|
182
|
+
extended_regex? ? "-E" : ""
|
172
183
|
end
|
173
184
|
|
174
185
|
# @return [String]
|
175
|
-
def
|
176
|
-
|
186
|
+
def grep_insensitive_flag
|
187
|
+
ignore_case? ? "-i" : ""
|
177
188
|
end
|
178
189
|
|
179
190
|
# @return [String]
|
@@ -207,9 +218,15 @@ module Release
|
|
207
218
|
link_to_sites.present?
|
208
219
|
end
|
209
220
|
|
210
|
-
|
211
|
-
|
212
|
-
|
221
|
+
def set_instance_var(var, val)
|
222
|
+
instance_variable_set("@#{var}", val)
|
223
|
+
define_singleton_method(var) do
|
224
|
+
instance_variable_get("@#{var}")
|
225
|
+
end
|
226
|
+
|
227
|
+
define_singleton_method("#{var}?") do
|
228
|
+
return send(var) == true if !!send(var) == send(var) # rubocop:disable Style/DoubleNegation
|
229
|
+
end
|
213
230
|
end
|
214
231
|
|
215
232
|
private
|
data/lib/release/notes/git.rb
CHANGED
@@ -20,8 +20,8 @@ module Release
|
|
20
20
|
def log(**opts)
|
21
21
|
"git log '#{opts[:tag_from]}'..'#{opts[:tag_to]}'" \
|
22
22
|
" --grep='#{opts[:label]}#{opts[:invert_grep]}'" \
|
23
|
-
" #{config_regex_type} #{
|
24
|
-
" #{
|
23
|
+
" #{config_regex_type} #{config_grep_insensitive_flag}" \
|
24
|
+
" #{config_merge_flag} --format='%h #{log_format}'"
|
25
25
|
end
|
26
26
|
|
27
27
|
#
|
data/lib/release/notes/link.rb
CHANGED
@@ -97,7 +97,7 @@ module Release
|
|
97
97
|
def replace(line, issue_number, label, index)
|
98
98
|
identifier = "#{label.split(/\s/)[0]} #{issue_number}"
|
99
99
|
humanized = "#{config_link_to_humanize[index]} #{issue_number}"
|
100
|
-
linked = "[#{humanized}](#{config_link_to_sites[index]}
|
100
|
+
linked = "[#{humanized}](#{config_link_to_sites[index]}#{issue_number.tr('^0-9', '')})"
|
101
101
|
|
102
102
|
line.gsub! identifier, linked
|
103
103
|
line
|
data/lib/release/notes/log.rb
CHANGED
@@ -5,34 +5,40 @@ module Release
|
|
5
5
|
class Log
|
6
6
|
include Configurable
|
7
7
|
|
8
|
+
def initialize(opts = {})
|
9
|
+
Release::Notes.configure do |c|
|
10
|
+
c.set_instance_var(:newest_tag, opts["tag"])
|
11
|
+
c.set_instance_var(:force_rewrite, opts["rewrite"])
|
12
|
+
c.set_instance_var(:ignore_head, opts["ignore-head"])
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
8
16
|
#
|
9
17
|
# Release::Notes::Log initializer
|
10
18
|
#
|
11
19
|
# @return none
|
12
20
|
#
|
13
21
|
def perform
|
14
|
-
|
15
|
-
# Find all tags and get the logs between each tag
|
16
|
-
# run this the first time if nothing exists
|
17
|
-
find_all_tags_and_log_all
|
18
|
-
else
|
19
|
-
# Find the last tag and group all commits
|
20
|
-
# under a date header at the time this is run
|
21
|
-
find_last_tag_and_log
|
22
|
-
end
|
22
|
+
log_from_start? ? find_all_tags_and_log_all : find_last_tag_and_log
|
23
23
|
|
24
24
|
writer.write_new_file
|
25
25
|
end
|
26
26
|
|
27
27
|
private
|
28
28
|
|
29
|
+
def commits_since_last_tag
|
30
|
+
tag_logger("HEAD", find_previous_tag(0))
|
31
|
+
end
|
32
|
+
|
29
33
|
#
|
30
34
|
# Find the most recent git tag
|
31
35
|
#
|
32
36
|
# @return [Array] most recent git tag
|
33
37
|
#
|
34
38
|
def find_last_tag_and_log
|
35
|
-
|
39
|
+
return commits_since_last_tag if read_to_head?
|
40
|
+
|
41
|
+
tag_logger(System.last_tag.strip, find_previous_tag(1))
|
36
42
|
end
|
37
43
|
|
38
44
|
#
|
@@ -42,8 +48,10 @@ module Release
|
|
42
48
|
#
|
43
49
|
def find_all_tags_and_log_all
|
44
50
|
git_all_tags.each_with_index do |ta, i|
|
45
|
-
tag_logger(ta,
|
51
|
+
tag_logger(ta, find_previous_tag(i + 1))
|
46
52
|
end
|
53
|
+
|
54
|
+
commits_since_last_tag if read_to_head?
|
47
55
|
end
|
48
56
|
|
49
57
|
#
|
@@ -52,7 +60,7 @@ module Release
|
|
52
60
|
# @return [Boolean] append to changelog or start from beginning of git log
|
53
61
|
#
|
54
62
|
def log_from_start?
|
55
|
-
!config_release_notes_exist? || config_force_rewrite
|
63
|
+
!config_release_notes_exist? || config_force_rewrite?
|
56
64
|
end
|
57
65
|
|
58
66
|
#
|
@@ -71,8 +79,12 @@ module Release
|
|
71
79
|
#
|
72
80
|
# @return [String] second most recent git tag
|
73
81
|
#
|
74
|
-
def
|
75
|
-
git_all_tags[
|
82
|
+
def find_previous_tag(idx)
|
83
|
+
git_all_tags[idx].yield_self { |t| tag(t) }.strip
|
84
|
+
end
|
85
|
+
|
86
|
+
def read_to_head?
|
87
|
+
config_update_release_notes_before_tag? && !config_ignore_head?
|
76
88
|
end
|
77
89
|
|
78
90
|
#
|
@@ -95,7 +107,11 @@ module Release
|
|
95
107
|
# @return [Object] Release::Notes::Tag object
|
96
108
|
#
|
97
109
|
def tag_logger(tag, previous_tag)
|
98
|
-
Tag.new(
|
110
|
+
Tag.new(
|
111
|
+
tag: tag,
|
112
|
+
previous_tag: previous_tag,
|
113
|
+
writer: writer,
|
114
|
+
).perform
|
99
115
|
end
|
100
116
|
|
101
117
|
#
|
data/lib/release/notes/tag.rb
CHANGED
@@ -33,11 +33,14 @@ module Release
|
|
33
33
|
store_commits # adds to @_commits
|
34
34
|
|
35
35
|
if commits_available? # true
|
36
|
-
writer_digest_header(
|
36
|
+
writer_digest_header(header) # <File:./release-notes.tmp.md (closed)>
|
37
37
|
log_commits # hash [0,1,2...], messages for sha
|
38
38
|
end
|
39
39
|
|
40
40
|
self
|
41
|
+
rescue MissingTag => e
|
42
|
+
warn "<#{e.class.name.demodulize}>: #{e}"
|
43
|
+
raise
|
41
44
|
end
|
42
45
|
|
43
46
|
private
|
@@ -67,8 +70,8 @@ module Release
|
|
67
70
|
#
|
68
71
|
# @return [String] the header to be added to changelog
|
69
72
|
#
|
70
|
-
def
|
71
|
-
|
73
|
+
def header
|
74
|
+
config_header_title_type.yield_self { |t| title(t) } # config_header_title = "tag"
|
72
75
|
end
|
73
76
|
|
74
77
|
#
|
@@ -145,6 +148,15 @@ module Release
|
|
145
148
|
# @return [String] tag title or formatted tag date to be added to changelog
|
146
149
|
#
|
147
150
|
def title(title)
|
151
|
+
return standard_title(title) unless config_update_release_notes_before_tag? && tag == "HEAD"
|
152
|
+
|
153
|
+
formatted_date unless title == "tag"
|
154
|
+
return config_newest_tag if config_newest_tag.present?
|
155
|
+
|
156
|
+
raise MissingTag, "No tag version was passed as an option when generating release notes"
|
157
|
+
end
|
158
|
+
|
159
|
+
def standard_title(title)
|
148
160
|
title == "tag" ? tag : formatted_date(tag_date)
|
149
161
|
end
|
150
162
|
end
|
data/lib/release/notes/write.rb
CHANGED
@@ -56,7 +56,7 @@ module Release
|
|
56
56
|
# @return none
|
57
57
|
#
|
58
58
|
def write_new_file
|
59
|
-
copy_over_notes if config_release_notes_exist? && !config_force_rewrite
|
59
|
+
copy_over_notes if config_release_notes_exist? && !config_force_rewrite?
|
60
60
|
|
61
61
|
FileUtils.cp(config_temp_file, config_output_file)
|
62
62
|
FileUtils.rm config_temp_file
|
data/release-notes.gemspec
CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_dependency "activesupport", "~> 5.0"
|
22
|
+
spec.add_dependency "thor", "~> 0.20"
|
22
23
|
|
23
24
|
spec.add_development_dependency "bundler", "~> 1.12"
|
24
25
|
spec.add_development_dependency "pry", "~> 0.12.2"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: release-notes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Drew Monroe
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-01-
|
11
|
+
date: 2019-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '5.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: thor
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.20'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.20'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -112,10 +126,12 @@ files:
|
|
112
126
|
- lib/generators/release/notes/install/templates/README
|
113
127
|
- lib/generators/release/notes/install/templates/release_notes.rb
|
114
128
|
- lib/release/notes.rb
|
129
|
+
- lib/release/notes/cmd.rb
|
115
130
|
- lib/release/notes/commits.rb
|
116
131
|
- lib/release/notes/configurable.rb
|
117
132
|
- lib/release/notes/configuration.rb
|
118
133
|
- lib/release/notes/date_formatter.rb
|
134
|
+
- lib/release/notes/errors.rb
|
119
135
|
- lib/release/notes/git.rb
|
120
136
|
- lib/release/notes/install.rb
|
121
137
|
- lib/release/notes/link.rb
|
@@ -127,7 +143,6 @@ files:
|
|
127
143
|
- lib/release/notes/tasks/install.rake
|
128
144
|
- lib/release/notes/version.rb
|
129
145
|
- lib/release/notes/write.rb
|
130
|
-
- lib/tasks/update_release_notes.rake
|
131
146
|
- release-notes.gemspec
|
132
147
|
homepage: http://github.com/dvmonroe/release-notes
|
133
148
|
licenses:
|
@@ -144,9 +159,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
144
159
|
version: '0'
|
145
160
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
161
|
requirements:
|
147
|
-
- - "
|
162
|
+
- - ">"
|
148
163
|
- !ruby/object:Gem::Version
|
149
|
-
version:
|
164
|
+
version: 1.3.1
|
150
165
|
requirements: []
|
151
166
|
rubyforge_project:
|
152
167
|
rubygems_version: 2.7.3
|