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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f4cb6bbd05b81d7fe48d8b68ae917e31e77f8516992c04f43e28895b0d0f85fe
4
- data.tar.gz: df3dad2633a3d8eb13b4df343883b9c22e996b567d735f51baa0c7742960998e
3
+ metadata.gz: df5f557db83497785b9b32c6c0c13220b7b7a8ec48b23fc5d368050faa07996a
4
+ data.tar.gz: bafa68971d2a88664d8f40dcba532dbecddf67fc4e513dd85c0cfc0dade2e758
5
5
  SHA512:
6
- metadata.gz: a287a028d04969631577eb055b389ec731bbf73bd711211485c0bcfba8991bbf4067b887fca8a94c9ecfe267f3140988c91b21e51eebe6d0400f0a05a2796d0d
7
- data.tar.gz: '093f1658507e1c88aae8d163fc1c167272c32c09ef7fdb739cfe0ee3384d35ea88406927ce48ee235184dd265bd4f4cf55f76df325ee71a2edf491ab0f43d953'
6
+ metadata.gz: 325cf631c857c024f39b835c18ad9b1fa6ef9517f351ba7dab1fba0a3a577eecc1e184981d1fe7b42d19d0d63fb3d4503780a7d30333246c6dbe364b49c89838
7
+ data.tar.gz: 8097e8309baa8bebcb967a382cf731f6c9f229016b3c77aefa062249350613e671213425fd58e229bc05017ef88a58a01602a0d53d0dda99af5997fcaa325484
@@ -1,6 +1,43 @@
1
1
  # Changelog
2
2
 
3
- ## v2.0.2 - 2019-06-17
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
@@ -10,4 +10,5 @@ group :test do
10
10
  gem 'rspec'
11
11
  gem 'simplecov'
12
12
  gem 'coveralls'
13
+ gem 'webmock'
13
14
  end
@@ -1,66 +1,81 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gem-release (2.0.1)
4
+ gem-release (2.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
- builder (3.2.3)
10
- coveralls (0.8.23)
11
- json (>= 1.8, < 3)
12
- simplecov (~> 0.16.1)
13
- term-ansicolor (~> 1.3)
14
- thor (>= 0.19.4, < 2.0)
15
- tins (~> 1.6)
16
- diff-lcs (1.3)
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.15.4)
21
+ faraday (1.0.1)
19
22
  multipart-post (>= 1.2, < 3)
20
- geminabox (1.1.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
- json (2.2.0)
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.0.3)
37
+ mustermann (1.1.1)
38
+ ruby2_keywords (~> 0.0.1)
31
39
  nesty (1.0.2)
32
- rack (2.0.7)
33
- rack-protection (2.0.5)
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
- rspec (3.8.0)
37
- rspec-core (~> 3.8.0)
38
- rspec-expectations (~> 3.8.0)
39
- rspec-mocks (~> 3.8.0)
40
- rspec-core (3.8.1)
41
- rspec-support (~> 3.8.0)
42
- rspec-expectations (3.8.4)
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.8.0)
45
- rspec-mocks (3.8.1)
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.8.0)
48
- rspec-support (3.8.2)
49
- simplecov (0.16.1)
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
- json (>= 1.8, < 3)
52
- simplecov-html (~> 0.10.0)
53
- simplecov-html (0.10.2)
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.0)
57
- rack-protection (= 2.0.5)
67
+ rack (~> 2.2)
68
+ rack-protection (= 2.1.0)
58
69
  tilt (~> 2.0)
59
- term-ansicolor (1.7.1)
60
- tins (~> 1.0)
61
- thor (0.20.3)
62
- tilt (2.0.9)
63
- tins (1.20.3)
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.0.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
@@ -0,0 +1,5 @@
1
+ require 'rubygems'
2
+ require 'geminabox'
3
+
4
+ Geminabox.data = '/tmp/geminabox/data'
5
+ run Geminabox::Server
@@ -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
@@ -1,6 +1,7 @@
1
1
  require 'gem/release/cmds/bootstrap'
2
2
  require 'gem/release/cmds/bump'
3
3
  require 'gem/release/cmds/gemspec'
4
+ require 'gem/release/cmds/github'
4
5
  require 'gem/release/cmds/release'
5
6
  require 'gem/release/cmds/runner'
6
7
  require 'gem/release/cmds/tag'
@@ -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 <<~str
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 <<~str
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
@@ -8,7 +8,7 @@ module Gem
8
8
  class Gemspec < Base
9
9
  summary 'Generates a gemspec.'
10
10
 
11
- description <<~str
11
+ description <<-str.split("\n").map(&:lstrip).join("\n")
12
12
  #{summary}
13
13
 
14
14
  If no argument is given the current directory name is used as the gem name. If
@@ -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 <<~str
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: 'Push tag to the remote git repository',
36
- recurse: 'Recurse into directories that contain gemspec files'
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 if opts[: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, gem.version
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
@@ -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 <<~str
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, gem.version
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#{gem.version}"
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 exists?
25
- filename && File.exist?(filename)
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
@@ -34,9 +34,12 @@ module Gem
34
34
  end
35
35
 
36
36
  def abort(msg, *args)
37
- msg = self.class::MSGS[msg] % args if msg.is_a?(Symbol)
38
- msg = "#{msg} Aborting."
39
- context.abort(msg)
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("Unknonw command #{name}")
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
@@ -1,5 +1,5 @@
1
1
  module Gem
2
2
  module Release
3
- VERSION = '2.0.2'
3
+ VERSION = '2.2.0'
4
4
  end
5
5
  end
@@ -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
- parts[3] || '-'
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.2
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: 2019-06-27 00:00:00.000000000 Z
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.0.4
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: []