escobar 0.1.0 → 0.1.1
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
- data/.gitignore +3 -0
- data/.travis.yml +1 -0
- data/README.md +1 -1
- data/bin/console +6 -0
- data/escobar.gemspec +5 -0
- data/lib/escobar/client.rb +23 -0
- data/lib/escobar/github.rb +13 -0
- data/lib/escobar/heroku/client.rb +75 -0
- data/lib/escobar/heroku/coupling.rb +14 -0
- data/lib/escobar/heroku/pipeline.rb +30 -0
- data/lib/escobar/version.rb +1 -1
- data/lib/escobar.rb +44 -0
- metadata +75 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e1e4a6792723ce5b679672f36a2e62f1d94b94a
|
4
|
+
data.tar.gz: 5121cb555396519f823790a52d785dca9d35ecfe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea78c3f9a67ce9b1298d9b1690dae42dd4a52d54fefd63d7b5d32dfc4eaa0d8f4003d5fef26d3469c8fd1af37dbd0dbc5b79f7cff4777a0387ad8b50cfa8f2cf
|
7
|
+
data.tar.gz: 8307ea8d1abc282843e0f91ca47226a101642e92cf9acf535b26377d7e402689bb50eed28884e3f2496da845e8fe98a3218968ff808f6c6615b29afcb718eb72
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/README.md
CHANGED
data/bin/console
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require "bundler/setup"
|
4
4
|
require "escobar"
|
5
|
+
require "pry"
|
5
6
|
|
6
7
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
8
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -11,4 +12,9 @@ require "escobar"
|
|
11
12
|
# Pry.start
|
12
13
|
|
13
14
|
require "irb"
|
15
|
+
require "irb/completion"
|
16
|
+
require 'irb/ext/save-history'
|
17
|
+
|
18
|
+
IRB.conf[:SAVE_HISTORY] = 100
|
19
|
+
IRB.conf[:HISTORY_FILE] = "#{File.expand_path("../..", __FILE__)}/.irb.history"
|
14
20
|
IRB.start
|
data/escobar.gemspec
CHANGED
@@ -23,10 +23,15 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.require_paths = ["lib"]
|
24
24
|
|
25
25
|
spec.add_dependency "faraday", "~> 0.9.2"
|
26
|
+
spec.add_dependency "netrc", "~> 0.11"
|
27
|
+
spec.add_dependency "octokit", "~> 4.3.0"
|
26
28
|
|
27
29
|
spec.add_development_dependency "bundler", "~> 1.11"
|
28
30
|
spec.add_development_dependency "guard-rspec", "~> 4.6.2"
|
31
|
+
spec.add_development_dependency "pry"
|
29
32
|
spec.add_development_dependency "rake", "~> 10.0"
|
30
33
|
spec.add_development_dependency "rspec", "~> 3.5.0.beta2"
|
31
34
|
spec.add_development_dependency "rubocop", "~> 0.38"
|
35
|
+
spec.add_development_dependency "uuid", "~> 2.3"
|
36
|
+
spec.add_development_dependency "webmock", "~> 1.24"
|
32
37
|
end
|
data/lib/escobar/client.rb
CHANGED
@@ -1,5 +1,28 @@
|
|
1
1
|
module Escobar
|
2
2
|
# Top-level client for heroku
|
3
3
|
class Client
|
4
|
+
def self.from_environment
|
5
|
+
new(Escobar.github_api_token, Escobar.heroku_api_token)
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_reader :github, :heroku
|
9
|
+
def initialize(github_token, heroku_token)
|
10
|
+
@github = Escobar::GitHub.new(github_token)
|
11
|
+
@heroku = Escobar::Heroku::Client.new(heroku_token)
|
12
|
+
end
|
13
|
+
|
14
|
+
def [](key)
|
15
|
+
pipelines.find { |pipeline| pipeline.name == key }
|
16
|
+
end
|
17
|
+
|
18
|
+
def app_names
|
19
|
+
pipelines.map(&:name)
|
20
|
+
end
|
21
|
+
|
22
|
+
def pipelines
|
23
|
+
@pipelines ||= heroku.get("/pipelines").map do |pipe|
|
24
|
+
Escobar::Heroku::Pipeline.new(heroku, pipe["id"], pipe["name"])
|
25
|
+
end
|
26
|
+
end
|
4
27
|
end
|
5
28
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module Escobar
|
2
|
+
# Top-level class for interacting with Heroku API
|
3
|
+
module Heroku
|
4
|
+
# Top-level client for interacting with Heroku API
|
5
|
+
class Client
|
6
|
+
attr_reader :client, :token
|
7
|
+
def initialize(token)
|
8
|
+
@token = token
|
9
|
+
end
|
10
|
+
|
11
|
+
# mask password
|
12
|
+
def inspect
|
13
|
+
inspected = super
|
14
|
+
inspected = inspected.gsub! @token, "*******" if @token
|
15
|
+
inspected
|
16
|
+
end
|
17
|
+
|
18
|
+
def get(path, version = 3)
|
19
|
+
response = client.get do |request|
|
20
|
+
request.url path
|
21
|
+
request.headers["Accept"] = heroku_accept_header(version)
|
22
|
+
request.headers["Accept-Encoding"] = ""
|
23
|
+
request.headers["Content-Type"] = "application/json"
|
24
|
+
request.headers["Authorization"] = "Bearer #{token}"
|
25
|
+
end
|
26
|
+
|
27
|
+
JSON.parse(response.body)
|
28
|
+
rescue StandardError
|
29
|
+
response && response.body
|
30
|
+
end
|
31
|
+
|
32
|
+
def get_range(path, range, version = 3)
|
33
|
+
response = client.get do |request|
|
34
|
+
request.url path
|
35
|
+
request.headers["Accept"] = heroku_accept_header(version)
|
36
|
+
request.headers["Accept-Encoding"] = ""
|
37
|
+
request.headers["Content-Type"] = "application/json"
|
38
|
+
request.headers["Authorization"] = "Bearer #{token}"
|
39
|
+
request.headers["Range"] = range
|
40
|
+
end
|
41
|
+
|
42
|
+
JSON.parse(response.body)
|
43
|
+
rescue StandardError
|
44
|
+
response && response.body
|
45
|
+
end
|
46
|
+
|
47
|
+
def post(path, body)
|
48
|
+
response = client.post do |request|
|
49
|
+
request.url path
|
50
|
+
request.headers["Accept"] = heroku_accept_header(3)
|
51
|
+
request.headers["Accept-Encoding"] = ""
|
52
|
+
request.headers["Content-Type"] = "application/json"
|
53
|
+
if token
|
54
|
+
request.headers["Authorization"] = "Bearer #{token}"
|
55
|
+
end
|
56
|
+
request.body = body.to_json
|
57
|
+
end
|
58
|
+
|
59
|
+
JSON.parse(response.body)
|
60
|
+
rescue StandardError
|
61
|
+
response && response.body
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def heroku_accept_header(version)
|
67
|
+
"application/vnd.heroku+json; version=#{version}"
|
68
|
+
end
|
69
|
+
|
70
|
+
def client
|
71
|
+
@client ||= Faraday.new(url: "https://api.heroku.com")
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Escobar
|
2
|
+
module Heroku
|
3
|
+
# Class representing a deployable environment
|
4
|
+
class Coupling
|
5
|
+
attr_reader :app, :client, :id, :name
|
6
|
+
def initialize(client, coupling)
|
7
|
+
@id = coupling["id"]
|
8
|
+
@app = coupling["app"]["id"]
|
9
|
+
@name = coupling["stage"]
|
10
|
+
@client = client
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Escobar
|
2
|
+
module Heroku
|
3
|
+
# Class reperesenting a Heroku Pipeline
|
4
|
+
class Pipeline
|
5
|
+
attr_reader :client, :id, :name
|
6
|
+
def initialize(client, id, name)
|
7
|
+
@id = id
|
8
|
+
@name = name
|
9
|
+
@client = client
|
10
|
+
end
|
11
|
+
|
12
|
+
def environments
|
13
|
+
@environments ||= couplings.each_with_object({}) do |sum, part|
|
14
|
+
sum[part.name] = part
|
15
|
+
sum
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def couplings
|
20
|
+
@couplings ||= couplings!
|
21
|
+
end
|
22
|
+
|
23
|
+
def couplings!
|
24
|
+
client.get("/pipelines/#{id}/pipeline-couplings").map do |coupling|
|
25
|
+
Escobar::Heroku::Coupling.new(client, coupling)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/escobar/version.rb
CHANGED
data/lib/escobar.rb
CHANGED
@@ -1,8 +1,52 @@
|
|
1
|
+
require "netrc"
|
1
2
|
require "faraday"
|
3
|
+
require "octokit"
|
4
|
+
require "json"
|
2
5
|
require "escobar/version"
|
3
6
|
|
4
7
|
# Top-level module for Escobar code
|
5
8
|
module Escobar
|
9
|
+
def self.netrc
|
10
|
+
@netrc ||= begin
|
11
|
+
if env_netrc
|
12
|
+
env_netrc
|
13
|
+
else
|
14
|
+
home_netrc
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.env_netrc
|
20
|
+
@env_netrc ||= begin
|
21
|
+
if ENV["NETRC"]
|
22
|
+
Netrc.read("#{ENV['NETRC']}/.netrc")
|
23
|
+
end
|
24
|
+
rescue Errno::ENOTDIR
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.home_netrc
|
30
|
+
@home_netrc ||= begin
|
31
|
+
if ENV["HOME"]
|
32
|
+
Netrc.read("#{ENV['HOME']}/.netrc")
|
33
|
+
end
|
34
|
+
rescue Errno::ENOTDIR
|
35
|
+
nil
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.heroku_api_token
|
40
|
+
netrc["api.heroku.com"]["password"]
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.github_api_token
|
44
|
+
netrc["api.github.com"]["password"]
|
45
|
+
end
|
6
46
|
end
|
7
47
|
|
8
48
|
require_relative "./escobar/client"
|
49
|
+
require_relative "./escobar/github"
|
50
|
+
require_relative "./escobar/heroku/client"
|
51
|
+
require_relative "./escobar/heroku/coupling"
|
52
|
+
require_relative "./escobar/heroku/pipeline"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: escobar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Corey Donohoe
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.9.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: netrc
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.11'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.11'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: octokit
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 4.3.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 4.3.0
|
27
55
|
- !ruby/object:Gem::Dependency
|
28
56
|
name: bundler
|
29
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +80,20 @@ dependencies:
|
|
52
80
|
- - "~>"
|
53
81
|
- !ruby/object:Gem::Version
|
54
82
|
version: 4.6.2
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
55
97
|
- !ruby/object:Gem::Dependency
|
56
98
|
name: rake
|
57
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +136,34 @@ dependencies:
|
|
94
136
|
- - "~>"
|
95
137
|
- !ruby/object:Gem::Version
|
96
138
|
version: '0.38'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: uuid
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '2.3'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '2.3'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: webmock
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '1.24'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '1.24'
|
97
167
|
description: Heroku pipelines and GitHub Deployments
|
98
168
|
email:
|
99
169
|
- atmos@atmos.org
|
@@ -117,6 +187,10 @@ files:
|
|
117
187
|
- escobar.gemspec
|
118
188
|
- lib/escobar.rb
|
119
189
|
- lib/escobar/client.rb
|
190
|
+
- lib/escobar/github.rb
|
191
|
+
- lib/escobar/heroku/client.rb
|
192
|
+
- lib/escobar/heroku/coupling.rb
|
193
|
+
- lib/escobar/heroku/pipeline.rb
|
120
194
|
- lib/escobar/version.rb
|
121
195
|
homepage: https://github.com/atmos/escobar
|
122
196
|
licenses:
|