release-notes 1.0.1 → 1.1.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: 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