github-release-party 0.3.3 → 0.3.4

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: 6fa7914c15856ac4340ed49321dac940ce4ede6935bee5c3d763991f404fd772
4
- data.tar.gz: 21ecb0ffb5ec34a11ffc30398010192fa0dbc8b3cefa7c79a76584d0afb9811f
3
+ metadata.gz: 46459e03534d4da5df10a808417f51a63861b1afe9ed97d3d800fe99a66473f3
4
+ data.tar.gz: 0ca9805a23cbe728b590f670d20e5775f1c38b567f076451fe3677af006c41d5
5
5
  SHA512:
6
- metadata.gz: 8a25013adc2fc2517b6da7f3ebb8aaf86691ec31808b5110f28cd343af3addcc137528f13a8078ebeca8d47162c28d7bd9b6df9db99980c6d6f06a082fc055c8
7
- data.tar.gz: 8354ff1610d4b61e4c7b981fcc5d520b41d8e88bcd1b4f32bc2a559e19b2d9c0cc9fc83aa0801bbf8116844c679370acd0c0dbf5daae55c651f69aae487ed410
6
+ metadata.gz: '08fe94d85b1a42f13691b5a48350e2f2b7b9f5d82be8997870bf36fb583879a1ca004e6165f6f3e88ade5a30e2d4de144cab2ab138419fe64a4e4cf971d48fce'
7
+ data.tar.gz: 24c33ae1483107e18925678c27058a098cd298f69e16e9b50cc0dc7cf006fd3f8a9522a8a98ec9968395a4c8472a58aec379daf0ef7777295d1cd67837db0f39
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,65 +1,44 @@
1
- require_relative "http"
2
1
  require_relative "github-release-party/version"
3
2
 
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 = []
3
+ class GithubReleaseParty
4
+ def self.releases
5
+ releases = []
14
6
  page = 1
15
7
  while true
16
- r = self.class.get("/repos/#{self.class.repo}/releases?page=#{page}")
17
- raise(HTTPError, r) if !r.success?
8
+ r = GitHub.get("/repos/#{repo}/releases?page=#{page}")
9
+ if !r.success?
10
+ puts "Error occurred when fetching releases:"
11
+ puts error(r)
12
+ abort
13
+ end
18
14
  break if r.json.length == 0
19
-
20
- @releases = @releases + r.json
15
+ releases = releases + r.json
21
16
  page += 1
22
17
  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
18
+ return releases
32
19
  end
33
20
 
34
21
  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
- })
22
+ r = GitHub.patch("/repos/#{repo}/releases/#{id}", {
23
+ name: name,
24
+ body: message
25
+ }.to_json)
43
26
  if r.success?
44
27
  puts "GitHub release #{name} updated!"
45
28
  else
46
- puts "Failed to update GitHub release #{tag_name}!"
29
+ puts "Failed to update GitHub release #{name}!"
47
30
  puts error(r)
48
31
  end
49
32
  end
50
33
 
51
34
  def self.create(tag_name, name, message)
52
- return unless env_ok
53
-
54
35
  body = {
55
36
  tag_name: tag_name,
56
37
  name: name,
57
38
  body: message
58
39
  }
59
40
 
60
- r = post("/repos/#{repo}/releases", {
61
- body: body.to_json
62
- })
41
+ r = GitHub.post("/repos/#{repo}/releases", body.to_json)
63
42
  if r.success?
64
43
  puts "GitHub release #{tag_name} created!"
65
44
  else
@@ -76,16 +55,13 @@ class GithubReleaseParty < HTTP
76
55
  end
77
56
  end
78
57
 
79
- def self.env_ok
58
+ def self.check_env!
80
59
  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
60
+ abort "Configure GITHUB_RELEASE_TOKEN to create GitHub releases. See https://github.com/stefansundin/github-release-party#setup"
83
61
  end
84
62
  if !repo
85
- puts "Can't find the GitHub repo. Please use the remote 'origin'."
86
- return false
63
+ abort "Can't find the GitHub repo. Please use the remote 'origin'."
87
64
  end
88
- return true
89
65
  end
90
66
 
91
67
  def self.repo
@@ -95,6 +71,74 @@ class GithubReleaseParty < HTTP
95
71
  private
96
72
 
97
73
  def self.error(r)
98
- "#{r.url}: #{r.code}: #{r.body}. #{r.headers.to_json}"
74
+ "#{r.request_uri}: #{r.code}: #{r.body}\nHeaders: #{r.headers.to_json}"
75
+ end
76
+
77
+ class GitHub
78
+ def self.get(*args)
79
+ request(:request_get, *args)
80
+ end
81
+
82
+ def self.post(*args)
83
+ request(:request_post, *args)
84
+ end
85
+
86
+ def self.patch(*args)
87
+ request(:patch, *args)
88
+ end
89
+
90
+ private
91
+
92
+ def self.request(method, request_uri, body=nil)
93
+ opts = {
94
+ use_ssl: true,
95
+ open_timeout: 10,
96
+ read_timeout: 10,
97
+ }
98
+ Net::HTTP.start("api.github.com", 443, opts) do |http|
99
+ headers = {
100
+ "Authorization" => "token #{ENV["GITHUB_RELEASE_TOKEN"]}",
101
+ "User-Agent" => "github-release-party/#{GithubReleaseParty::VERSION}",
102
+ }
103
+ if method == :request_post or method == :patch
104
+ # response = http.send(:request_get, "/", headers)
105
+ response = http.send(method, request_uri, body, headers)
106
+ else
107
+ response = http.send(method, request_uri, headers)
108
+ end
109
+ return HTTPResponse.new(response, request_uri)
110
+ end
111
+ end
112
+ end
113
+
114
+ class HTTPResponse
115
+ def initialize(response, request_uri)
116
+ @response = response
117
+ @request_uri = request_uri
118
+ end
119
+
120
+ def request_uri
121
+ @request_uri
122
+ end
123
+
124
+ def body
125
+ @response.body
126
+ end
127
+
128
+ def json
129
+ @json ||= JSON.parse(@response.body)
130
+ end
131
+
132
+ def headers
133
+ @response.to_hash
134
+ end
135
+
136
+ def code
137
+ @response.code.to_i
138
+ end
139
+
140
+ def success?
141
+ @response.is_a?(Net::HTTPSuccess)
142
+ end
99
143
  end
100
144
  end
@@ -54,7 +54,7 @@ end
54
54
 
55
55
  desc "Deploy a new version to Heroku"
56
56
  task :deploy do
57
- abort if not GithubReleaseParty.env_ok
57
+ GithubReleaseParty.check_env!
58
58
  ver = heroku_push() or abort("Deploy failed.")
59
59
  hash = `git rev-parse HEAD`.strip
60
60
  github_tag(hash, ver)
@@ -63,7 +63,7 @@ end
63
63
  namespace :deploy do
64
64
  desc "Deploy a new version to Heroku using --force"
65
65
  task :force do
66
- abort if not GithubReleaseParty.env_ok
66
+ GithubReleaseParty.check_env!
67
67
  ver = heroku_push(%w[--force]) or abort("Deploy failed.")
68
68
  hash = `git rev-parse HEAD`.strip
69
69
  github_tag(hash, ver)
@@ -71,7 +71,7 @@ namespace :deploy do
71
71
 
72
72
  desc "Tag last release"
73
73
  task :tag do
74
- abort if not GithubReleaseParty.env_ok
74
+ GithubReleaseParty.check_env!
75
75
 
76
76
  # get heroku version number
77
77
  begin
@@ -87,7 +87,8 @@ namespace :deploy do
87
87
 
88
88
  desc "Rebuild all the release tags"
89
89
  task :retag do
90
- github = GithubReleaseParty.new
90
+ GithubReleaseParty.check_env!
91
+ releases = GithubReleaseParty.releases
91
92
  repo = GithubReleaseParty.repo
92
93
 
93
94
  tags = `git tag -l heroku/v* --sort=version:refname`.split("\n")
@@ -116,7 +117,12 @@ namespace :deploy do
116
117
  abort if not success
117
118
 
118
119
  # update or create GitHub release
119
- 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
120
126
  end
121
127
 
122
128
  puts
@@ -1,5 +1,3 @@
1
- require_relative "../http"
2
-
3
- class GithubReleaseParty < HTTP
4
- VERSION = "0.3.3"
1
+ class GithubReleaseParty
2
+ VERSION = "0.3.4"
5
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github-release-party
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Sundin
@@ -31,7 +31,7 @@ cert_chain:
31
31
  E04BZKo2WzOTzSDymo97Yu4YFgyc98umMyeaCvPk4YmdNzqSanAXpY2bnsyu0CF5
32
32
  Td0=
33
33
  -----END CERTIFICATE-----
34
- date: 2019-09-29 00:00:00.000000000 Z
34
+ date: 2019-12-09 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
@@ -47,20 +47,6 @@ dependencies:
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,7 +58,6 @@ 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
metadata.gz.sig CHANGED
Binary file
@@ -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