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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dbac7369224dec75b2c286581ef8292dab0c608fe18a1308203990c254a01d0d
4
- data.tar.gz: 1273166258cd46d3587612dfa6ac91a9263948227d661db6948a41490d7a9cd6
3
+ metadata.gz: 1f57251370fff06c63ccbbb0719638cf769a0f93e689670797ec7a9bbce6cecc
4
+ data.tar.gz: 59ea08dcca6b490195ba032e4786a4acc4062ab6883e291388975cf9681ef7c6
5
5
  SHA512:
6
- metadata.gz: f2e17ed469381e6bea528251bd1e89380ef670f52a7284a228cac6277bfd147d41f3683491295b6ade8c577066fecfcb26fe8b0bff82312069070bd9fa60badb
7
- data.tar.gz: 303d0e8cee409f45fdc93ac1dad4c59bc3f36325c78b58ea2dc898eb7fb11d28e0911dbb91ae75eaa917b4d91d252e5196a2b95be0a6dbd5194dab1604f7ad95
6
+ metadata.gz: faca9e5eda060af2c513130e711c178ef8a698b7bd91285730c4913eb0467657011ad39419d947de68341f7b7b2bdd3869a6314ffe86844b25dff028177c2e81
7
+ data.tar.gz: b72a541e60752ec2ece0badabcacc18014feebd9d20bea2dd3db4a31f50f73f5d7453c14e9d3de0a3fae0f2a96bf5a8efd3c6fc3e33d7e13ea37b4bf7cd17287
@@ -6,6 +6,7 @@ AllCops:
6
6
  - "Gemfile"
7
7
  - "Rakefile"
8
8
  - "vendor/**/*"
9
+ - "exe/*"
9
10
 
10
11
  Metrics/LineLength:
11
12
  Max: 120
@@ -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
@@ -4,7 +4,6 @@ source 'https://rubygems.org'
4
4
  gemspec
5
5
 
6
6
  group :test do
7
- gem 'aruba', '~> 0.14.2'
8
7
  gem 'codeclimate-test-reporter', require: false
9
8
  gem 'rspec', '~> 3.6.0'
10
9
  gem 'simplecov', require: false
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, if you're using with rails, you can run the generator:
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
- If you're not in a rails project you can create the file yourself.
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
- #### Rails
92
+ Install the binstub
93
+
94
+ ```sh
95
+ $ bundle binstubs release-notes
96
+ ```
97
+
98
+ and run
93
99
 
94
100
  ```sh
95
- bin/rails update_release_notes:run
101
+ $ bin/release-notes
96
102
  ```
97
103
 
98
- #### Non-Rails
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::Update.new.run
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
- sh 'bin/rake "update_release_notes:run"'
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"'
@@ -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
@@ -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 Update
24
- attr_reader :logger
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 run
32
- logger.perform
28
+ def log
29
+ Release::Notes::Log.new
33
30
  end
34
- end
35
31
 
36
- def self.root
37
- File.expand_path("..", __dir__)
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 :config, :time_now
7
- delegate :timezone, to: :config
6
+ attr_reader :time_now
7
+ delegate :timezone, to: :"Release::Notes.configuration"
8
8
 
9
- def initialize(config)
10
- @config = config
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) : time_now
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
@@ -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?, :regex_type, :include_merges?, to: :config
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]}' --grep='#{opts[:label]}'" \
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
- "git log '#{opts[:tag_from]}'..'#{opts[:tag_to]}' --grep='#{all_labels}'" \
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
 
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rake"
4
+
5
+ load File.expand_path(File.join(File.dirname(__FILE__), "tasks/install.rake"))
@@ -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: :config
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 = ""
@@ -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 :config, :writer, :date_formatter
8
+ attr_reader :writer, :date_formatter
10
9
  attr_reader :all_tags
11
10
 
12
- delegate :force_rewrite, :all_labels, :log_all, :features, :bugs, :misc, :feature_title,
13
- :bug_title, :misc_title, :log_all_title, :release_notes_exist?, to: :config
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(config)
18
- @config = config
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 = system_call(tag_from: tag_from, tag_to: tag_to, label: regex, log_all: false)
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 = system_call(tag_from: tag_from, tag_to: tag_to, log_all: true)
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 system_call(tag_from: last_tag, label: all_labels).present?
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
- system_call(tag_from: previous_tag, tag_to: ta, label: all_labels).present?
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
@@ -6,7 +6,7 @@ module Release
6
6
  extend ActiveSupport::Concern
7
7
 
8
8
  included do
9
- delegate :all_labels, to: :config
9
+ delegate :all_labels, to: :"Release::Notes.configuration"
10
10
 
11
11
  def prettify(line:)
12
12
  line.gsub(labels_regex, "").strip
@@ -10,11 +10,9 @@ module Release
10
10
 
11
11
  included do
12
12
  def system_log(**opts)
13
- if opts[:log_all] == true
14
- `#{invert_log(opts)}`
15
- else
16
- `#{log(opts)}`
17
- end
13
+ return `#{invert_log(opts)}` if opts[:log_all] == true
14
+
15
+ `#{log(opts)}`
18
16
  end
19
17
  end
20
18
 
@@ -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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Release
4
4
  module Notes
5
- VERSION = "1.0.1"
5
+ VERSION = "1.1.0"
6
6
  end
7
7
  end
@@ -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?, :force_rewrite, to: :config
10
+ :prettify_messages?, :release_notes_exist?,
11
+ :force_rewrite, to: :"Release::Notes.configuration"
14
12
 
15
- def initialize(config)
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
- with_config(config: config) { prettify(line: link_messages) } if prettify_messages?
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
- with_config(config: config) do
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.new(temp_file, "w")
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
@@ -2,8 +2,8 @@
2
2
 
3
3
  namespace :update_release_notes do
4
4
  task :run do
5
- puts "generating release notes..."
6
- Release::Notes::Update.new.run
7
- puts "done!"
5
+ puts "=> Generating release notes..."
6
+ Release::Notes.generate
7
+ puts "=> Done!"
8
8
  end
9
9
  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.1
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-29 00:00:00.000000000 Z
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