reissue 0.2.2 → 0.3.1

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: d7a30f436a8c3bdf476c8ef3a7547536e292b3b81cf207ff8efe92404eacf2e9
4
- data.tar.gz: 20d5e0d023af7778e0de3d71859088b5baa216bc00c7ef09a46732e1dcc0712a
3
+ metadata.gz: c6ac7b4c6d82f57ed9e9733bfa072344ea79c3b5075aaf4789f40815be528ebd
4
+ data.tar.gz: a6eb54ae8e1037521b227f21869853292339c1b189e5ad8f060e62e044fdeaa4
5
5
  SHA512:
6
- metadata.gz: fea5c4c4d7c7c4d7abcd43d038e9566de875892ee2cda0e95730f69c4108fd3a0304f99ec5ab3bcdd17b104719280b7610061973217eb9fc1277d265cb017238
7
- data.tar.gz: 24a0fcfb969d6ba3640e3594a268cd192aa5b7316b49e88aa7059f918bfdb9fb0728aaf81df11cd3a61950ffea47af6c30d07725c12c6bdeac5ff742f08991e9
6
+ metadata.gz: 2481e4f823168b94f3374e97a3e2c55b7e394e4110c5fdd9cf8b4635b2919049e22de219f07d9efac7ec62168a97bc50a83227b30cad7fe5b8830268d95a43ca
7
+ data.tar.gz: 9ca6fa4a75c7c9037f4289febae72552b777fb31fe5576a349fcd8f608c350d89e9f6beb4a66662e298afb67c2ee2bef44cc81a5a86be57ef04486f5a8a4d2ed
data/CHANGELOG.md CHANGED
@@ -5,24 +5,24 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](http://keepachangelog.com/)
6
6
  and this project adheres to [Semantic Versioning](http://semver.org/).
7
7
 
8
- ## [0.2.2] - 2024-09-06
8
+ ## [0.3.1] - 2025-01-16
9
9
 
10
10
  ### Added
11
11
 
12
- - Add a `reissue:branch` task to create a new branch for the next version
13
- - Add a `reissue:push` task to push the new branch to the remote repository
12
+ - Add `retain_changelogs` option to control how to retain the changelog files for the previous versions.
14
13
 
15
- ### Fixed
14
+ ### Changed
16
15
 
17
- - Require the 'date' library in tests to ensure the Date constant is present
18
- - Ensure that `updated_paths` are always enumerable
16
+ - Set the name of the `reissue:branch` argument to `branch_name` to be clearer.
17
+ - Inject the constants in the `create` method.
18
+ - Updated the tested Ruby version to 3.4.
19
19
 
20
- ## [0.2.1] - 2024-07-29
20
+ ## [0.3.0] - 2024-09-06
21
21
 
22
22
  ### Added
23
23
 
24
- - Release notes and the checksum for the 0.2.0 version
24
+ - Add `push_reissue` option to control pushing changes to the remote repository.
25
25
 
26
26
  ### Changed
27
27
 
28
- - Return the new version from the reissue task
28
+ - Default behavior of _this_ gem's release is to push finalize without a branch.
data/README.md CHANGED
@@ -104,6 +104,16 @@ Reissue::Task.create :your_name_and_namespace do |task|
104
104
  # Optional: The file to update with the new version number. Defaults to "CHANGELOG.md".
105
105
  task.changelog_file = "path/to/CHANGELOG.md"
106
106
 
107
+ # Optional: A Boolean, String, or Proc to retain the changelog files for the previous versions. Defaults to false.
108
+ # Setting to true will retain the changelog files in the "changelogs" directory.
109
+ # Setting to a String will use that path as the directory to retain the changelog files.
110
+ # The Proc receives a version hash and the changelog content.
111
+ task.retain_changelogs = ->(version, content) do
112
+ # your special retention logic
113
+ end
114
+ # or task.retain_changelogs = "path/to/changelogs"
115
+ # or task.retain_changelogs = true
116
+
107
117
  # Optional: Whether to commit the changes automatically. Defaults to true.
108
118
  task.commit = false
109
119
 
data/Rakefile CHANGED
@@ -16,5 +16,5 @@ require_relative "lib/reissue/gem"
16
16
 
17
17
  Reissue::Task.create :reissue do |task|
18
18
  task.version_file = "lib/reissue/version.rb"
19
- task.push_finalize = :branch
19
+ task.push_finalize = true
20
20
  end
@@ -18,23 +18,24 @@ module Reissue
18
18
  # @param changes [Hash] The changes for the version (default: {}).
19
19
  # @param changelog_file [String] The path to the changelog file (default: @changelog_file).
20
20
  # @param version_limit [Integer] The number of versions to keep (default: 2).
21
- def call(version, date: "Unreleased", changes: {}, changelog_file: @changelog_file, version_limit: 2)
21
+ def call(version, date: "Unreleased", changes: {}, changelog_file: @changelog_file, version_limit: 2, retain_changelogs: false)
22
22
  update(version, date:, changes:, version_limit:)
23
- write(changelog_file)
23
+ write(changelog_file, retain_changelogs:)
24
24
  changelog
25
25
  end
26
26
 
27
- def finalize(date: Date.today, changelog_file: @changelog_file)
27
+ def finalize(date: Date.today, changelog_file: @changelog_file, retain_changelogs: false)
28
28
  @changelog = Parser.parse(File.read(changelog_file))
29
+
29
30
  # find the highest version number and if it is unreleased, update the date
30
- version = changelog["versions"].max_by { |v| ::Gem::Version.new(v["version"]) }
31
+ version = latest_version
31
32
  version_date = version["date"]
32
33
  if version_date.nil? || version_date == "Unreleased"
33
34
  changelog["versions"].find do |v|
34
35
  v["version"] == version["version"]
35
36
  end["date"] = date
36
37
  end
37
- write
38
+ write(changelog_file, retain_changelogs:)
38
39
  changelog
39
40
  end
40
41
 
@@ -57,10 +58,10 @@ module Reissue
57
58
  #
58
59
  # @param changelog_file [String] The path to the changelog file (default: @changelog_file).
59
60
  # @return [Hash] The parsed changelog.
60
- def reformat(result_file = @changelog_file, version_limit: 2)
61
+ def reformat(result_file = @changelog_file, version_limit: 2, retain_changelogs: false)
61
62
  @changelog = Parser.parse(File.read(@changelog_file))
62
63
  changelog["versions"] = changelog["versions"].first(version_limit)
63
- write(result_file)
64
+ write(result_file, retain_changelogs:)
64
65
  changelog
65
66
  end
66
67
 
@@ -74,8 +75,34 @@ module Reissue
74
75
  # Writes the changelog to the specified file.
75
76
  #
76
77
  # @param changelog_file [String] The path to the changelog file (default: @changelog_file).
77
- def write(changelog_file = @changelog_file)
78
+ def write(changelog_file = @changelog_file, retain_changelogs: false)
79
+ if retain_changelogs
80
+ store_current_changelog(latest_version, retain_changelogs)
81
+ end
78
82
  File.write(changelog_file, to_s)
79
83
  end
84
+
85
+ # Stores the current changelog in a file.
86
+ #
87
+ # @param version [Hash] The version information.
88
+ # @param path [String, Proc] The path to store the changelog or a callable that receives the version and the changelog.
89
+ def store_current_changelog(version, path)
90
+ if path
91
+ if path.respond_to?(:call)
92
+ path.call(version, to_s)
93
+ else
94
+ require "fileutils"
95
+ path = path.is_a?(String) ? path : "changelogs"
96
+ FileUtils.mkdir_p(path)
97
+ File.write("#{path}/#{version["version"]}.md", to_s)
98
+ end
99
+ end
100
+ end
101
+
102
+ private
103
+
104
+ def latest_version
105
+ changelog["versions"].max_by { |v| ::Gem::Version.new(v["version"]) }
106
+ end
80
107
  end
81
108
  end
data/lib/reissue/rake.rb CHANGED
@@ -31,6 +31,11 @@ module Reissue
31
31
  # The path to the changelog file.
32
32
  attr_accessor :changelog_file
33
33
 
34
+ # Set to true to retain the changelog files for the previous versions.
35
+ # Default: false.
36
+ # Provide a callable to decide how to store the files.
37
+ attr_accessor :retain_changelogs
38
+
34
39
  # Additional paths to add to the commit.
35
40
  attr_writer :updated_paths
36
41
 
@@ -52,19 +57,34 @@ module Reissue
52
57
  # Set this to :branch to push to a new branch.
53
58
  attr_accessor :push_finalize
54
59
 
55
- def initialize(name = :reissue)
60
+ # Whether to push the changes when a new version is created. Default: :branch.
61
+ # Requires commit to be true.
62
+ #
63
+ # Set this to false to disable pushing.
64
+ # Set this to true to push to the current branch.
65
+ # Set this to :branch to push to a new branch.
66
+ attr_accessor :push_reissue
67
+
68
+ def initialize(name = :reissue, formatter: Reissue, tasker: Rake::Task)
56
69
  @name = name
70
+ @formatter = formatter
71
+ @tasker = tasker
57
72
  @description = "Prepare the code for work on a new version."
58
73
  @version_file = nil
59
74
  @updated_paths = []
60
75
  @changelog_file = "CHANGELOG.md"
76
+ @retain_changelogs = false
61
77
  @commit = true
62
78
  @commit_finalize = true
63
79
  @push_finalize = false
64
80
  @version_limit = 2
65
81
  @version_redo_proc = nil
82
+ @push_reissue = :branch
66
83
  end
67
84
 
85
+ attr_reader :formatter, :tasker
86
+ private :formatter, :tasker
87
+
68
88
  def finalize_with_branch?
69
89
  push_finalize == :branch
70
90
  end
@@ -73,25 +93,41 @@ module Reissue
73
93
  !!push_finalize
74
94
  end
75
95
 
96
+ def reissue_version_with_branch?
97
+ push_reissue == :branch
98
+ end
99
+
100
+ def push_reissue?
101
+ !!push_reissue
102
+ end
103
+
104
+ def bundle
105
+ if defined?(Bundler)
106
+ Bundler.with_unbundled_env do
107
+ system("bundle install")
108
+ end
109
+ end
110
+ end
111
+
76
112
  def define
77
113
  desc description
78
114
  task name, [:segment] do |task, args|
79
115
  segment = args[:segment] || "patch"
80
- new_version = Reissue.call(segment:, version_file:, version_limit:, version_redo_proc:)
81
- if defined?(Bundler)
82
- Bundler.with_unbundled_env do
83
- system("bundle install")
84
- end
85
- end
116
+ new_version = formatter.call(segment:, version_file:, version_limit:, version_redo_proc:)
117
+ bundle
86
118
 
87
119
  system("git add -u")
88
- if updated_paths.any?
120
+ if updated_paths&.any?
89
121
  system("git add #{updated_paths.join(" ")}")
90
122
  end
91
123
 
92
124
  bump_message = "Bump version to #{new_version}"
93
125
  if commit
126
+ if reissue_version_with_branch?
127
+ tasker["#{name}:branch"].invoke("reissue/#{new_version}")
128
+ end
94
129
  system("git commit -m '#{bump_message}'")
130
+ tasker["#{name}:push"].invoke if push_reissue?
95
131
  else
96
132
  system("echo '#{bump_message}'")
97
133
  end
@@ -106,28 +142,28 @@ module Reissue
106
142
  else
107
143
  args[:version_limit].to_i
108
144
  end
109
- Reissue.reformat(changelog_file, version_limit:)
145
+ formatter.reformat(changelog_file, version_limit:, retain_changelogs:)
110
146
  end
111
147
 
112
148
  desc "Finalize the changelog for an unreleased version to set the release date."
113
149
  task "#{name}:finalize", [:date] do |task, args|
114
150
  date = args[:date] || Time.now.strftime("%Y-%m-%d")
115
- version, date = Reissue.finalize(date, changelog_file:)
151
+ version, date = formatter.finalize(date, changelog_file:)
116
152
  finalize_message = "Finalize the changelog for version #{version} on #{date}"
117
153
  if commit_finalize
118
- Rake::Task["#{name}:branch"].invoke("reissue/#{version}") if finalize_with_branch?
154
+ tasker["#{name}:branch"].invoke("reissue/#{version}") if finalize_with_branch?
119
155
  system("git add -u")
120
156
  system("git commit -m '#{finalize_message}'")
121
- Rake::Task["#{name}:push"].invoke if push_finalize?
157
+ tasker["#{name}:push"].invoke if push_finalize?
122
158
  else
123
159
  system("echo '#{finalize_message}'")
124
160
  end
125
161
  end
126
162
 
127
163
  desc "Create a new branch for the next version."
128
- task "#{name}:branch", [:branch] do |task, args|
129
- raise "No branch name specified" unless args[:branch]
130
- system("git checkout -b #{args[:branch]}")
164
+ task "#{name}:branch", [:branch_name] do |task, args|
165
+ raise "No branch name specified" unless args[:branch_name]
166
+ system("git checkout -b #{args[:branch_name]}")
131
167
  end
132
168
 
133
169
  desc "Push the current branch to the remote repository."
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Reissue
4
- VERSION = "0.2.2"
4
+ VERSION = "0.3.1"
5
5
  end
data/lib/reissue.rb CHANGED
@@ -19,6 +19,7 @@ module Reissue
19
19
  def self.call(
20
20
  version_file:,
21
21
  changelog_file: "CHANGELOG.md",
22
+ retain_changelogs: false,
22
23
  segment: "patch",
23
24
  date: "Unreleased",
24
25
  changes: {},
@@ -29,7 +30,7 @@ module Reissue
29
30
  new_version = version_updater.call(segment, version_file:)
30
31
  if changelog_file
31
32
  changelog_updater = ChangelogUpdater.new(changelog_file)
32
- changelog_updater.call(new_version, date:, changes:, changelog_file:, version_limit:)
33
+ changelog_updater.call(new_version, date:, changes:, changelog_file:, version_limit:, retain_changelogs:)
33
34
  end
34
35
  new_version
35
36
  end
@@ -50,8 +51,9 @@ module Reissue
50
51
  #
51
52
  # @param file [String] The path to the changelog file.
52
53
  # @param version_limit [Integer] The number of versions to retain in the changelog. Default: 2
53
- def self.reformat(file, version_limit: 2)
54
+ # @param retain_changelogs [Boolean, String, Proc] Whether to retain the changelog files for the previous versions.
55
+ def self.reformat(file, version_limit: 2, retain_changelogs: false)
54
56
  changelog_updater = ChangelogUpdater.new(file)
55
- changelog_updater.reformat(version_limit:)
57
+ changelog_updater.reformat(version_limit:, retain_changelogs:)
56
58
  end
57
59
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reissue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Gay
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2024-09-06 00:00:00.000000000 Z
10
+ date: 2025-01-16 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rake
@@ -50,7 +49,6 @@ metadata:
50
49
  homepage_uri: https://github.com/SOFware/reissue
51
50
  source_code_uri: https://github.com/SOFware/reissue
52
51
  changelog_uri: https://github.com/SOFware/reissue/blob/main/CHANGELOG.md
53
- post_install_message:
54
52
  rdoc_options: []
55
53
  require_paths:
56
54
  - lib
@@ -65,8 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
65
63
  - !ruby/object:Gem::Version
66
64
  version: '0'
67
65
  requirements: []
68
- rubygems_version: 3.5.9
69
- signing_key:
66
+ rubygems_version: 3.6.2
70
67
  specification_version: 4
71
68
  summary: Keep your versions and changelogs up to date and prepared for release.
72
69
  test_files: []