github-release-party 0.3.1 → 0.3.6

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: 17468ff63d0b87ac1c2324f08066c33776c9840fe6bf17c9c68de3b7339c2fe9
4
- data.tar.gz: a3bcb900b20973025e84683a2623925ec471b18bffda5a1aa846af7c1fb900f4
3
+ metadata.gz: 8b275fe65a8b6ac130be289ac5f7b1af6f53f48c4ebbafb784cbb14386659c24
4
+ data.tar.gz: cd19b786aff568234d157f5eae7e81902a97272ccd0976deb4a89fa9dbdde7bf
5
5
  SHA512:
6
- metadata.gz: 66a569d56e8b274321e6e3a969b1af2bc892de778a772ea94a7e18a02704a16c06849b6883abee2e5572454785059ad47a6f5b46fad19b128c986238676c816a
7
- data.tar.gz: 60f1df834a32ed4b506935fababb44b3fa458c9554b2b64b12bea1c13c0d980ab7c618336e736844b20027c1485545b21abf6c3683f3ae89a1dacf1b9bf83f81
6
+ metadata.gz: bebba1d515b12e752576732795caee7d364bacfc8df7528db2e808109ca5c9cef08de9f8d224b5640c598aa5196e14b17648e8607690ba9ce3cc7add9cf9c56d
7
+ data.tar.gz: 24eb66e7bdd380085a67655356d6db00ab8ffcf3b4eb8119a3c3922b6f76d2f4cd3ab4a5f5efdd59b4ea26e73c274377cae393dbd2e893bf384b6c99c7ddc142
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,65 +1,46 @@
1
- require_relative "http"
2
1
  require_relative "github-release-party/version"
2
+ require "net/http"
3
+ require "json"
3
4
 
4
- class GithubReleaseParty < HTTP
5
- BASE_URL = "https://api.github.com"
6
- PARAMS = "access_token=#{ENV["GITHUB_RELEASE_TOKEN"]}"
7
- HEADERS = {
8
- "User-Agent" => "github-release-party/#{GithubReleaseParty::VERSION}",
9
- }
10
-
11
- def initialize
12
- return unless self.class.env_ok
13
- @releases = []
5
+ class GithubReleaseParty
6
+ def self.releases
7
+ releases = []
14
8
  page = 1
15
9
  while true
16
- r = self.class.get("/repos/#{self.class.repo}/releases?page=#{page}")
17
- raise(HTTPError, r) if !r.success?
10
+ r = GitHub.get("/repos/#{repo}/releases?page=#{page}")
11
+ if !r.success?
12
+ puts "Error occurred when fetching releases:"
13
+ puts error(r)
14
+ abort
15
+ end
18
16
  break if r.json.length == 0
19
-
20
- @releases = @releases + r.json
17
+ releases = releases + r.json
21
18
  page += 1
22
19
  end
23
- end
24
-
25
- def update_or_create(tag_name, name, message)
26
- release = @releases.find { |rel| rel["tag_name"] == tag_name }
27
- if release
28
- self.class.update(release["id"], name, message)
29
- else
30
- self.class.create(tag_name, name, message)
31
- end
20
+ return releases
32
21
  end
33
22
 
34
23
  def self.update(id, name, message)
35
- return unless env_ok
36
-
37
- r = patch("/repos/#{repo}/releases/#{id}", {
38
- body: {
39
- name: name,
40
- body: message
41
- }.to_json
42
- })
24
+ r = GitHub.patch("/repos/#{repo}/releases/#{id}", {
25
+ name: name,
26
+ body: message,
27
+ }.to_json)
43
28
  if r.success?
44
29
  puts "GitHub release #{name} updated!"
45
30
  else
46
- puts "Failed to update GitHub release #{tag_name}!"
31
+ puts "Failed to update GitHub release #{name}!"
47
32
  puts error(r)
48
33
  end
49
34
  end
50
35
 
51
36
  def self.create(tag_name, name, message)
52
- return unless env_ok
53
-
54
37
  body = {
55
38
  tag_name: tag_name,
56
39
  name: name,
57
- body: message
40
+ body: message,
58
41
  }
59
42
 
60
- r = post("/repos/#{repo}/releases", {
61
- body: body.to_json
62
- })
43
+ r = GitHub.post("/repos/#{repo}/releases", body.to_json)
63
44
  if r.success?
64
45
  puts "GitHub release #{tag_name} created!"
65
46
  else
@@ -67,7 +48,7 @@ class GithubReleaseParty < HTTP
67
48
  puts
68
49
  puts "Body sent: #{body.to_json}"
69
50
  puts
70
- puts "Failed to create GitHub release!"
51
+ puts "Failed to create a GitHub release!"
71
52
  puts "Create it manually here: https://github.com/#{repo}/releases/new?tag=#{tag_name}"
72
53
  puts "Tag version: #{tag_name}"
73
54
  puts "Release title: #{tag_name}"
@@ -76,16 +57,13 @@ class GithubReleaseParty < HTTP
76
57
  end
77
58
  end
78
59
 
79
- def self.env_ok
60
+ def self.check_env!
80
61
  if !ENV["GITHUB_RELEASE_TOKEN"]
81
- puts "Configure GITHUB_RELEASE_TOKEN to create GitHub releases. See https://github.com/stefansundin/github-release-party#setup"
82
- return false
62
+ abort "Configure GITHUB_RELEASE_TOKEN to create GitHub releases. See https://github.com/stefansundin/github-release-party#setup"
83
63
  end
84
64
  if !repo
85
- puts "Can't find the GitHub repo. Please use the remote 'origin'."
86
- return false
65
+ abort "Can't find the GitHub repository. Please use the remote 'origin'."
87
66
  end
88
- return true
89
67
  end
90
68
 
91
69
  def self.repo
@@ -95,6 +73,73 @@ class GithubReleaseParty < HTTP
95
73
  private
96
74
 
97
75
  def self.error(r)
98
- "#{r.url}: #{r.code}: #{r.body}. #{r.headers.to_json}"
76
+ "#{r.request_uri}: #{r.code}: #{r.body}\nHeaders: #{r.headers.to_json}"
77
+ end
78
+
79
+ class GitHub
80
+ def self.get(*args)
81
+ request(:request_get, *args)
82
+ end
83
+
84
+ def self.post(*args)
85
+ request(:request_post, *args)
86
+ end
87
+
88
+ def self.patch(*args)
89
+ request(:patch, *args)
90
+ end
91
+
92
+ private
93
+
94
+ def self.request(method, request_uri, body=nil)
95
+ opts = {
96
+ use_ssl: true,
97
+ open_timeout: 10,
98
+ read_timeout: 10,
99
+ }
100
+ Net::HTTP.start("api.github.com", 443, opts) do |http|
101
+ headers = {
102
+ "Authorization" => "token #{ENV["GITHUB_RELEASE_TOKEN"]}",
103
+ "User-Agent" => "github-release-party/#{GithubReleaseParty::VERSION}",
104
+ }
105
+ if method == :request_post or method == :patch
106
+ response = http.send(method, request_uri, body, headers)
107
+ else
108
+ response = http.send(method, request_uri, headers)
109
+ end
110
+ return HTTPResponse.new(response, request_uri)
111
+ end
112
+ end
113
+ end
114
+
115
+ class HTTPResponse
116
+ def initialize(response, request_uri)
117
+ @response = response
118
+ @request_uri = request_uri
119
+ end
120
+
121
+ def request_uri
122
+ @request_uri
123
+ end
124
+
125
+ def body
126
+ @response.body
127
+ end
128
+
129
+ def json
130
+ @json ||= JSON.parse(@response.body)
131
+ end
132
+
133
+ def headers
134
+ @response.to_hash
135
+ end
136
+
137
+ def code
138
+ @response.code.to_i
139
+ end
140
+
141
+ def success?
142
+ @response.is_a?(Net::HTTPSuccess)
143
+ end
99
144
  end
100
145
  end
@@ -1,4 +1,5 @@
1
1
  require "open3"
2
+ require "shellwords"
2
3
  require "github-release-party"
3
4
 
4
5
  def heroku_push(args=[])
@@ -27,7 +28,7 @@ def github_tag(hash, ver)
27
28
  last_tag = `git rev-list --max-parents=0 HEAD`.strip[0..6]
28
29
  first_deploy = true
29
30
  end
30
- commits = `git log #{last_tag}..#{hash} --first-parent --pretty=format:"- [%s](https://github.com/#{repo}/commit/%H)"`
31
+ commits = `git log #{last_tag}..#{hash} --reverse --first-parent --pretty=format:"- [%s](https://github.com/#{repo}/commit/%H)"`
31
32
  message = "Deploy #{hash[0..6]}\n\nDiff: https://github.com/#{repo}/compare/#{last_tag}...#{tag_name}\n#{commits}"
32
33
 
33
34
  if first_deploy
@@ -53,7 +54,7 @@ end
53
54
 
54
55
  desc "Deploy a new version to Heroku"
55
56
  task :deploy do
56
- abort if not GithubReleaseParty.env_ok
57
+ GithubReleaseParty.check_env!
57
58
  ver = heroku_push() or abort("Deploy failed.")
58
59
  hash = `git rev-parse HEAD`.strip
59
60
  github_tag(hash, ver)
@@ -62,7 +63,7 @@ end
62
63
  namespace :deploy do
63
64
  desc "Deploy a new version to Heroku using --force"
64
65
  task :force do
65
- abort if not GithubReleaseParty.env_ok
66
+ GithubReleaseParty.check_env!
66
67
  ver = heroku_push(%w[--force]) or abort("Deploy failed.")
67
68
  hash = `git rev-parse HEAD`.strip
68
69
  github_tag(hash, ver)
@@ -70,7 +71,7 @@ namespace :deploy do
70
71
 
71
72
  desc "Tag last release"
72
73
  task :tag do
73
- abort if not GithubReleaseParty.env_ok
74
+ GithubReleaseParty.check_env!
74
75
 
75
76
  # get heroku version number
76
77
  begin
@@ -86,7 +87,8 @@ namespace :deploy do
86
87
 
87
88
  desc "Rebuild all the release tags"
88
89
  task :retag do
89
- github = GithubReleaseParty.new
90
+ GithubReleaseParty.check_env!
91
+ releases = GithubReleaseParty.releases
90
92
  repo = GithubReleaseParty.repo
91
93
 
92
94
  tags = `git tag -l heroku/v* --sort=version:refname`.split("\n")
@@ -102,7 +104,7 @@ namespace :deploy do
102
104
 
103
105
  hash = `git rev-list --max-count=1 #{tag_name}`.strip
104
106
  date = `git show --pretty="format:%ai" -s --no-color #{tag_name} | tail -1`.strip
105
- commits = `git log #{last_tag}..#{tag_name} --pretty=format:"- [%s](https://github.com/#{repo}/commit/%H)"`
107
+ commits = `git log #{last_tag}..#{tag_name} --reverse --pretty=format:"- [%s](https://github.com/#{repo}/commit/%H)"`
106
108
  message = "Deploy #{hash[0..6]}\n\nDiff: https://github.com/#{repo}/compare/#{last_tag}...#{tag_name}\n#{commits}"
107
109
 
108
110
  if i == 0
@@ -115,7 +117,12 @@ namespace :deploy do
115
117
  abort if not success
116
118
 
117
119
  # update or create GitHub release
118
- github.update_or_create(tag_name, ver, message)
120
+ release = releases.find { |rel| rel["tag_name"] == tag_name }
121
+ if release
122
+ GithubReleaseParty.update(release["id"], ver, message)
123
+ else
124
+ GithubReleaseParty.create(tag_name, ver, message)
125
+ end
119
126
  end
120
127
 
121
128
  puts
@@ -1,5 +1,3 @@
1
- require_relative "../http"
2
-
3
- class GithubReleaseParty < HTTP
4
- VERSION = "0.3.1"
1
+ class GithubReleaseParty
2
+ VERSION = "0.3.6"
5
3
  end
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github-release-party
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Sundin
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain:
11
11
  - |
@@ -31,36 +31,22 @@ cert_chain:
31
31
  E04BZKo2WzOTzSDymo97Yu4YFgyc98umMyeaCvPk4YmdNzqSanAXpY2bnsyu0CF5
32
32
  Td0=
33
33
  -----END CERTIFICATE-----
34
- date: 2018-12-24 00:00:00.000000000 Z
34
+ date: 2021-04-09 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
38
  requirement: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - "~>"
40
+ - - ">="
41
41
  - !ruby/object:Gem::Version
42
42
  version: '12'
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - "~>"
47
+ - - ">="
48
48
  - !ruby/object:Gem::Version
49
49
  version: '12'
50
- - !ruby/object:Gem::Dependency
51
- name: addressable
52
- requirement: !ruby/object:Gem::Requirement
53
- requirements:
54
- - - "~>"
55
- - !ruby/object:Gem::Version
56
- version: '2'
57
- type: :runtime
58
- prerelease: false
59
- version_requirements: !ruby/object:Gem::Requirement
60
- requirements:
61
- - - "~>"
62
- - !ruby/object:Gem::Version
63
- version: '2'
64
50
  description: I use this gem to automatically create GitHub releases when I deploy
65
51
  to Heroku. See the GitHub page for usage.
66
52
  email:
@@ -72,12 +58,11 @@ files:
72
58
  - lib/github-release-party.rb
73
59
  - lib/github-release-party/tasks/heroku.rb
74
60
  - lib/github-release-party/version.rb
75
- - lib/http.rb
76
61
  homepage: https://github.com/stefansundin/github-release-party
77
62
  licenses:
78
63
  - GPL-3.0
79
64
  metadata: {}
80
- post_install_message:
65
+ post_install_message:
81
66
  rdoc_options: []
82
67
  require_paths:
83
68
  - lib
@@ -92,9 +77,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
77
  - !ruby/object:Gem::Version
93
78
  version: 1.3.6
94
79
  requirements: []
95
- rubyforge_project:
96
- rubygems_version: 2.7.6
97
- signing_key:
80
+ rubygems_version: 3.2.3
81
+ signing_key:
98
82
  specification_version: 4
99
83
  summary: Easily create GitHub releases.
100
84
  test_files: []
metadata.gz.sig CHANGED
Binary file
data/lib/http.rb DELETED
@@ -1,143 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "net/http"
4
- require "addressable/uri"
5
- require "json"
6
-
7
- class HTTP
8
- def self.request(method, url, options={body: nil, headers: nil, query: nil})
9
- relative_url = (url[0] == "/")
10
-
11
- if defined?(self::BASE_URL) and relative_url
12
- url = self::BASE_URL+url
13
- end
14
-
15
- if defined?(self::PARAMS) and relative_url
16
- if url["?"]
17
- url += "&"+self::PARAMS
18
- else
19
- url += "?"+self::PARAMS
20
- end
21
- end
22
-
23
- if options[:query]
24
- params = options[:query].map { |k,v| "#{k}=#{v}" }.join("&")
25
- if url["?"]
26
- url += "&"+params
27
- else
28
- url += "?"+params
29
- end
30
- end
31
-
32
- uri = Addressable::URI.parse(url).normalize
33
- opts = {
34
- use_ssl: uri.scheme == "https",
35
- open_timeout: 10,
36
- read_timeout: 10,
37
- }
38
- Net::HTTP.start(uri.host, uri.port, opts) do |http|
39
- headers = {}
40
- headers.merge!(self::HEADERS) if defined?(self::HEADERS) and relative_url
41
- headers.merge!(options[:headers]) if options[:headers]
42
- if method == :request_post or method == :patch
43
- response = http.send(method, uri.request_uri, options[:body], headers)
44
- else
45
- response = http.send(method, uri.request_uri, headers)
46
- end
47
- return HTTPResponse.new(response, uri.to_s)
48
- end
49
- end
50
-
51
- def self.get(*args)
52
- request(:request_get, *args)
53
- end
54
-
55
- def self.post(*args)
56
- request(:request_post, *args)
57
- end
58
-
59
- def self.patch(*args)
60
- request(:patch, *args)
61
- end
62
- end
63
-
64
- class HTTPResponse
65
- def initialize(response, url)
66
- @response = response
67
- @url = url
68
- end
69
-
70
- def raw
71
- @response
72
- end
73
-
74
- def url
75
- @url
76
- end
77
-
78
- def body
79
- @response.body
80
- end
81
-
82
- def json
83
- @json ||= JSON.parse(@response.body)
84
- end
85
-
86
- def parsed_response
87
- json
88
- end
89
-
90
- def headers
91
- @response.header
92
- end
93
-
94
- def code
95
- @response.code.to_i
96
- end
97
-
98
- def success?
99
- @response.is_a?(Net::HTTPSuccess)
100
- end
101
-
102
- def redirect?
103
- @response.is_a?(Net::HTTPRedirection)
104
- end
105
-
106
- def redirect_url
107
- raise("not a redirect") if !redirect?
108
- url = @response.header["location"]
109
- if url[0] == "/"
110
- # relative redirect
111
- uri = Addressable::URI.parse(@url)
112
- url = uri.scheme + "://" + uri.host + url
113
- elsif /^https?:\/\/./ !~ url
114
- raise("bad redirect: #{url}")
115
- end
116
- Addressable::URI.parse(url).normalize.to_s # Some redirects do not url encode properly, such as http://amzn.to/2aDg49F
117
- end
118
-
119
- def redirect_same_origin?
120
- return false if !redirect?
121
- uri = Addressable::URI.parse(@url).normalize
122
- new_uri = Addressable::URI.parse(redirect_url).normalize
123
- uri.origin == new_uri.origin
124
- end
125
- end
126
-
127
- class HTTPError < StandardError
128
- def initialize(obj)
129
- @obj = obj
130
- end
131
-
132
- def request
133
- @obj
134
- end
135
-
136
- def data
137
- @obj.json
138
- end
139
-
140
- def message
141
- "#{@obj.code}: #{@obj.body}"
142
- end
143
- end