gem-release 2.0.2 → 2.2.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 +38 -1
- data/Gemfile +1 -0
- data/Gemfile.lock +55 -39
- data/README.md +4 -1
- data/config.ru +5 -0
- data/gem-release.gemspec +19 -0
- data/lib/gem/release/cmds.rb +1 -0
- data/lib/gem/release/cmds/bootstrap.rb +1 -1
- data/lib/gem/release/cmds/bump.rb +10 -8
- data/lib/gem/release/cmds/gemspec.rb +1 -1
- data/lib/gem/release/cmds/github.rb +79 -0
- data/lib/gem/release/cmds/release.rb +48 -9
- data/lib/gem/release/cmds/tag.rb +7 -3
- data/lib/gem/release/context/gemspec.rb +10 -2
- data/lib/gem/release/context/github.rb +62 -0
- data/lib/gem/release/helper.rb +6 -3
- data/lib/gem/release/helper/http.rb +39 -0
- data/lib/gem/release/support/gem_command.rb +3 -3
- data/lib/gem/release/version.rb +1 -1
- data/lib/gem/release/version/number.rb +10 -2
- metadata +11 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df5f557db83497785b9b32c6c0c13220b7b7a8ec48b23fc5d368050faa07996a
|
4
|
+
data.tar.gz: bafa68971d2a88664d8f40dcba532dbecddf67fc4e513dd85c0cfc0dade2e758
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 325cf631c857c024f39b835c18ad9b1fa6ef9517f351ba7dab1fba0a3a577eecc1e184981d1fe7b42d19d0d63fb3d4503780a7d30333246c6dbe364b49c89838
|
7
|
+
data.tar.gz: 8097e8309baa8bebcb967a382cf731f6c9f229016b3c77aefa062249350613e671213425fd58e229bc05017ef88a58a01602a0d53d0dda99af5997fcaa325484
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,43 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
## v2.0
|
3
|
+
## v2.2.0 - 2020-10-12
|
4
|
+
|
5
|
+
### Added
|
6
|
+
|
7
|
+
- Allow version bump to specific prerelease version number
|
8
|
+
(PR: https://github.com/svenfuchs/gem-release/pull/97)
|
9
|
+
|
10
|
+
## v2.1.1 - 2019-10-28
|
11
|
+
|
12
|
+
### Fixed
|
13
|
+
|
14
|
+
- Fix error when custom message provided for `gem bump`
|
15
|
+
(PR: https://github.com/svenfuchs/gem-release/pull/92)
|
16
|
+
|
17
|
+
## v2.1.0 - 2019-10-17
|
18
|
+
|
19
|
+
### Added
|
20
|
+
|
21
|
+
- Add gem release --github
|
22
|
+
(PR: https://github.com/svenfuchs/gem-release/pull/73)
|
23
|
+
|
24
|
+
## v2.0.4 - 2019-10-10
|
25
|
+
|
26
|
+
### Fixed
|
27
|
+
|
28
|
+
- Make default "stage delimiter" to be dot instead of dash
|
29
|
+
(PR: https://github.com/svenfuchs/gem-release/pull/87)
|
30
|
+
|
31
|
+
## v2.0.3 - 2019-07-04
|
32
|
+
|
33
|
+
### Fixed
|
34
|
+
|
35
|
+
- Fix `gem-release` Heredoc for Ruby 2.2
|
36
|
+
(PR: https://github.com/svenfuchs/gem-release/pull/82)
|
37
|
+
- Partially Fix "gem bump tags the wrong version"
|
38
|
+
(PR: https://github.com/svenfuchs/gem-release/pull/83)
|
39
|
+
|
40
|
+
## v2.0.2 - 2019-06-27
|
4
41
|
|
5
42
|
### Fixed
|
6
43
|
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,66 +1,81 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
gem-release (2.0
|
4
|
+
gem-release (2.2.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
9
|
+
addressable (2.7.0)
|
10
|
+
public_suffix (>= 2.0.2, < 5.0)
|
11
|
+
builder (3.2.4)
|
12
|
+
coveralls (0.7.2)
|
13
|
+
multi_json (~> 1.3)
|
14
|
+
rest-client (= 1.6.7)
|
15
|
+
simplecov (>= 0.7)
|
16
|
+
term-ansicolor (= 1.2.2)
|
17
|
+
thor (= 0.18.1)
|
18
|
+
crack (0.4.4)
|
19
|
+
diff-lcs (1.4.4)
|
17
20
|
docile (1.3.2)
|
18
|
-
faraday (0.
|
21
|
+
faraday (1.0.1)
|
19
22
|
multipart-post (>= 1.2, < 3)
|
20
|
-
geminabox (1.
|
23
|
+
geminabox (1.2.0)
|
21
24
|
builder
|
22
25
|
faraday
|
23
26
|
httpclient (>= 2.2.7)
|
24
27
|
nesty
|
25
28
|
reentrant_flock
|
26
29
|
sinatra (>= 1.2.7)
|
30
|
+
hashdiff (1.0.1)
|
27
31
|
httpclient (2.8.3)
|
28
|
-
|
32
|
+
mime-types (3.3.1)
|
33
|
+
mime-types-data (~> 3.2015)
|
34
|
+
mime-types-data (3.2020.0512)
|
35
|
+
multi_json (1.15.0)
|
29
36
|
multipart-post (2.1.1)
|
30
|
-
mustermann (1.
|
37
|
+
mustermann (1.1.1)
|
38
|
+
ruby2_keywords (~> 0.0.1)
|
31
39
|
nesty (1.0.2)
|
32
|
-
|
33
|
-
rack
|
40
|
+
public_suffix (4.0.6)
|
41
|
+
rack (2.2.3)
|
42
|
+
rack-protection (2.1.0)
|
34
43
|
rack
|
35
44
|
reentrant_flock (0.1.1)
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
rspec-
|
40
|
-
|
41
|
-
rspec-
|
42
|
-
rspec-
|
45
|
+
rest-client (1.6.7)
|
46
|
+
mime-types (>= 1.16)
|
47
|
+
rspec (3.9.0)
|
48
|
+
rspec-core (~> 3.9.0)
|
49
|
+
rspec-expectations (~> 3.9.0)
|
50
|
+
rspec-mocks (~> 3.9.0)
|
51
|
+
rspec-core (3.9.3)
|
52
|
+
rspec-support (~> 3.9.3)
|
53
|
+
rspec-expectations (3.9.2)
|
43
54
|
diff-lcs (>= 1.2.0, < 2.0)
|
44
|
-
rspec-support (~> 3.
|
45
|
-
rspec-mocks (3.
|
55
|
+
rspec-support (~> 3.9.0)
|
56
|
+
rspec-mocks (3.9.1)
|
46
57
|
diff-lcs (>= 1.2.0, < 2.0)
|
47
|
-
rspec-support (~> 3.
|
48
|
-
rspec-support (3.
|
49
|
-
|
58
|
+
rspec-support (~> 3.9.0)
|
59
|
+
rspec-support (3.9.3)
|
60
|
+
ruby2_keywords (0.0.2)
|
61
|
+
simplecov (0.19.0)
|
50
62
|
docile (~> 1.1)
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
sinatra (2.0.5)
|
63
|
+
simplecov-html (~> 0.11)
|
64
|
+
simplecov-html (0.12.3)
|
65
|
+
sinatra (2.1.0)
|
55
66
|
mustermann (~> 1.0)
|
56
|
-
rack (~> 2.
|
57
|
-
rack-protection (= 2.0
|
67
|
+
rack (~> 2.2)
|
68
|
+
rack-protection (= 2.1.0)
|
58
69
|
tilt (~> 2.0)
|
59
|
-
term-ansicolor (1.
|
60
|
-
tins (~>
|
61
|
-
thor (0.
|
62
|
-
tilt (2.0.
|
63
|
-
tins (
|
70
|
+
term-ansicolor (1.2.2)
|
71
|
+
tins (~> 0.8)
|
72
|
+
thor (0.18.1)
|
73
|
+
tilt (2.0.10)
|
74
|
+
tins (0.13.2)
|
75
|
+
webmock (3.9.1)
|
76
|
+
addressable (>= 2.3.6)
|
77
|
+
crack (>= 0.3.2)
|
78
|
+
hashdiff (>= 0.4.0, < 2.0.0)
|
64
79
|
|
65
80
|
PLATFORMS
|
66
81
|
ruby
|
@@ -71,6 +86,7 @@ DEPENDENCIES
|
|
71
86
|
geminabox
|
72
87
|
rspec
|
73
88
|
simplecov
|
89
|
+
webmock
|
74
90
|
|
75
91
|
BUNDLED WITH
|
76
|
-
2.
|
92
|
+
2.1.4
|
data/README.md
CHANGED
@@ -209,7 +209,7 @@ gem_name - name of the gem (optional, will use the directory name, or all gemspe
|
|
209
209
|
### Options
|
210
210
|
|
211
211
|
```
|
212
|
-
-v, --version VERSION Target version: next [major|minor|patch|pre|release] or a given version number [x.x.x]
|
212
|
+
-v, --version VERSION Target version: next [major|minor|patch|pre|release] or a given version number [x.x.x, x.x.x.yyy.z]
|
213
213
|
-c, --[no-]commit Create a commit after incrementing gem version (default: true)
|
214
214
|
-m, --message Commit message template (default: Bump %{name} to %{version} %{skip_ci})
|
215
215
|
--skip-ci Add the [skip ci] tag to the commit message
|
@@ -249,6 +249,7 @@ minor # Bump to the next minor level (e.g. 0.0.1 to 0.1.0)
|
|
249
249
|
patch # Bump to the next patch level (e.g. 0.0.1 to 0.0.2)
|
250
250
|
pre|rc|etc # Bump to the next pre-release level (e.g. 0.0.1 to
|
251
251
|
# 0.1.0.pre.1, 1.0.0.pre.1 to 1.0.0.pre.2)
|
252
|
+
1.2.0.pre.3 # Bump to specific version number with provided pre-release level and build number
|
252
253
|
```
|
253
254
|
|
254
255
|
When searching for the version file for a gem named `gem-name`: the
|
@@ -312,6 +313,8 @@ gem_name - name of the gem (optional, will use the first gemspec, or all gemspec
|
|
312
313
|
--recurse Recurse into directories that contain gemspec files
|
313
314
|
--[no-]color
|
314
315
|
--pretend
|
316
|
+
--github Creates a Release on GitHub. Requires GitHub OAuth token passed by `--token TOKEN`
|
317
|
+
--token GitHub OAuth token. See https://developer.github.com/v3/#oauth2-token-sent-in-a-header for more details.
|
315
318
|
```
|
316
319
|
|
317
320
|
### Description
|
data/config.ru
ADDED
data/gem-release.gemspec
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
$:.unshift File.expand_path('../lib', __FILE__)
|
4
|
+
require 'gem/release/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = 'gem-release'
|
8
|
+
s.version = Gem::Release::VERSION
|
9
|
+
s.authors = ['Sven Fuchs', 'Dan Gebhardt']
|
10
|
+
s.email = ['me@svenfuchs.com']
|
11
|
+
s.homepage = 'https://github.com/svenfuchs/gem-release'
|
12
|
+
s.licenses = ['MIT']
|
13
|
+
s.summary = 'Release your ruby gems with ease'
|
14
|
+
s.description = 'Release your ruby gems with ease. (What a bold statement for such a tiny plugin ...)'
|
15
|
+
|
16
|
+
s.files = Dir.glob('{bin/*,lib/**/*,[A-Z]*}', File::FNM_DOTMATCH)
|
17
|
+
s.platform = Gem::Platform::RUBY
|
18
|
+
s.require_path = 'lib'
|
19
|
+
end
|
data/lib/gem/release/cmds.rb
CHANGED
@@ -8,7 +8,7 @@ module Gem
|
|
8
8
|
class Bootstrap < Base
|
9
9
|
summary 'Scaffolds a new gem from template files.'
|
10
10
|
|
11
|
-
description
|
11
|
+
description <<-str.split("\n").map(&:lstrip).join("\n")
|
12
12
|
#{summary} Optionally initialize a git repository, set a git remote, and push
|
13
13
|
to the remote repository.
|
14
14
|
|
@@ -7,7 +7,7 @@ module Gem
|
|
7
7
|
class Bump < Base
|
8
8
|
summary 'Bumps one, several, or all gems in this directory.'
|
9
9
|
|
10
|
-
description
|
10
|
+
description <<-str.split("\n").map(&:lstrip).join("\n")
|
11
11
|
Bumps the version number defined in lib/[gem_name]/version.rb to to a given,
|
12
12
|
specific version number, or to the next major, minor, patch, or pre-release
|
13
13
|
level.
|
@@ -76,7 +76,7 @@ module Gem
|
|
76
76
|
opts[:commit] = value
|
77
77
|
end
|
78
78
|
|
79
|
-
opt '-m', '--message', descr(:message) do |value|
|
79
|
+
opt '-m', '--message MESSAGE', descr(:message) do |value|
|
80
80
|
opts[:message] = value
|
81
81
|
end
|
82
82
|
|
@@ -136,16 +136,18 @@ module Gem
|
|
136
136
|
}.freeze
|
137
137
|
|
138
138
|
def run
|
139
|
+
new_version = nil
|
139
140
|
in_gem_dirs do
|
140
141
|
validate
|
141
142
|
checkout if opts[:branch]
|
142
143
|
bump
|
144
|
+
new_version = version.to
|
143
145
|
commit if opts[:commit]
|
144
146
|
push if opts[:commit] && opts[:push]
|
145
147
|
reset
|
146
148
|
end
|
147
|
-
tag if opts[:tag]
|
148
|
-
release if opts[:release]
|
149
|
+
tag(new_version) if opts[:tag]
|
150
|
+
release(new_version) if opts[:release]
|
149
151
|
end
|
150
152
|
|
151
153
|
private
|
@@ -176,12 +178,12 @@ module Gem
|
|
176
178
|
cmd :git_push, remote
|
177
179
|
end
|
178
180
|
|
179
|
-
def tag
|
180
|
-
Tag.new(context, args, opts).run
|
181
|
+
def tag(new_version)
|
182
|
+
Tag.new(context, args, opts.merge(version: new_version)).run
|
181
183
|
end
|
182
184
|
|
183
|
-
def release
|
184
|
-
Release.new(context, args, except(opts, :tag)).run
|
185
|
+
def release(new_version)
|
186
|
+
Release.new(context, args, except(opts, :tag).merge(version: new_version)).run
|
185
187
|
end
|
186
188
|
|
187
189
|
def branch
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'gem/release/cmds/base'
|
2
|
+
require 'gem/release/context/github'
|
3
|
+
|
4
|
+
module Gem
|
5
|
+
module Release
|
6
|
+
module Cmds
|
7
|
+
class Github < Base
|
8
|
+
summary "Creates a GitHub release for the current version."
|
9
|
+
|
10
|
+
description <<-str.split("\n").map(&:lstrip).join("\n")
|
11
|
+
Creates a GitHub release for the current version.
|
12
|
+
|
13
|
+
Requires a tag `v[version]` to be present or --tag to be given.
|
14
|
+
str
|
15
|
+
|
16
|
+
MSGS = {
|
17
|
+
release: 'Creating GitHub release for %s version %s.',
|
18
|
+
no_tag: 'Tag %s does not exist. Run `gem tag` or pass `--tag`.',
|
19
|
+
no_repo: 'Could not determine the repository name. Please pass `--repo REPO`, or set homepage or metadata[:github_url] to the GitHub repository URL in the gemspec.',
|
20
|
+
no_token: 'Could not determine the GitHub OAuth token. Please pass `--token TOKEN`. See https://developer.github.com/v3/#oauth2-token-sent-in-a-header for more details.',
|
21
|
+
}.freeze
|
22
|
+
|
23
|
+
def run
|
24
|
+
in_gem_dirs do
|
25
|
+
announce :release, gem.name, tag_name
|
26
|
+
validate
|
27
|
+
release
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def validate
|
34
|
+
abort :no_tag, tag_name unless tagged?
|
35
|
+
abort :no_token unless token
|
36
|
+
end
|
37
|
+
|
38
|
+
def tagged?
|
39
|
+
git.tags.include?(tag_name)
|
40
|
+
end
|
41
|
+
|
42
|
+
def release
|
43
|
+
return if pretend?
|
44
|
+
Context::Github.new(repo, data).release
|
45
|
+
end
|
46
|
+
|
47
|
+
def data
|
48
|
+
{
|
49
|
+
version: gem.version,
|
50
|
+
tag_name: tag_name,
|
51
|
+
name: "#{gem.name} #{tag_name}",
|
52
|
+
descr: descr,
|
53
|
+
token: token
|
54
|
+
}
|
55
|
+
end
|
56
|
+
|
57
|
+
def tag_name
|
58
|
+
"v#{gem.version}"
|
59
|
+
end
|
60
|
+
|
61
|
+
def repo
|
62
|
+
opts[:repo] || repo_from(gem.spec.homepage) || repo_from(gem.spec.metadata[:github_url]) || abort(:no_repo)
|
63
|
+
end
|
64
|
+
|
65
|
+
def repo_from(url)
|
66
|
+
url && url =~ %r(https://github\.com/(.*/.*)) && $1
|
67
|
+
end
|
68
|
+
|
69
|
+
def token
|
70
|
+
opts[:token]
|
71
|
+
end
|
72
|
+
|
73
|
+
def descr
|
74
|
+
opts[:descr]
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -8,7 +8,7 @@ module Gem
|
|
8
8
|
class Release < Base
|
9
9
|
summary 'Releases one or all gems in this directory.'
|
10
10
|
|
11
|
-
description
|
11
|
+
description <<-str.split("\n").map(&:lstrip).join("\n")
|
12
12
|
Builds one or many gems from the given gemspec(s), pushes them to rubygems.org
|
13
13
|
(or another, compatible host), and removes the left over gem file.
|
14
14
|
|
@@ -32,8 +32,17 @@ module Gem
|
|
32
32
|
host: 'Push to a compatible host other than rubygems.org',
|
33
33
|
key: 'Use the API key from ~/.gem/credentials',
|
34
34
|
tag: 'Shortcut for running the `gem tag` command',
|
35
|
-
push:
|
36
|
-
|
35
|
+
push: 'Push tag to the remote git repository',
|
36
|
+
github: 'Create a GitHub release',
|
37
|
+
recurse: 'Recurse into directories that contain gemspec files',
|
38
|
+
|
39
|
+
# region github
|
40
|
+
|
41
|
+
descr: 'Description of the release',
|
42
|
+
repo: "Full name of the repository on GitHub, e.g. svenfuchs/gem-release (defaults to the repo name from the gemspec's homepage if this is a GitHub URL)",
|
43
|
+
token: 'GitHub OAuth token'
|
44
|
+
|
45
|
+
# endregion github
|
37
46
|
}.freeze
|
38
47
|
|
39
48
|
opt '-h', '--host HOST', descr(:host) do |value|
|
@@ -56,6 +65,26 @@ module Gem
|
|
56
65
|
opts[:recurse] = value
|
57
66
|
end
|
58
67
|
|
68
|
+
# region github
|
69
|
+
|
70
|
+
opt '-g', '--github', descr(:github) do |value|
|
71
|
+
opts[:github] = value
|
72
|
+
end
|
73
|
+
|
74
|
+
opt '-d', '--description DESCRIPTION', descr(:descr) do |value|
|
75
|
+
opts[:descr] = value
|
76
|
+
end
|
77
|
+
|
78
|
+
opt '--repo REPO', descr(:repo) do |value|
|
79
|
+
opts[:repo] = value
|
80
|
+
end
|
81
|
+
|
82
|
+
opt '--token TOKEN', descr(:token) do |value|
|
83
|
+
opts[:token] = value
|
84
|
+
end
|
85
|
+
|
86
|
+
# endregion github
|
87
|
+
|
59
88
|
MSGS = {
|
60
89
|
release: 'Releasing %s with version %s',
|
61
90
|
build: 'Building %s',
|
@@ -73,7 +102,8 @@ module Gem
|
|
73
102
|
validate
|
74
103
|
release
|
75
104
|
end
|
76
|
-
tag
|
105
|
+
tag if opts[:tag]
|
106
|
+
github if opts[:github]
|
77
107
|
end
|
78
108
|
|
79
109
|
private
|
@@ -83,17 +113,14 @@ module Gem
|
|
83
113
|
end
|
84
114
|
|
85
115
|
def release
|
86
|
-
announce :release, gem.name,
|
116
|
+
announce :release, gem.name, target_version
|
117
|
+
return if pretend?
|
87
118
|
build
|
88
119
|
push
|
89
120
|
ensure
|
90
121
|
cleanup
|
91
122
|
end
|
92
123
|
|
93
|
-
def tag
|
94
|
-
Tag.new(context, args, opts).run
|
95
|
-
end
|
96
|
-
|
97
124
|
def build
|
98
125
|
gem_cmd :build, gem.spec_filename
|
99
126
|
end
|
@@ -102,6 +129,14 @@ module Gem
|
|
102
129
|
gem_cmd :push, gem.filename, *push_args
|
103
130
|
end
|
104
131
|
|
132
|
+
def tag
|
133
|
+
Tag.new(context, args, opts).run
|
134
|
+
end
|
135
|
+
|
136
|
+
def github
|
137
|
+
Github.new(context, args, opts).run
|
138
|
+
end
|
139
|
+
|
105
140
|
def push_args
|
106
141
|
args = [:key, :host].map { |opt| ["--#{opt}", opts[opt]] if opts[opt] }
|
107
142
|
args << "--quiet" if quiet?
|
@@ -111,6 +146,10 @@ module Gem
|
|
111
146
|
def cleanup
|
112
147
|
cmd :cleanup, gem.filename
|
113
148
|
end
|
149
|
+
|
150
|
+
def target_version
|
151
|
+
opts[:version] || gem.version
|
152
|
+
end
|
114
153
|
end
|
115
154
|
end
|
116
155
|
end
|
data/lib/gem/release/cmds/tag.rb
CHANGED
@@ -6,7 +6,7 @@ module Gem
|
|
6
6
|
class Tag < Base
|
7
7
|
summary "Tags the HEAD commit with the gem's current version."
|
8
8
|
|
9
|
-
description
|
9
|
+
description <<-str.split("\n").map(&:lstrip).join("\n")
|
10
10
|
Creates an annotated tag for the current HEAD commit, using the gem's
|
11
11
|
current version.
|
12
12
|
|
@@ -63,7 +63,7 @@ module Gem
|
|
63
63
|
|
64
64
|
def run
|
65
65
|
in_gem_dirs do
|
66
|
-
announce :tag, gem.name,
|
66
|
+
announce :tag, gem.name, target_version
|
67
67
|
validate
|
68
68
|
tag_and_push
|
69
69
|
end
|
@@ -95,7 +95,7 @@ module Gem
|
|
95
95
|
end
|
96
96
|
|
97
97
|
def tag_name
|
98
|
-
"v#{
|
98
|
+
"v#{target_version}"
|
99
99
|
end
|
100
100
|
|
101
101
|
def push?
|
@@ -105,6 +105,10 @@ module Gem
|
|
105
105
|
def remote
|
106
106
|
opts[:remote]
|
107
107
|
end
|
108
|
+
|
109
|
+
def target_version
|
110
|
+
opts[:version] || gem.version
|
111
|
+
end
|
108
112
|
end
|
109
113
|
end
|
110
114
|
end
|
@@ -9,6 +9,10 @@ module Gem
|
|
9
9
|
@filename = name && "#{name}.gemspec" || filenames.first
|
10
10
|
end
|
11
11
|
|
12
|
+
def exists?
|
13
|
+
filename && File.exist?(filename)
|
14
|
+
end
|
15
|
+
|
12
16
|
def gem_name
|
13
17
|
gemspec.name if gemspec
|
14
18
|
end
|
@@ -21,8 +25,12 @@ module Gem
|
|
21
25
|
gemspec.file_name if gemspec
|
22
26
|
end
|
23
27
|
|
24
|
-
def
|
25
|
-
|
28
|
+
def metadata
|
29
|
+
gemspec && gemspec.metadata || {}
|
30
|
+
end
|
31
|
+
|
32
|
+
def homepage
|
33
|
+
gemspec.homepage if gemspec
|
26
34
|
end
|
27
35
|
|
28
36
|
private
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'gem/release/helper/http'
|
3
|
+
require 'gem/release/version'
|
4
|
+
|
5
|
+
module Gem
|
6
|
+
module Release
|
7
|
+
class Context
|
8
|
+
class Github
|
9
|
+
include Helper::Http
|
10
|
+
|
11
|
+
URL = 'https://api.github.com/repos/%s/releases'
|
12
|
+
|
13
|
+
MSGS = {
|
14
|
+
error: 'GitHub returned %s (body: %p)'
|
15
|
+
}.freeze
|
16
|
+
|
17
|
+
attr_reader :repo, :data
|
18
|
+
|
19
|
+
def initialize(repo, data)
|
20
|
+
@repo = repo
|
21
|
+
@data = data
|
22
|
+
end
|
23
|
+
|
24
|
+
def release
|
25
|
+
# Create a release
|
26
|
+
# https://developer.github.com/v3/repos/releases/#create-a-release
|
27
|
+
resp = post(url, body, headers)
|
28
|
+
status, body = resp
|
29
|
+
# success status code is 201 (created) not 200 (ok)
|
30
|
+
raise Abort, MSGS.fetch(:error) % [status, body] unless status == 201
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def url
|
36
|
+
URL % repo
|
37
|
+
end
|
38
|
+
|
39
|
+
def body
|
40
|
+
JSON.dump(
|
41
|
+
tag_name: data[:tag_name],
|
42
|
+
name: data[:name],
|
43
|
+
body: data[:descr],
|
44
|
+
prerelease: pre?(data[:version])
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
48
|
+
def headers
|
49
|
+
{
|
50
|
+
'User-Agent' => "gem-release/v#{::Gem::Release::VERSION}",
|
51
|
+
'Content-Type' => 'text/json',
|
52
|
+
'Authorization' => "token #{data[:token]}",
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
def pre?(version)
|
57
|
+
Version::Number.new(version).pre?
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/gem/release/helper.rb
CHANGED
@@ -34,9 +34,12 @@ module Gem
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def abort(msg, *args)
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
processed_msg = if msg.is_a?(Symbol)
|
38
|
+
self.class::MSGS.fetch(msg) % args
|
39
|
+
else
|
40
|
+
msg
|
41
|
+
end
|
42
|
+
context.abort("#{processed_msg} Aborting.")
|
40
43
|
end
|
41
44
|
end
|
42
45
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'uri'
|
3
|
+
|
4
|
+
module Gem
|
5
|
+
module Release
|
6
|
+
module Helper
|
7
|
+
module Http
|
8
|
+
class Client < Struct.new(:method, :url, :body, :headers)
|
9
|
+
def request
|
10
|
+
req = const.new(uri.request_uri, headers)
|
11
|
+
req.body = body if body
|
12
|
+
resp = client.request(req)
|
13
|
+
[resp.code.to_i, resp.body]
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def uri
|
19
|
+
@uri ||= URI.parse(url)
|
20
|
+
end
|
21
|
+
|
22
|
+
def client
|
23
|
+
http_client = Net::HTTP.new(uri.host, uri.port)
|
24
|
+
http_client.use_ssl = (uri.scheme == 'https')
|
25
|
+
http_client
|
26
|
+
end
|
27
|
+
|
28
|
+
def const
|
29
|
+
Net::HTTP.const_get(method.to_s.capitalize)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def post(url, body = nil, headers = {})
|
34
|
+
Client.new(:post, url, body, headers).request
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -23,7 +23,7 @@ module Gem
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def const
|
26
|
-
Cmds[name] || raise("
|
26
|
+
Cmds[name] || raise("Unknown command #{name}")
|
27
27
|
end
|
28
28
|
|
29
29
|
def usage
|
@@ -52,8 +52,8 @@ module Gem
|
|
52
52
|
|
53
53
|
def execute
|
54
54
|
Cmds::Runner.new(cmd, opts.delete(:args), opts).run
|
55
|
-
rescue Abort
|
56
|
-
abort
|
55
|
+
rescue Abort => ex
|
56
|
+
abort(ex.message)
|
57
57
|
end
|
58
58
|
|
59
59
|
def cmd
|
data/lib/gem/release/version.rb
CHANGED
@@ -3,6 +3,7 @@ module Gem
|
|
3
3
|
module Version
|
4
4
|
class Number < Struct.new(:number, :target)
|
5
5
|
NUMBER = /^(\d+)\.?(\d+)?\.?(\d+)?(\-|\.)?(\w+)?\.?(\d+)?$/
|
6
|
+
PRE_RELEASE = /^(\d+)\.(\d+)\.(\d+)\.?(.*)(\d+)$/
|
6
7
|
|
7
8
|
STAGES = %i(alpha beta pre rc)
|
8
9
|
|
@@ -14,10 +15,14 @@ module Gem
|
|
14
15
|
parts.join(stage_delim)
|
15
16
|
end
|
16
17
|
|
18
|
+
def pre?
|
19
|
+
!!parts[4]
|
20
|
+
end
|
21
|
+
|
17
22
|
private
|
18
23
|
|
19
24
|
def specific?
|
20
|
-
target =~ NUMBER
|
25
|
+
target =~ NUMBER || target =~ PRE_RELEASE
|
21
26
|
end
|
22
27
|
|
23
28
|
def major
|
@@ -45,7 +50,10 @@ module Gem
|
|
45
50
|
end
|
46
51
|
|
47
52
|
def stage_delim
|
48
|
-
|
53
|
+
# Use what's being used or default to dot (`.`)
|
54
|
+
# dot is preferred due to rubygems issue
|
55
|
+
# https://github.com/rubygems/rubygems/issues/592
|
56
|
+
parts[3] || '.'
|
49
57
|
end
|
50
58
|
|
51
59
|
def num
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gem-release
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sven Fuchs
|
8
8
|
- Dan Gebhardt
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-10-12 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Release your ruby gems with ease. (What a bold statement for such a tiny
|
15
15
|
plugin ...)
|
@@ -25,12 +25,15 @@ files:
|
|
25
25
|
- MIT-LICENSE.md
|
26
26
|
- README.md
|
27
27
|
- README.md.erb
|
28
|
+
- config.ru
|
29
|
+
- gem-release.gemspec
|
28
30
|
- lib/gem/release.rb
|
29
31
|
- lib/gem/release/cmds.rb
|
30
32
|
- lib/gem/release/cmds/base.rb
|
31
33
|
- lib/gem/release/cmds/bootstrap.rb
|
32
34
|
- lib/gem/release/cmds/bump.rb
|
33
35
|
- lib/gem/release/cmds/gemspec.rb
|
36
|
+
- lib/gem/release/cmds/github.rb
|
34
37
|
- lib/gem/release/cmds/release.rb
|
35
38
|
- lib/gem/release/cmds/runner.rb
|
36
39
|
- lib/gem/release/cmds/tag.rb
|
@@ -41,6 +44,7 @@ files:
|
|
41
44
|
- lib/gem/release/context/gem.rb
|
42
45
|
- lib/gem/release/context/gemspec.rb
|
43
46
|
- lib/gem/release/context/git.rb
|
47
|
+
- lib/gem/release/context/github.rb
|
44
48
|
- lib/gem/release/context/paths.rb
|
45
49
|
- lib/gem/release/context/ui.rb
|
46
50
|
- lib/gem/release/data.rb
|
@@ -51,6 +55,7 @@ files:
|
|
51
55
|
- lib/gem/release/files/version.rb
|
52
56
|
- lib/gem/release/helper.rb
|
53
57
|
- lib/gem/release/helper/hash.rb
|
58
|
+
- lib/gem/release/helper/http.rb
|
54
59
|
- lib/gem/release/helper/string.rb
|
55
60
|
- lib/gem/release/support/gem_command.rb
|
56
61
|
- lib/gem/release/support/registry.rb
|
@@ -77,7 +82,7 @@ homepage: https://github.com/svenfuchs/gem-release
|
|
77
82
|
licenses:
|
78
83
|
- MIT
|
79
84
|
metadata: {}
|
80
|
-
post_install_message:
|
85
|
+
post_install_message:
|
81
86
|
rdoc_options: []
|
82
87
|
require_paths:
|
83
88
|
- lib
|
@@ -92,8 +97,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
92
97
|
- !ruby/object:Gem::Version
|
93
98
|
version: '0'
|
94
99
|
requirements: []
|
95
|
-
rubygems_version: 3.
|
96
|
-
signing_key:
|
100
|
+
rubygems_version: 3.1.4
|
101
|
+
signing_key:
|
97
102
|
specification_version: 4
|
98
103
|
summary: Release your ruby gems with ease
|
99
104
|
test_files: []
|