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 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