release-notes 1.0.1 → 1.1.0
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/.rubocop.yml +1 -0
- data/.travis.yml +4 -2
- data/Gemfile +0 -1
- data/README.md +18 -11
- data/exe/release-notes +27 -0
- data/lib/release/notes.rb +9 -12
- data/lib/release/notes/date_format.rb +5 -8
- data/lib/release/notes/git.rb +5 -5
- data/lib/release/notes/install.rb +5 -0
- data/lib/release/notes/link.rb +1 -1
- data/lib/release/notes/log.rb +23 -31
- data/lib/release/notes/pretty_print.rb +1 -1
- data/lib/release/notes/system.rb +3 -5
- data/lib/release/notes/tasks/install.rake +15 -0
- data/lib/release/notes/version.rb +1 -1
- data/lib/release/notes/write.rb +6 -12
- data/lib/tasks/update_release_notes.rake +3 -3
- metadata +7 -4
- data/lib/release/notes/with_configuration.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f57251370fff06c63ccbbb0719638cf769a0f93e689670797ec7a9bbce6cecc
|
4
|
+
data.tar.gz: 59ea08dcca6b490195ba032e4786a4acc4062ab6883e291388975cf9681ef7c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: faca9e5eda060af2c513130e711c178ef8a698b7bd91285730c4913eb0467657011ad39419d947de68341f7b7b2bdd3869a6314ffe86844b25dff028177c2e81
|
7
|
+
data.tar.gz: b72a541e60752ec2ece0badabcacc18014feebd9d20bea2dd3db4a31f50f73f5d7453c14e9d3de0a3fae0f2a96bf5a8efd3c6fc3e33d7e13ea37b4bf7cd17287
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
@@ -2,9 +2,7 @@ sudo: false
|
|
2
2
|
language: ruby
|
3
3
|
rvm:
|
4
4
|
- 2.4.1
|
5
|
-
- 2.4.2
|
6
5
|
- 2.4.5
|
7
|
-
- 2.5.0
|
8
6
|
- 2.5.3
|
9
7
|
cache: bundler
|
10
8
|
before_install: gem install bundler -v 1.12.5
|
@@ -15,3 +13,7 @@ script:
|
|
15
13
|
- bundle exec rubocop
|
16
14
|
after_success:
|
17
15
|
- bundle exec codeclimate-test-reporter
|
16
|
+
|
17
|
+
branches:
|
18
|
+
only:
|
19
|
+
- master
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -43,15 +43,15 @@ Or install it yourself as:
|
|
43
43
|
$ gem install release-notes
|
44
44
|
```
|
45
45
|
|
46
|
-
After you install Release::Notes,
|
46
|
+
After you install Release::Notes, generate the intializer file:
|
47
47
|
|
48
48
|
```sh
|
49
|
+
# rails
|
49
50
|
$ rails generate release:notes:install
|
50
|
-
```
|
51
|
-
|
52
|
-
This Release::Notes generator creates an initializer file to allow further configuration.
|
53
51
|
|
54
|
-
|
52
|
+
# non-rails
|
53
|
+
$ bundle exec release:notes:install
|
54
|
+
```
|
55
55
|
|
56
56
|
## Configure
|
57
57
|
|
@@ -89,16 +89,22 @@ For more information about each individual setting checkout Release::Notes's
|
|
89
89
|
|
90
90
|
### TL;DR
|
91
91
|
|
92
|
-
|
92
|
+
Install the binstub
|
93
|
+
|
94
|
+
```sh
|
95
|
+
$ bundle binstubs release-notes
|
96
|
+
```
|
97
|
+
|
98
|
+
and run
|
93
99
|
|
94
100
|
```sh
|
95
|
-
bin/
|
101
|
+
$ bin/release-notes
|
96
102
|
```
|
97
103
|
|
98
|
-
|
104
|
+
OR, just use the rake task
|
99
105
|
|
100
106
|
```sh
|
101
|
-
bundle exec rake update_release_notes:run
|
107
|
+
$ bundle exec rake update_release_notes:run
|
102
108
|
```
|
103
109
|
|
104
110
|
### Git Worklow
|
@@ -125,7 +131,7 @@ If using Rails, a rake task is included and would be best utilized within your d
|
|
125
131
|
If not on rails, but using rake, you can easily craft your own rake task. At the very least calling
|
126
132
|
|
127
133
|
```ruby
|
128
|
-
Release::Notes
|
134
|
+
Release::Notes.generate
|
129
135
|
```
|
130
136
|
|
131
137
|
is the only instance that needs to be instantiated and invoked.
|
@@ -144,7 +150,8 @@ namespace :deploy do
|
|
144
150
|
before :starting, :update_release_notes
|
145
151
|
|
146
152
|
task :update_release_notes do
|
147
|
-
|
153
|
+
# use the binstub
|
154
|
+
sh 'bin/release-notes"'
|
148
155
|
# run a second task that generates an auto commit
|
149
156
|
# this would be created by you
|
150
157
|
sh 'bin/rake "release_notes:commit"'
|
data/exe/release-notes
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
5
|
+
|
6
|
+
require "release/notes"
|
7
|
+
config_file = "./config/initializers/release_notes.rb"
|
8
|
+
|
9
|
+
begin
|
10
|
+
require config_file
|
11
|
+
warn "=> Generating release notes..."
|
12
|
+
Release::Notes.generate
|
13
|
+
warn "=> Done!"
|
14
|
+
rescue LoadError
|
15
|
+
warn "=> Missing config/initializers/release_notes.rb"
|
16
|
+
rescue SignalException => e
|
17
|
+
# We might receive SIGTERM before our signal handler is installed.
|
18
|
+
if Signal.signame(e.signo) == "TERM"
|
19
|
+
exit(0)
|
20
|
+
else
|
21
|
+
raise
|
22
|
+
end
|
23
|
+
rescue
|
24
|
+
exit(1)
|
25
|
+
else
|
26
|
+
exit(0)
|
27
|
+
end
|
data/lib/release/notes.rb
CHANGED
@@ -11,30 +11,27 @@ require "release/notes/version"
|
|
11
11
|
require "release/notes/configuration"
|
12
12
|
require "release/notes/git"
|
13
13
|
require "release/notes/system"
|
14
|
-
require "release/notes/with_configuration"
|
15
14
|
|
16
15
|
require "release/notes/write"
|
17
16
|
require "release/notes/log"
|
18
17
|
|
19
18
|
require "release/notes/railtie" if defined?(Rails)
|
19
|
+
require "release/notes/install" unless defined?(Rails)
|
20
20
|
|
21
21
|
module Release
|
22
22
|
module Notes
|
23
|
-
class
|
24
|
-
|
25
|
-
|
26
|
-
def initialize
|
27
|
-
@options = Release::Notes.configuration
|
28
|
-
@logger = Release::Notes::Log.new @options
|
23
|
+
class << self
|
24
|
+
def generate
|
25
|
+
log.perform
|
29
26
|
end
|
30
27
|
|
31
|
-
def
|
32
|
-
|
28
|
+
def log
|
29
|
+
Release::Notes::Log.new
|
33
30
|
end
|
34
|
-
end
|
35
31
|
|
36
|
-
|
37
|
-
|
32
|
+
def root
|
33
|
+
File.expand_path("..", __dir__)
|
34
|
+
end
|
38
35
|
end
|
39
36
|
end
|
40
37
|
end
|
@@ -3,18 +3,15 @@
|
|
3
3
|
module Release
|
4
4
|
module Notes
|
5
5
|
class DateFormat
|
6
|
-
attr_reader :
|
7
|
-
delegate :timezone, to: :
|
6
|
+
attr_reader :time_now
|
7
|
+
delegate :timezone, to: :"Release::Notes.configuration"
|
8
8
|
|
9
|
-
def initialize
|
10
|
-
|
11
|
-
Time.zone = timezone
|
12
|
-
|
13
|
-
@time_now = Time.zone.now
|
9
|
+
def initialize
|
10
|
+
Time.zone = timezone
|
14
11
|
end
|
15
12
|
|
16
13
|
def date_humanized(date: nil)
|
17
|
-
date = date.present? ? Time.zone.parse(date) :
|
14
|
+
date = date.present? ? Time.zone.parse(date) : Time.zone.now
|
18
15
|
date.strftime("%B %d, %Y %r %Z")
|
19
16
|
end
|
20
17
|
end
|
data/lib/release/notes/git.rb
CHANGED
@@ -8,18 +8,18 @@ module Release
|
|
8
8
|
extend ActiveSupport::Concern
|
9
9
|
|
10
10
|
included do
|
11
|
-
delegate :all_labels, :log_format, :grep_insensitive?,
|
11
|
+
delegate :all_labels, :log_format, :grep_insensitive?,
|
12
|
+
:regex_type, :include_merges?, to: :"Release::Notes.configuration"
|
12
13
|
|
13
14
|
def log(**opts)
|
14
|
-
"git log '#{opts[:tag_from]}'..'#{opts[:tag_to]}'
|
15
|
+
"git log '#{opts[:tag_from]}'..'#{opts[:tag_to]}'" \
|
16
|
+
" --grep='#{opts[:label]}'" \
|
15
17
|
" #{regex_type} #{grep_insensitive?}" \
|
16
18
|
" #{include_merges?} --format='#{log_format}'"
|
17
19
|
end
|
18
20
|
|
19
21
|
def invert_log(**opts)
|
20
|
-
|
21
|
-
" #{regex_type} #{grep_insensitive?} --invert-grep" \
|
22
|
-
" #{include_merges?} --format='#{log_format}'"
|
22
|
+
log(opts) + " --invert-grep"
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
data/lib/release/notes/link.rb
CHANGED
@@ -6,7 +6,7 @@ module Release
|
|
6
6
|
extend ActiveSupport::Concern
|
7
7
|
|
8
8
|
included do
|
9
|
-
delegate :link_to_labels, :link_to_sites, :link_to_humanize, to: :
|
9
|
+
delegate :link_to_labels, :link_to_sites, :link_to_humanize, to: :"Release::Notes.configuration"
|
10
10
|
|
11
11
|
def link_lines(lines:)
|
12
12
|
@new_lines = ""
|
data/lib/release/notes/log.rb
CHANGED
@@ -4,21 +4,21 @@ module Release
|
|
4
4
|
module Notes
|
5
5
|
class Log
|
6
6
|
include System
|
7
|
-
include WithConfiguration
|
8
7
|
|
9
|
-
attr_reader :
|
8
|
+
attr_reader :writer, :date_formatter
|
10
9
|
attr_reader :all_tags
|
11
10
|
|
12
|
-
delegate :force_rewrite, :all_labels, :log_all, :features,
|
13
|
-
:
|
11
|
+
delegate :force_rewrite, :all_labels, :log_all, :features,
|
12
|
+
:bugs, :misc, :feature_title,
|
13
|
+
:bug_title, :misc_title, :log_all_title,
|
14
|
+
:release_notes_exist?, to: :"Release::Notes.configuration"
|
15
|
+
|
14
16
|
delegate :date_humanized, :format_tag_date, to: :date_formatter
|
15
17
|
delegate :digest_date, :digest_title, to: :writer
|
16
18
|
|
17
|
-
def initialize
|
18
|
-
@
|
19
|
-
|
20
|
-
setup_writer
|
21
|
-
setup_date_formatter
|
19
|
+
def initialize
|
20
|
+
@writer = Release::Notes::Write.new
|
21
|
+
@date_formatter = Release::Notes::DateFormat.new
|
22
22
|
end
|
23
23
|
|
24
24
|
def perform
|
@@ -43,57 +43,49 @@ module Release
|
|
43
43
|
end
|
44
44
|
|
45
45
|
# @api private
|
46
|
-
def copy_single_tag_of_activity(tag_from:, tag_to: "HEAD")
|
46
|
+
def copy_single_tag_of_activity(tag_from:, tag_to: "HEAD") # rubocop:disable Metrics/MethodLength
|
47
47
|
[features, bugs, misc].each_with_index do |regex, i|
|
48
|
-
log =
|
48
|
+
log = system_log(
|
49
|
+
tag_from: tag_from,
|
50
|
+
tag_to: tag_to,
|
51
|
+
label: regex,
|
52
|
+
log_all: false,
|
53
|
+
)
|
49
54
|
digest_title(title: titles[i], log_message: log) if log.present?
|
50
55
|
end
|
51
56
|
|
52
57
|
return unless log_all
|
53
58
|
|
54
|
-
log =
|
59
|
+
log = system_log(
|
60
|
+
tag_from: tag_from,
|
61
|
+
tag_to: tag_to,
|
62
|
+
log_all: true,
|
63
|
+
)
|
55
64
|
digest_title(title: log_all_title, log_message: log) if log.present?
|
56
65
|
end
|
57
66
|
|
58
67
|
# @api private
|
59
68
|
def find_last_tag_and_log
|
60
69
|
last_tag = system_last_tag.delete!("\n")
|
61
|
-
return false unless
|
70
|
+
return false unless system_log(tag_from: last_tag, label: all_labels).present?
|
62
71
|
|
63
72
|
# output the date right now
|
64
73
|
digest_date date: date_humanized
|
65
74
|
copy_single_tag_of_activity(tag_from: last_tag)
|
66
75
|
end
|
67
76
|
|
68
|
-
# @api private
|
69
|
-
def setup_writer
|
70
|
-
@writer = Release::Notes::Write.new config
|
71
|
-
end
|
72
|
-
|
73
|
-
# @api private
|
74
|
-
def setup_date_formatter
|
75
|
-
@date_formatter = Release::Notes::DateFormat.new config
|
76
|
-
end
|
77
|
-
|
78
77
|
# @api private
|
79
78
|
def find_all_tags_and_log_all
|
80
79
|
all_tags.each_with_index do |ta, i|
|
81
80
|
previous_tag = all_tags[i + 1]
|
82
81
|
next unless previous_tag.present? &&
|
83
|
-
|
82
|
+
system_log(tag_from: previous_tag, tag_to: ta, label: all_labels).present?
|
84
83
|
|
85
84
|
digest_date date: date_humanized(date: System.tag_date(tag: ta))
|
86
85
|
copy_single_tag_of_activity(tag_from: previous_tag, tag_to: ta)
|
87
86
|
end
|
88
87
|
end
|
89
88
|
|
90
|
-
# @api private
|
91
|
-
def system_call(**opts)
|
92
|
-
with_config(config: config) do
|
93
|
-
system_log(opts)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
89
|
def titles
|
98
90
|
[feature_title, bug_title, misc_title]
|
99
91
|
end
|
data/lib/release/notes/system.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
namespace :"release:notes" do
|
4
|
+
desc "Install release notes in a non Rails environment"
|
5
|
+
task :install do
|
6
|
+
config_file = File.expand_path("../../../generators/release/notes/install/templates/release_notes.rb", __dir__)
|
7
|
+
|
8
|
+
if File.exist?("./config/release_notes.rb")
|
9
|
+
warn "=> [ skipping ] config/release_notes.rb already exists"
|
10
|
+
else
|
11
|
+
FileUtils.cp(config_file, "./config/release_notes.rb")
|
12
|
+
warn "=> config/release_notes.rb created"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/release/notes/write.rb
CHANGED
@@ -5,15 +5,12 @@ module Release
|
|
5
5
|
class Write
|
6
6
|
include Link
|
7
7
|
include PrettyPrint
|
8
|
-
include WithConfiguration
|
9
|
-
|
10
|
-
attr_accessor :config
|
11
8
|
|
12
9
|
delegate :output_file, :temp_file, :link_commits?, :all_labels,
|
13
|
-
:prettify_messages?, :release_notes_exist?,
|
10
|
+
:prettify_messages?, :release_notes_exist?,
|
11
|
+
:force_rewrite, to: :"Release::Notes.configuration"
|
14
12
|
|
15
|
-
def initialize
|
16
|
-
@config = config
|
13
|
+
def initialize
|
17
14
|
# create a new temp file regardless if it exists
|
18
15
|
new_temp_file_template
|
19
16
|
end
|
@@ -63,7 +60,7 @@ module Release
|
|
63
60
|
|
64
61
|
# @api private
|
65
62
|
def remove_tags
|
66
|
-
|
63
|
+
prettify(line: link_messages) if prettify_messages?
|
67
64
|
end
|
68
65
|
|
69
66
|
# @api private
|
@@ -83,15 +80,12 @@ module Release
|
|
83
80
|
def link_message(log_message)
|
84
81
|
return log_message unless link_commits?
|
85
82
|
|
86
|
-
|
87
|
-
link_lines(lines: log_message)
|
88
|
-
end
|
83
|
+
link_lines(lines: log_message)
|
89
84
|
end
|
90
85
|
|
91
86
|
# @api private
|
92
87
|
def new_temp_file_template
|
93
|
-
File.
|
94
|
-
File.open(temp_file, "a") do |fi|
|
88
|
+
File.open(temp_file, "w") do |fi|
|
95
89
|
fi << "# Release Notes\n"
|
96
90
|
end
|
97
91
|
end
|
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: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Drew Monroe
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-11-
|
11
|
+
date: 2018-11-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -83,7 +83,8 @@ dependencies:
|
|
83
83
|
description: Generate automated release notes for any project
|
84
84
|
email:
|
85
85
|
- dvmonroe6@gmail.com
|
86
|
-
executables:
|
86
|
+
executables:
|
87
|
+
- release-notes
|
87
88
|
extensions: []
|
88
89
|
extra_rdoc_files: []
|
89
90
|
files:
|
@@ -103,6 +104,7 @@ files:
|
|
103
104
|
- bin/console
|
104
105
|
- bin/setup
|
105
106
|
- bin/test
|
107
|
+
- exe/release-notes
|
106
108
|
- lib/generators/release/notes/install/install_generator.rb
|
107
109
|
- lib/generators/release/notes/install/templates/README
|
108
110
|
- lib/generators/release/notes/install/templates/release_notes.rb
|
@@ -110,13 +112,14 @@ files:
|
|
110
112
|
- lib/release/notes/configuration.rb
|
111
113
|
- lib/release/notes/date_format.rb
|
112
114
|
- lib/release/notes/git.rb
|
115
|
+
- lib/release/notes/install.rb
|
113
116
|
- lib/release/notes/link.rb
|
114
117
|
- lib/release/notes/log.rb
|
115
118
|
- lib/release/notes/pretty_print.rb
|
116
119
|
- lib/release/notes/railtie.rb
|
117
120
|
- lib/release/notes/system.rb
|
121
|
+
- lib/release/notes/tasks/install.rake
|
118
122
|
- lib/release/notes/version.rb
|
119
|
-
- lib/release/notes/with_configuration.rb
|
120
123
|
- lib/release/notes/write.rb
|
121
124
|
- lib/tasks/update_release_notes.rake
|
122
125
|
- release-notes.gemspec
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Release
|
4
|
-
module Notes
|
5
|
-
module WithConfiguration
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
|
8
|
-
included do
|
9
|
-
attr_reader :config, :date_formatter
|
10
|
-
|
11
|
-
def with_config(**opts, &_block)
|
12
|
-
@confg = opts.fetch(:config, {})
|
13
|
-
yield
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|