github-release-party 0.1.1 → 0.2.0

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
  SHA1:
3
- metadata.gz: 0ec1e2b67cc4b6a63da3abadd322402dc34fb44e
4
- data.tar.gz: 04b15d9e7bff1230060e3a35c3b4c4a507fe3a82
3
+ metadata.gz: a24536d487240bee00527dcf0e8d3399a1ceec4f
4
+ data.tar.gz: 8951cbbf1942ebbf41d697b837d5c0dee7e85006
5
5
  SHA512:
6
- metadata.gz: de77908cda81ce68ba8737d250a2df96dc974a0fd6cd9bd1b9d1ac619dbe93a11d5c777fbddaaaf83df6c58eb4708480163afcc0f9ccc4f02a1cd2630aa97f54
7
- data.tar.gz: 9174e4ace2d9c8758a1c7bfd5259b36b902411c4e42c523d10f9bf06b68912238dca5be1b2bab4d2d8bcf3b059cbae81a49d6ffa6dbd9c3303fabd872dfcf917
6
+ metadata.gz: 5f5cb1532c190d2b7ca687f3814cd3b51f900bebef9796a49ee6782ed1ce3aeb48b5f139e5708a228c307ae0dfc559ef2a5172f2484ced24f85ade2fb125309d
7
+ data.tar.gz: 9eac5deead4e1da021b661b2ff6b04ba729095db80291ab38fac3b181990f7565ae49a68c44fdfeb732f91d4c7d6a84670215b315e1ce6e292d37b74466ebfc2
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,21 +1,22 @@
1
- # This is a GitHub party, and everyone's invited!
1
+ require_relative "http"
2
2
 
3
- require "httparty"
4
-
5
- class GithubReleaseParty
6
- include HTTParty
7
- base_uri "https://api.github.com"
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 "/repos/#{self.class.repo}/releases?page=#{page}", self.class.options
15
- raise self.class.error(r) if not r.success?
16
- break if r.parsed_response.count == 0
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.parsed_response
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 "/repos/#{repo}/releases/#{id}", options.merge({
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 "/repos/#{repo}/releases", options.merge({
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 not ENV["GITHUB_RELEASE_TOKEN"]
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 not repo
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.request.path.to_s}: #{r.code} #{r.message}: #{r.body}. #{r.headers.to_h.to_json}"
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 3
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.count} 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
@@ -1,3 +1,5 @@
1
- class GithubReleaseParty
2
- VERSION = "0.1.1"
1
+ require_relative "../http"
2
+
3
+ class GithubReleaseParty < HTTP
4
+ VERSION = "0.2.0"
3
5
  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.1.1
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-02-02 00:00:00.000000000 Z
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.10
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