gem_toys 0.6.1 → 0.9.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/CHANGELOG.md +28 -0
- data/README.md +8 -1
- data/lib/gem_toys/template/common_code.rb +2 -6
- data/lib/gem_toys/template/release/changelog.rb +48 -0
- data/lib/gem_toys/template/release/git.rb +41 -0
- data/lib/gem_toys/template/release.rb +39 -64
- data/lib/gem_toys/template.rb +12 -3
- data/lib/gem_toys/version.rb +1 -1
- metadata +25 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b023bf7a74055e177396b6f315eda52ed9737d2d18de86c0213d7a740c5089f
|
4
|
+
data.tar.gz: c2ae112eca387b13cead398223022eb219e2900ae4ce3ef2b7c8b9116ef78728
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73979e0c344259f99b1605680e9369121bd7fbbb740ba1af6019e2b48d56596b76691d096ec3a7433de04bd60aea9c9769fe74c9059b8a10bb650d92bb0d513a
|
7
|
+
data.tar.gz: bf1432b40babf5b2c8c2d21a3d2e4689327545a3589435a818fcef98c81c037e1a9f76a5f5b5d03cd196b09e5c0fc14b8b6284d15d8435e837b2ced68e086ceb
|
data/CHANGELOG.md
CHANGED
@@ -2,8 +2,36 @@
|
|
2
2
|
|
3
3
|
## master (unreleased)
|
4
4
|
|
5
|
+
## 0.9.0 (2021-08-26)
|
6
|
+
|
7
|
+
* Fix built gem version after `refresh` answer.
|
8
|
+
* Update development dependencies.
|
9
|
+
* Lock RuboCop version better.
|
10
|
+
* Resolve new RuboCop offenses.
|
11
|
+
|
12
|
+
## 0.8.0 (2021-04-16)
|
13
|
+
|
14
|
+
* Add `refresh` answer for release confirmation.
|
15
|
+
|
16
|
+
## 0.7.1 (2021-03-04)
|
17
|
+
|
18
|
+
* Fix error about non-renamed `version` in one of aborts.
|
19
|
+
* Improve Regexp for date of existing release.
|
20
|
+
Catch only content inside the last parentheses.
|
21
|
+
|
22
|
+
## 0.7.0 (2021-03-04)
|
23
|
+
|
24
|
+
* Add `:changelog_file_name` option.
|
25
|
+
* Add `:version_tag_prefix` option.
|
26
|
+
* Change date format for `versions` tool.
|
27
|
+
* Add documentation about `:version_file_path` option.
|
28
|
+
* Split `release` tool into modules for RuboCop satisfaction.
|
29
|
+
|
5
30
|
## 0.6.1 (2021-02-10)
|
6
31
|
|
32
|
+
* Gently abort when `unreleased_title` not found.
|
33
|
+
* Improve documentation about `:unreleased_title` option.
|
34
|
+
|
7
35
|
## 0.6.0 (2021-02-10)
|
8
36
|
|
9
37
|
* Support Ruby 3.
|
data/README.md
CHANGED
@@ -36,7 +36,14 @@ gem install gem_toys
|
|
36
36
|
# .toys.rb
|
37
37
|
require 'gem_toys'
|
38
38
|
expand GemToys::Template,
|
39
|
-
|
39
|
+
## default is `CHANGELOG.md`
|
40
|
+
changelog_file_name: 'ChangeLog.md',
|
41
|
+
## default is `## master (unreleased)`
|
42
|
+
unreleased_title: '## Unreleased',
|
43
|
+
## default is `"lib/#{project_name_with_slashes_instead_dashes}/version.rb"`
|
44
|
+
version_file_path: 'lib/my-awesome_gem.rb',
|
45
|
+
## default is `v`, so tags are like `v4.1.0`
|
46
|
+
version_tag_prefix: ''
|
40
47
|
|
41
48
|
# `gem` namespace created, aliases are optional, but handful
|
42
49
|
alias_tool :g, :gem
|
@@ -31,12 +31,8 @@ module GemToys
|
|
31
31
|
version_file_content.match(/VERSION = '(.+)'/)[1]
|
32
32
|
end
|
33
33
|
|
34
|
-
memoize def changelog_file_name
|
35
|
-
'CHANGELOG.md'
|
36
|
-
end
|
37
|
-
|
38
34
|
memoize def changelog_file_path
|
39
|
-
File.join context_directory, changelog_file_name
|
35
|
+
File.join context_directory, @template.changelog_file_name
|
40
36
|
end
|
41
37
|
|
42
38
|
memoize def gem_file_name
|
@@ -75,7 +71,7 @@ module GemToys
|
|
75
71
|
|
76
72
|
versions.each do |version|
|
77
73
|
created_at = begin
|
78
|
-
DateTime.parse(version[:created_at]).strftime('%
|
74
|
+
DateTime.parse(version[:created_at]).strftime('%F %R')
|
79
75
|
rescue Date::Error
|
80
76
|
version[:created_at]
|
81
77
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GemToys
|
4
|
+
class Template
|
5
|
+
class Release
|
6
|
+
## Helper module with methods about CHANGELOG file for `release` tool
|
7
|
+
module Changelog
|
8
|
+
private
|
9
|
+
|
10
|
+
def update_changelog_file
|
11
|
+
puts 'Updating changelog file...'
|
12
|
+
|
13
|
+
@changelog_lines = File.readlines(changelog_file_path)
|
14
|
+
|
15
|
+
existing_line = @changelog_lines.find { |line| line.start_with? "## #{@new_version} " }
|
16
|
+
|
17
|
+
if existing_line
|
18
|
+
return if (existing_date = existing_line.scan(/\(([^()]+)\)/).last.first) == @today
|
19
|
+
|
20
|
+
abort "There is already #{new_version} version with date #{existing_date}"
|
21
|
+
end
|
22
|
+
|
23
|
+
File.write changelog_file_path, new_changelog_content
|
24
|
+
end
|
25
|
+
|
26
|
+
def new_changelog_content
|
27
|
+
unreleased_title = @template.unreleased_title
|
28
|
+
|
29
|
+
unreleased_title_index = @changelog_lines.index("#{unreleased_title}\n")
|
30
|
+
|
31
|
+
abort_without_unreleased_title unless unreleased_title_index
|
32
|
+
|
33
|
+
@changelog_lines.insert(
|
34
|
+
unreleased_title_index + 2,
|
35
|
+
'#' * unreleased_title.scan(/^#+/).first.size + " #{@new_version} (#{@today})\n\n"
|
36
|
+
).join
|
37
|
+
end
|
38
|
+
|
39
|
+
def abort_without_unreleased_title
|
40
|
+
abort <<~TEXT
|
41
|
+
`#{@template.unreleased_title}` not found in the `#{@template.changelog_file_name}` as the title for unreleased changes.
|
42
|
+
Please, use `:unreleased_title` option if you have non-default one.
|
43
|
+
TEXT
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GemToys
|
4
|
+
class Template
|
5
|
+
class Release
|
6
|
+
## Helper module with methods about `git` for `release` tool
|
7
|
+
module Git
|
8
|
+
private
|
9
|
+
|
10
|
+
def process_git
|
11
|
+
new_version_git_tag = "#{@template.version_tag_prefix}#{@new_version}"
|
12
|
+
|
13
|
+
## Checkout to a new git branch, required for protected `master` with CI
|
14
|
+
# sh "git switch -c #{new_version_git_tag}"
|
15
|
+
|
16
|
+
commit_changes
|
17
|
+
|
18
|
+
## Tag commit
|
19
|
+
puts 'Tagging the commit...'
|
20
|
+
sh "git tag -a #{new_version_git_tag} -m 'Version #{@new_version}'"
|
21
|
+
|
22
|
+
## Push commit
|
23
|
+
puts 'Pushing commit...'
|
24
|
+
sh 'git push'
|
25
|
+
|
26
|
+
## Push tags
|
27
|
+
puts 'Pushing tags...'
|
28
|
+
sh 'git push --tags'
|
29
|
+
end
|
30
|
+
|
31
|
+
def commit_changes
|
32
|
+
puts 'Committing changes...'
|
33
|
+
|
34
|
+
sh "git add #{version_file_path} #{changelog_file_path}"
|
35
|
+
|
36
|
+
sh "git commit -m 'Update version to #{@new_version}'"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -1,20 +1,35 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'highline'
|
4
|
+
|
5
|
+
require_relative 'release/changelog'
|
6
|
+
require_relative 'release/git'
|
7
|
+
|
3
8
|
module GemToys
|
4
9
|
class Template
|
5
10
|
## Template with gem release tool, expanding internally
|
6
11
|
class Release
|
7
12
|
include Toys::Template
|
8
13
|
|
9
|
-
attr_reader :version_file_path, :unreleased_title
|
14
|
+
attr_reader :changelog_file_name, :version_file_path, :version_tag_prefix, :unreleased_title
|
10
15
|
|
11
|
-
def initialize(
|
16
|
+
def initialize(
|
17
|
+
changelog_file_name:,
|
18
|
+
version_file_path:,
|
19
|
+
version_tag_prefix:,
|
20
|
+
unreleased_title:
|
21
|
+
)
|
22
|
+
@changelog_file_name = changelog_file_name
|
12
23
|
@version_file_path = version_file_path
|
24
|
+
@version_tag_prefix = version_tag_prefix
|
13
25
|
@unreleased_title = unreleased_title
|
14
26
|
end
|
15
27
|
|
16
28
|
on_expand do |template|
|
17
29
|
tool :release do
|
30
|
+
include Release::Changelog
|
31
|
+
include Release::Git
|
32
|
+
|
18
33
|
required_arg :new_version
|
19
34
|
|
20
35
|
to_run do
|
@@ -31,27 +46,13 @@ module GemToys
|
|
31
46
|
## Update CHANGELOG
|
32
47
|
update_changelog_file
|
33
48
|
|
34
|
-
## Build new gem file
|
35
|
-
exec_tool 'gem build'
|
36
|
-
|
37
49
|
wait_for_manual_check
|
38
50
|
|
39
|
-
##
|
40
|
-
|
41
|
-
|
42
|
-
commit_changes
|
43
|
-
|
44
|
-
## Tag commit
|
45
|
-
puts 'Tagging the commit...'
|
46
|
-
sh "git tag -a v#{@new_version} -m 'Version #{@new_version}'"
|
47
|
-
|
48
|
-
## Push commit
|
49
|
-
puts 'Pushing commit...'
|
50
|
-
sh 'git push'
|
51
|
+
## Build new gem file
|
52
|
+
exec_tool 'gem build'
|
51
53
|
|
52
|
-
##
|
53
|
-
|
54
|
-
sh 'git push --tags'
|
54
|
+
## Commit, tag, push
|
55
|
+
process_git
|
55
56
|
|
56
57
|
puts 'Pushing gem...'
|
57
58
|
sh "gem push #{current_gem_file}"
|
@@ -100,57 +101,31 @@ module GemToys
|
|
100
101
|
)
|
101
102
|
end
|
102
103
|
|
103
|
-
def
|
104
|
-
|
105
|
-
|
106
|
-
@changelog_lines = File.readlines(changelog_file_path)
|
107
|
-
|
108
|
-
existing_line = @changelog_lines.find { |line| line.start_with? "## #{@new_version} " }
|
109
|
-
|
110
|
-
if existing_line
|
111
|
-
return if (existing_date = existing_line.match(/\((.*)\)/)[1]) == @today
|
112
|
-
|
113
|
-
abort "There is already #{version} version with date #{existing_date}"
|
114
|
-
end
|
115
|
-
|
116
|
-
File.write changelog_file_path, new_changelog_content
|
117
|
-
end
|
118
|
-
|
119
|
-
def new_changelog_content
|
120
|
-
unreleased_title = @template.unreleased_title
|
121
|
-
|
122
|
-
unreleased_title_index = @changelog_lines.index("#{unreleased_title}\n")
|
123
|
-
|
124
|
-
abort_without_unreleased_title unless unreleased_title_index
|
104
|
+
def wait_for_manual_check
|
105
|
+
print_files_diff
|
125
106
|
|
126
|
-
|
127
|
-
unreleased_title_index + 2,
|
128
|
-
'#' * unreleased_title.scan(/^#+/).first.size + " #{@new_version} (#{@today})\n\n"
|
129
|
-
).join
|
107
|
+
manual_check_menu
|
130
108
|
end
|
131
109
|
|
132
|
-
def
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
TEXT
|
110
|
+
def print_files_diff
|
111
|
+
$stdout.puts
|
112
|
+
sh "git diff #{version_file_path} #{changelog_file_path}"
|
113
|
+
$stdout.puts
|
137
114
|
end
|
138
115
|
|
139
|
-
def
|
140
|
-
|
116
|
+
def manual_check_menu
|
117
|
+
HighLine.new.choose do |menu|
|
118
|
+
menu.layout = :one_line
|
141
119
|
|
142
|
-
|
120
|
+
menu.prompt = 'Are these changes correct? '
|
143
121
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
$stdout.puts 'Please, validate files before committing and pushing!'
|
152
|
-
$stdout.puts 'Press anything to continue, Ctrl+C to cancel.'
|
153
|
-
$stdin.gets
|
122
|
+
menu.choice(:yes)
|
123
|
+
menu.choice(:no) { abort }
|
124
|
+
menu.choice(:refresh) do
|
125
|
+
handle_new_version
|
126
|
+
wait_for_manual_check
|
127
|
+
end
|
128
|
+
end
|
154
129
|
end
|
155
130
|
end
|
156
131
|
end
|
data/lib/gem_toys/template.rb
CHANGED
@@ -9,10 +9,17 @@ module GemToys
|
|
9
9
|
class Template
|
10
10
|
include Toys::Template
|
11
11
|
|
12
|
-
attr_reader :version_file_path, :unreleased_title
|
13
|
-
|
14
|
-
def initialize(
|
12
|
+
attr_reader :changelog_file_name, :version_file_path, :version_tag_prefix, :unreleased_title
|
13
|
+
|
14
|
+
def initialize(
|
15
|
+
changelog_file_name: 'CHANGELOG.md',
|
16
|
+
version_file_path: nil,
|
17
|
+
version_tag_prefix: 'v',
|
18
|
+
unreleased_title: '## master (unreleased)'
|
19
|
+
)
|
20
|
+
@changelog_file_name = changelog_file_name
|
15
21
|
@version_file_path = version_file_path
|
22
|
+
@version_tag_prefix = version_tag_prefix
|
16
23
|
@unreleased_title = unreleased_title
|
17
24
|
end
|
18
25
|
|
@@ -65,7 +72,9 @@ module GemToys
|
|
65
72
|
|
66
73
|
require_relative 'template/release'
|
67
74
|
expand Template::Release,
|
75
|
+
changelog_file_name: template.changelog_file_name,
|
68
76
|
version_file_path: template.version_file_path,
|
77
|
+
version_tag_prefix: template.version_tag_prefix,
|
69
78
|
unreleased_title: template.unreleased_title
|
70
79
|
end
|
71
80
|
end
|
data/lib/gem_toys/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gem_toys
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Popov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: alt_memery
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: highline
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: pry-byebug
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,28 +100,28 @@ dependencies:
|
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.
|
103
|
+
version: 0.12.0
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.
|
110
|
+
version: 0.12.0
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: codecov
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
115
|
- - "~>"
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.
|
117
|
+
version: 0.6.0
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
122
|
- - "~>"
|
109
123
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.
|
124
|
+
version: 0.6.0
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: rspec
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,14 +156,14 @@ dependencies:
|
|
142
156
|
requirements:
|
143
157
|
- - "~>"
|
144
158
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
159
|
+
version: 1.19.0
|
146
160
|
type: :development
|
147
161
|
prerelease: false
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
149
163
|
requirements:
|
150
164
|
- - "~>"
|
151
165
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
166
|
+
version: 1.19.0
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: rubocop-performance
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -194,6 +208,8 @@ files:
|
|
194
208
|
- lib/gem_toys/template.rb
|
195
209
|
- lib/gem_toys/template/common_code.rb
|
196
210
|
- lib/gem_toys/template/release.rb
|
211
|
+
- lib/gem_toys/template/release/changelog.rb
|
212
|
+
- lib/gem_toys/template/release/git.rb
|
197
213
|
- lib/gem_toys/template/versions.rb
|
198
214
|
- lib/gem_toys/version.rb
|
199
215
|
homepage: https://github.com/AlexWayfer/gem_toys
|
@@ -221,7 +237,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
221
237
|
- !ruby/object:Gem::Version
|
222
238
|
version: '0'
|
223
239
|
requirements: []
|
224
|
-
rubygems_version: 3.2.
|
240
|
+
rubygems_version: 3.2.22
|
225
241
|
signing_key:
|
226
242
|
specification_version: 4
|
227
243
|
summary: Toys template for gems
|