github-release-party 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
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