reissue 0.3.0 → 0.3.2
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/CHANGELOG.md +11 -5
- data/README.md +10 -0
- data/lib/reissue/changelog_updater.rb +35 -8
- data/lib/reissue/printer.rb +1 -1
- data/lib/reissue/rake.rb +32 -17
- data/lib/reissue/version.rb +1 -1
- data/lib/reissue.rb +5 -3
- metadata +3 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4cc74e34e41fc5b950be6012c3b517235f0a6537f30c09ae17c6f8d66240407a
|
4
|
+
data.tar.gz: 19f8f5b5bb7cdce525e26d3def6c18139462def2b9ac5c936659a7f4608bf213
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84e988380692e405e2e173e2e87cb9e6088328e120640c4a482b3e737985961abe40f1ecadffd674113489f635101d0f75777d56635a3636b054f27c275c1be7
|
7
|
+
data.tar.gz: 02f0db508076455faf195b7f1b0ecd8d8ab3b1e772e61f335935b48f2bde96aee76aa6a89c9a8e39c44d358fe3d2d70d1fe41c2d4bd2ccdb445c0b103ed4b853
|
data/CHANGELOG.md
CHANGED
@@ -5,14 +5,20 @@ 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.3.
|
8
|
+
## [0.3.2] - 2025-01-16
|
9
|
+
|
10
|
+
### Fixed
|
11
|
+
|
12
|
+
- Parser will handle nil changes
|
13
|
+
|
14
|
+
## [0.3.1] - 2025-01-16
|
9
15
|
|
10
16
|
### Added
|
11
17
|
|
12
|
-
- Add `
|
18
|
+
- Add `retain_changelogs` option to control how to retain the changelog files for the previous versions.
|
13
19
|
|
14
20
|
### Changed
|
15
21
|
|
16
|
-
-
|
17
|
-
|
18
|
-
|
22
|
+
- Set the name of the `reissue:branch` argument to `branch_name` to be clearer.
|
23
|
+
- Inject the constants in the `create` method.
|
24
|
+
- Updated the tested Ruby version to 3.4.
|
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
|
|
@@ -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 =
|
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/printer.rb
CHANGED
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
|
|
@@ -60,12 +65,15 @@ module Reissue
|
|
60
65
|
# Set this to :branch to push to a new branch.
|
61
66
|
attr_accessor :push_reissue
|
62
67
|
|
63
|
-
def initialize(name = :reissue)
|
68
|
+
def initialize(name = :reissue, formatter: Reissue, tasker: Rake::Task)
|
64
69
|
@name = name
|
70
|
+
@formatter = formatter
|
71
|
+
@tasker = tasker
|
65
72
|
@description = "Prepare the code for work on a new version."
|
66
73
|
@version_file = nil
|
67
74
|
@updated_paths = []
|
68
75
|
@changelog_file = "CHANGELOG.md"
|
76
|
+
@retain_changelogs = false
|
69
77
|
@commit = true
|
70
78
|
@commit_finalize = true
|
71
79
|
@push_finalize = false
|
@@ -74,6 +82,9 @@ module Reissue
|
|
74
82
|
@push_reissue = :branch
|
75
83
|
end
|
76
84
|
|
85
|
+
attr_reader :formatter, :tasker
|
86
|
+
private :formatter, :tasker
|
87
|
+
|
77
88
|
def finalize_with_branch?
|
78
89
|
push_finalize == :branch
|
79
90
|
end
|
@@ -90,29 +101,33 @@ module Reissue
|
|
90
101
|
!!push_reissue
|
91
102
|
end
|
92
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
|
+
|
93
112
|
def define
|
94
113
|
desc description
|
95
114
|
task name, [:segment] do |task, args|
|
96
115
|
segment = args[:segment] || "patch"
|
97
|
-
new_version =
|
98
|
-
|
99
|
-
Bundler.with_unbundled_env do
|
100
|
-
system("bundle install")
|
101
|
-
end
|
102
|
-
end
|
116
|
+
new_version = formatter.call(segment:, version_file:, version_limit:, version_redo_proc:)
|
117
|
+
bundle
|
103
118
|
|
104
119
|
system("git add -u")
|
105
|
-
if updated_paths
|
120
|
+
if updated_paths&.any?
|
106
121
|
system("git add #{updated_paths.join(" ")}")
|
107
122
|
end
|
108
123
|
|
109
124
|
bump_message = "Bump version to #{new_version}"
|
110
125
|
if commit
|
111
126
|
if reissue_version_with_branch?
|
112
|
-
|
127
|
+
tasker["#{name}:branch"].invoke("reissue/#{new_version}")
|
113
128
|
end
|
114
129
|
system("git commit -m '#{bump_message}'")
|
115
|
-
|
130
|
+
tasker["#{name}:push"].invoke if push_reissue?
|
116
131
|
else
|
117
132
|
system("echo '#{bump_message}'")
|
118
133
|
end
|
@@ -127,28 +142,28 @@ module Reissue
|
|
127
142
|
else
|
128
143
|
args[:version_limit].to_i
|
129
144
|
end
|
130
|
-
|
145
|
+
formatter.reformat(changelog_file, version_limit:, retain_changelogs:)
|
131
146
|
end
|
132
147
|
|
133
148
|
desc "Finalize the changelog for an unreleased version to set the release date."
|
134
149
|
task "#{name}:finalize", [:date] do |task, args|
|
135
150
|
date = args[:date] || Time.now.strftime("%Y-%m-%d")
|
136
|
-
version, date =
|
151
|
+
version, date = formatter.finalize(date, changelog_file:)
|
137
152
|
finalize_message = "Finalize the changelog for version #{version} on #{date}"
|
138
153
|
if commit_finalize
|
139
|
-
|
154
|
+
tasker["#{name}:branch"].invoke("reissue/#{version}") if finalize_with_branch?
|
140
155
|
system("git add -u")
|
141
156
|
system("git commit -m '#{finalize_message}'")
|
142
|
-
|
157
|
+
tasker["#{name}:push"].invoke if push_finalize?
|
143
158
|
else
|
144
159
|
system("echo '#{finalize_message}'")
|
145
160
|
end
|
146
161
|
end
|
147
162
|
|
148
163
|
desc "Create a new branch for the next version."
|
149
|
-
task "#{name}:branch", [:
|
150
|
-
raise "No branch name specified" unless args[:
|
151
|
-
system("git checkout -b #{args[:
|
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]}")
|
152
167
|
end
|
153
168
|
|
154
169
|
desc "Push the current branch to the remote repository."
|
data/lib/reissue/version.rb
CHANGED
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
|
-
|
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.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Gay
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
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.
|
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: []
|