github-release-party 0.1.1 → 0.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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/github-release-party.rb +18 -28
- data/lib/github-release-party/tasks/heroku.rb +3 -3
- data/lib/github-release-party/version.rb +4 -2
- data/lib/http.rb +143 -0
- metadata +4 -17
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a24536d487240bee00527dcf0e8d3399a1ceec4f
|
4
|
+
data.tar.gz: 8951cbbf1942ebbf41d697b837d5c0dee7e85006
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f5cb1532c190d2b7ca687f3814cd3b51f900bebef9796a49ee6782ed1ce3aeb48b5f139e5708a228c307ae0dfc559ef2a5172f2484ced24f85ade2fb125309d
|
7
|
+
data.tar.gz: 9eac5deead4e1da021b661b2ff6b04ba729095db80291ab38fac3b181990f7565ae49a68c44fdfeb732f91d4c7d6a84670215b315e1ce6e292d37b74466ebfc2
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/github-release-party.rb
CHANGED
@@ -1,21 +1,22 @@
|
|
1
|
-
|
1
|
+
require_relative "http"
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
class GithubReleaseParty < HTTP
|
4
|
+
BASE_URL = "https://api.github.com"
|
5
|
+
PARAMS = "access_token=#{ENV["GITHUB_RELEASE_TOKEN"]}"
|
6
|
+
HEADERS = {
|
7
|
+
"User-Agent" => "github-release-party/#{GithubReleaseParty::VERSION}",
|
8
|
+
}
|
8
9
|
|
9
10
|
def initialize
|
10
11
|
return unless self.class.env_ok
|
11
12
|
@releases = []
|
12
13
|
page = 1
|
13
14
|
while true
|
14
|
-
r = self.class.get
|
15
|
-
raise
|
16
|
-
break if r.
|
15
|
+
r = self.class.get("/repos/#{self.class.repo}/releases?page=#{page}")
|
16
|
+
raise(HTTPError, r) if !r.success?
|
17
|
+
break if r.json.length == 0
|
17
18
|
|
18
|
-
@releases = @releases + r.
|
19
|
+
@releases = @releases + r.json
|
19
20
|
page += 1
|
20
21
|
end
|
21
22
|
end
|
@@ -32,7 +33,7 @@ class GithubReleaseParty
|
|
32
33
|
def self.update(id, name, message)
|
33
34
|
return unless env_ok
|
34
35
|
|
35
|
-
r = patch
|
36
|
+
r = patch("/repos/#{repo}/releases/#{id}", {
|
36
37
|
body: {
|
37
38
|
name: name,
|
38
39
|
body: message
|
@@ -55,7 +56,7 @@ class GithubReleaseParty
|
|
55
56
|
body: message
|
56
57
|
}
|
57
58
|
|
58
|
-
r = post
|
59
|
+
r = post("/repos/#{repo}/releases", {
|
59
60
|
body: body.to_json
|
60
61
|
})
|
61
62
|
if r.success?
|
@@ -66,7 +67,7 @@ class GithubReleaseParty
|
|
66
67
|
puts "Body sent: #{body.to_json}"
|
67
68
|
puts
|
68
69
|
puts "Failed to create GitHub release!"
|
69
|
-
puts "Create it manually here: https://github.com/#{repo}/releases/new"
|
70
|
+
puts "Create it manually here: https://github.com/#{repo}/releases/new?tag=#{tag_name}"
|
70
71
|
puts "Tag version: #{tag_name}"
|
71
72
|
puts "Release title: #{tag_name}"
|
72
73
|
puts "Message:"
|
@@ -75,11 +76,11 @@ class GithubReleaseParty
|
|
75
76
|
end
|
76
77
|
|
77
78
|
def self.env_ok
|
78
|
-
if
|
79
|
+
if !ENV["GITHUB_RELEASE_TOKEN"]
|
79
80
|
puts "Configure GITHUB_RELEASE_TOKEN to create GitHub releases. See https://github.com/stefansundin/github-release-party#setup"
|
80
81
|
return false
|
81
82
|
end
|
82
|
-
if
|
83
|
+
if !repo
|
83
84
|
puts "Can't find the GitHub repo. Please use the remote 'origin'."
|
84
85
|
return false
|
85
86
|
end
|
@@ -87,23 +88,12 @@ class GithubReleaseParty
|
|
87
88
|
end
|
88
89
|
|
89
90
|
def self.repo
|
90
|
-
`git remote -v`.scan(/^origin\t.*github\.com[:\/](.+)\.git /).uniq.flatten.first
|
91
|
+
@repo ||= `git remote -v`.scan(/^origin\t.*github\.com[:\/](.+)\.git /).uniq.flatten.first
|
91
92
|
end
|
92
93
|
|
93
94
|
private
|
94
95
|
|
95
|
-
def self.options
|
96
|
-
{
|
97
|
-
query: {
|
98
|
-
access_token: ENV["GITHUB_RELEASE_TOKEN"]
|
99
|
-
},
|
100
|
-
headers: {
|
101
|
-
"User-Agent" => "github-release-party/#{GithubReleaseParty::VERSION}"
|
102
|
-
}
|
103
|
-
}
|
104
|
-
end
|
105
|
-
|
106
96
|
def self.error(r)
|
107
|
-
"#{r.
|
97
|
+
"#{r.url}: #{r.code}: #{r.body}. #{r.headers.to_json}"
|
108
98
|
end
|
109
99
|
end
|
@@ -46,7 +46,7 @@ def github_tag(hash, ver)
|
|
46
46
|
# create GitHub release
|
47
47
|
puts
|
48
48
|
puts "Waiting 3 seconds to let GitHub process the new tag."
|
49
|
-
sleep
|
49
|
+
sleep(3)
|
50
50
|
GithubReleaseParty.create(tag_name, ver, message)
|
51
51
|
end
|
52
52
|
|
@@ -90,7 +90,7 @@ namespace :deploy do
|
|
90
90
|
repo = GithubReleaseParty.repo
|
91
91
|
|
92
92
|
tags = `git tag -l heroku/v* --sort=version:refname`.split("\n")
|
93
|
-
puts "Found #{tags.
|
93
|
+
puts "Found #{tags.length} tags."
|
94
94
|
tags.each_with_index do |tag_name, i|
|
95
95
|
ver = tag_name[/v(\d+)/]
|
96
96
|
last_tag = if i == 0
|
@@ -124,6 +124,6 @@ namespace :deploy do
|
|
124
124
|
task :changes do
|
125
125
|
last_tag = `git describe --tags --abbrev=0 --match 'heroku/v*' 2> /dev/null`.strip
|
126
126
|
last_tag = `git rev-list --max-parents=0 HEAD`.strip[0..6] if last_tag.empty?
|
127
|
-
system "git log --oneline --reverse #{last_tag}..HEAD"
|
127
|
+
system "git log --oneline --no-decorate --reverse #{last_tag}..HEAD"
|
128
128
|
end
|
129
129
|
end
|
data/lib/http.rb
ADDED
@@ -0,0 +1,143 @@
|
|
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
|
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.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Sundin
|
@@ -31,22 +31,8 @@ cert_chain:
|
|
31
31
|
E04BZKo2WzOTzSDymo97Yu4YFgyc98umMyeaCvPk4YmdNzqSanAXpY2bnsyu0CF5
|
32
32
|
Td0=
|
33
33
|
-----END CERTIFICATE-----
|
34
|
-
date: 2017-
|
34
|
+
date: 2017-11-26 00:00:00.000000000 Z
|
35
35
|
dependencies:
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: httparty
|
38
|
-
requirement: !ruby/object:Gem::Requirement
|
39
|
-
requirements:
|
40
|
-
- - "~>"
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: '0.13'
|
43
|
-
type: :runtime
|
44
|
-
prerelease: false
|
45
|
-
version_requirements: !ruby/object:Gem::Requirement
|
46
|
-
requirements:
|
47
|
-
- - "~>"
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '0.13'
|
50
36
|
- !ruby/object:Gem::Dependency
|
51
37
|
name: rake
|
52
38
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,6 +58,7 @@ 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
|
61
|
+
- lib/http.rb
|
75
62
|
homepage: https://github.com/stefansundin/github-release-party
|
76
63
|
licenses:
|
77
64
|
- GPL-3.0
|
@@ -92,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
92
79
|
version: 1.3.6
|
93
80
|
requirements: []
|
94
81
|
rubyforge_project:
|
95
|
-
rubygems_version: 2.6.
|
82
|
+
rubygems_version: 2.6.13
|
96
83
|
signing_key:
|
97
84
|
specification_version: 4
|
98
85
|
summary: Easily create GitHub releases.
|
metadata.gz.sig
CHANGED
Binary file
|