github-release-party 0.3.1 → 0.3.6

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: 17468ff63d0b87ac1c2324f08066c33776c9840fe6bf17c9c68de3b7339c2fe9
4
- data.tar.gz: a3bcb900b20973025e84683a2623925ec471b18bffda5a1aa846af7c1fb900f4
3
+ metadata.gz: 8b275fe65a8b6ac130be289ac5f7b1af6f53f48c4ebbafb784cbb14386659c24
4
+ data.tar.gz: cd19b786aff568234d157f5eae7e81902a97272ccd0976deb4a89fa9dbdde7bf
5
5
  SHA512:
6
- metadata.gz: 66a569d56e8b274321e6e3a969b1af2bc892de778a772ea94a7e18a02704a16c06849b6883abee2e5572454785059ad47a6f5b46fad19b128c986238676c816a
7
- data.tar.gz: 60f1df834a32ed4b506935fababb44b3fa458c9554b2b64b12bea1c13c0d980ab7c618336e736844b20027c1485545b21abf6c3683f3ae89a1dacf1b9bf83f81
6
+ metadata.gz: bebba1d515b12e752576732795caee7d364bacfc8df7528db2e808109ca5c9cef08de9f8d224b5640c598aa5196e14b17648e8607690ba9ce3cc7add9cf9c56d
7
+ data.tar.gz: 24eb66e7bdd380085a67655356d6db00ab8ffcf3b4eb8119a3c3922b6f76d2f4cd3ab4a5f5efdd59b4ea26e73c274377cae393dbd2e893bf384b6c99c7ddc142
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,65 +1,46 @@
1
- require_relative "http"
2
1
  require_relative "github-release-party/version"
2
+ require "net/http"
3
+ require "json"
3
4
 
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 = []
5
+ class GithubReleaseParty
6
+ def self.releases
7
+ releases = []
14
8
  page = 1
15
9
  while true
16
- r = self.class.get("/repos/#{self.class.repo}/releases?page=#{page}")
17
- raise(HTTPError, r) if !r.success?
10
+ r = GitHub.get("/repos/#{repo}/releases?page=#{page}")
11
+ if !r.success?
12
+ puts "Error occurred when fetching releases:"
13
+ puts error(r)
14
+ abort
15
+ end
18
16
  break if r.json.length == 0
19
-
20
- @releases = @releases + r.json
17
+ releases = releases + r.json
21
18
  page += 1
22
19
  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
20
+ return releases
32
21
  end
33
22
 
34
23
  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
- })
24
+ r = GitHub.patch("/repos/#{repo}/releases/#{id}", {
25
+ name: name,
26
+ body: message,
27
+ }.to_json)
43
28
  if r.success?
44
29
  puts "GitHub release #{name} updated!"
45
30
  else
46
- puts "Failed to update GitHub release #{tag_name}!"
31
+ puts "Failed to update GitHub release #{name}!"
47
32
  puts error(r)
48
33
  end
49
34
  end
50
35
 
51
36
  def self.create(tag_name, name, message)
52
- return unless env_ok
53
-
54
37
  body = {
55
38
  tag_name: tag_name,
56
39
  name: name,
57
- body: message
40
+ body: message,
58
41
  }
59
42
 
60
- r = post("/repos/#{repo}/releases", {
61
- body: body.to_json
62
- })
43
+ r = GitHub.post("/repos/#{repo}/releases", body.to_json)
63
44
  if r.success?
64
45
  puts "GitHub release #{tag_name} created!"
65
46
  else
@@ -67,7 +48,7 @@ class GithubReleaseParty < HTTP
67
48
  puts
68
49
  puts "Body sent: #{body.to_json}"
69
50
  puts
70
- puts "Failed to create GitHub release!"
51
+ puts "Failed to create a GitHub release!"
71
52
  puts "Create it manually here: https://github.com/#{repo}/releases/new?tag=#{tag_name}"
72
53
  puts "Tag version: #{tag_name}"
73
54
  puts "Release title: #{tag_name}"
@@ -76,16 +57,13 @@ class GithubReleaseParty < HTTP
76
57
  end
77
58
  end
78
59
 
79
- def self.env_ok
60
+ def self.check_env!
80
61
  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
62
+ abort "Configure GITHUB_RELEASE_TOKEN to create GitHub releases. See https://github.com/stefansundin/github-release-party#setup"
83
63
  end
84
64
  if !repo
85
- puts "Can't find the GitHub repo. Please use the remote 'origin'."
86
- return false
65
+ abort "Can't find the GitHub repository. Please use the remote 'origin'."
87
66
  end
88
- return true
89
67
  end
90
68
 
91
69
  def self.repo
@@ -95,6 +73,73 @@ class GithubReleaseParty < HTTP
95
73
  private
96
74
 
97
75
  def self.error(r)
98
- "#{r.url}: #{r.code}: #{r.body}. #{r.headers.to_json}"
76
+ "#{r.request_uri}: #{r.code}: #{r.body}\nHeaders: #{r.headers.to_json}"
77
+ end
78
+
79
+ class GitHub
80
+ def self.get(*args)
81
+ request(:request_get, *args)
82
+ end
83
+
84
+ def self.post(*args)
85
+ request(:request_post, *args)
86
+ end
87
+
88
+ def self.patch(*args)
89
+ request(:patch, *args)
90
+ end
91
+
92
+ private
93
+
94
+ def self.request(method, request_uri, body=nil)
95
+ opts = {
96
+ use_ssl: true,
97
+ open_timeout: 10,
98
+ read_timeout: 10,
99
+ }
100
+ Net::HTTP.start("api.github.com", 443, opts) do |http|
101
+ headers = {
102
+ "Authorization" => "token #{ENV["GITHUB_RELEASE_TOKEN"]}",
103
+ "User-Agent" => "github-release-party/#{GithubReleaseParty::VERSION}",
104
+ }
105
+ if method == :request_post or method == :patch
106
+ response = http.send(method, request_uri, body, headers)
107
+ else
108
+ response = http.send(method, request_uri, headers)
109
+ end
110
+ return HTTPResponse.new(response, request_uri)
111
+ end
112
+ end
113
+ end
114
+
115
+ class HTTPResponse
116
+ def initialize(response, request_uri)
117
+ @response = response
118
+ @request_uri = request_uri
119
+ end
120
+
121
+ def request_uri
122
+ @request_uri
123
+ end
124
+
125
+ def body
126
+ @response.body
127
+ end
128
+
129
+ def json
130
+ @json ||= JSON.parse(@response.body)
131
+ end
132
+
133
+ def headers
134
+ @response.to_hash
135
+ end
136
+
137
+ def code
138
+ @response.code.to_i
139
+ end
140
+
141
+ def success?
142
+ @response.is_a?(Net::HTTPSuccess)
143
+ end
99
144
  end
100
145
  end
@@ -1,4 +1,5 @@
1
1
  require "open3"
2
+ require "shellwords"
2
3
  require "github-release-party"
3
4
 
4
5
  def heroku_push(args=[])
@@ -27,7 +28,7 @@ def github_tag(hash, ver)
27
28
  last_tag = `git rev-list --max-parents=0 HEAD`.strip[0..6]
28
29
  first_deploy = true
29
30
  end
30
- commits = `git log #{last_tag}..#{hash} --first-parent --pretty=format:"- [%s](https://github.com/#{repo}/commit/%H)"`
31
+ commits = `git log #{last_tag}..#{hash} --reverse --first-parent --pretty=format:"- [%s](https://github.com/#{repo}/commit/%H)"`
31
32
  message = "Deploy #{hash[0..6]}\n\nDiff: https://github.com/#{repo}/compare/#{last_tag}...#{tag_name}\n#{commits}"
32
33
 
33
34
  if first_deploy
@@ -53,7 +54,7 @@ end
53
54
 
54
55
  desc "Deploy a new version to Heroku"
55
56
  task :deploy do
56
- abort if not GithubReleaseParty.env_ok
57
+ GithubReleaseParty.check_env!
57
58
  ver = heroku_push() or abort("Deploy failed.")
58
59
  hash = `git rev-parse HEAD`.strip
59
60
  github_tag(hash, ver)
@@ -62,7 +63,7 @@ end
62
63
  namespace :deploy do
63
64
  desc "Deploy a new version to Heroku using --force"
64
65
  task :force do
65
- abort if not GithubReleaseParty.env_ok
66
+ GithubReleaseParty.check_env!
66
67
  ver = heroku_push(%w[--force]) or abort("Deploy failed.")
67
68
  hash = `git rev-parse HEAD`.strip
68
69
  github_tag(hash, ver)
@@ -70,7 +71,7 @@ namespace :deploy do
70
71
 
71
72
  desc "Tag last release"
72
73
  task :tag do
73
- abort if not GithubReleaseParty.env_ok
74
+ GithubReleaseParty.check_env!
74
75
 
75
76
  # get heroku version number
76
77
  begin
@@ -86,7 +87,8 @@ namespace :deploy do
86
87
 
87
88
  desc "Rebuild all the release tags"
88
89
  task :retag do
89
- github = GithubReleaseParty.new
90
+ GithubReleaseParty.check_env!
91
+ releases = GithubReleaseParty.releases
90
92
  repo = GithubReleaseParty.repo
91
93
 
92
94
  tags = `git tag -l heroku/v* --sort=version:refname`.split("\n")
@@ -102,7 +104,7 @@ namespace :deploy do
102
104
 
103
105
  hash = `git rev-list --max-count=1 #{tag_name}`.strip
104
106
  date = `git show --pretty="format:%ai" -s --no-color #{tag_name} | tail -1`.strip
105
- commits = `git log #{last_tag}..#{tag_name} --pretty=format:"- [%s](https://github.com/#{repo}/commit/%H)"`
107
+ commits = `git log #{last_tag}..#{tag_name} --reverse --pretty=format:"- [%s](https://github.com/#{repo}/commit/%H)"`
106
108
  message = "Deploy #{hash[0..6]}\n\nDiff: https://github.com/#{repo}/compare/#{last_tag}...#{tag_name}\n#{commits}"
107
109
 
108
110
  if i == 0
@@ -115,7 +117,12 @@ namespace :deploy do
115
117
  abort if not success
116
118
 
117
119
  # update or create GitHub release
118
- 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
119
126
  end
120
127
 
121
128
  puts
@@ -1,5 +1,3 @@
1
- require_relative "../http"
2
-
3
- class GithubReleaseParty < HTTP
4
- VERSION = "0.3.1"
1
+ class GithubReleaseParty
2
+ VERSION = "0.3.6"
5
3
  end
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github-release-party
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Sundin
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain:
11
11
  - |
@@ -31,36 +31,22 @@ cert_chain:
31
31
  E04BZKo2WzOTzSDymo97Yu4YFgyc98umMyeaCvPk4YmdNzqSanAXpY2bnsyu0CF5
32
32
  Td0=
33
33
  -----END CERTIFICATE-----
34
- date: 2018-12-24 00:00:00.000000000 Z
34
+ date: 2021-04-09 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
38
  requirement: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - "~>"
40
+ - - ">="
41
41
  - !ruby/object:Gem::Version
42
42
  version: '12'
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
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,12 +58,11 @@ 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
79
64
  metadata: {}
80
- post_install_message:
65
+ post_install_message:
81
66
  rdoc_options: []
82
67
  require_paths:
83
68
  - lib
@@ -92,9 +77,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
77
  - !ruby/object:Gem::Version
93
78
  version: 1.3.6
94
79
  requirements: []
95
- rubyforge_project:
96
- rubygems_version: 2.7.6
97
- signing_key:
80
+ rubygems_version: 3.2.3
81
+ signing_key:
98
82
  specification_version: 4
99
83
  summary: Easily create GitHub releases.
100
84
  test_files: []
metadata.gz.sig CHANGED
Binary file
data/lib/http.rb DELETED
@@ -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