escobar 0.2.1 → 0.2.2.pre1
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 +1 -0
- data/.rubocop.yml +1 -1
- data/lib/escobar/heroku/app.rb +85 -0
- data/lib/escobar/heroku/pipeline.rb +10 -72
- data/lib/escobar/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4dcb8494c5d1b49c14b50e2abb945e09dd9897f1
|
4
|
+
data.tar.gz: 3f7324892b8260c505f8384a6b381ab25711a4e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 439e7e9ada1b84086594df5e4f65c2aae7772c63607dc3030ecbbfb27ed5f54a7b400136e112d186fd637180c86318d35978d6e5c17854c694e56aed52e051d6
|
7
|
+
data.tar.gz: 5c5c03b3acb0ab6e8ba30808d4f18744e6f24021c6b6fa78c31666e220dd8a6fdbd9504213cfceb09c714da71722b87a060cfd1e3c42ee662bbad11380375c0d
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/lib/escobar/heroku/app.rb
CHANGED
@@ -20,10 +20,95 @@ module Escobar
|
|
20
20
|
"https://dashboard.heroku.com/apps/#{name}"
|
21
21
|
end
|
22
22
|
|
23
|
+
def locked?
|
24
|
+
response = client.heroku.get("/apps/#{id}/config-vars")
|
25
|
+
response["id"] == "two_factor"
|
26
|
+
end
|
27
|
+
|
23
28
|
# Accepts either google authenticator or yubikey second_factor formatting
|
24
29
|
def preauth(second_factor)
|
25
30
|
!client.heroku.put("/apps/#{id}/pre-authorizations", second_factor).any?
|
26
31
|
end
|
32
|
+
|
33
|
+
def create_build(ref, environment, force, custom_payload)
|
34
|
+
deployment = create_github_deployment("deploy", ref, environment,
|
35
|
+
force, custom_payload)
|
36
|
+
|
37
|
+
return({ error: deployment["message"] }) unless deployment["sha"]
|
38
|
+
|
39
|
+
sha = github_deployment["sha"]
|
40
|
+
build = create_heroku_build(app.name, sha)
|
41
|
+
create_deployment_from(app, deployment, sha, build)
|
42
|
+
end
|
43
|
+
|
44
|
+
# rubocop:disable Metrics/LineLength
|
45
|
+
def create_deployment_from(app, github_deployment, sha, build)
|
46
|
+
case build["id"]
|
47
|
+
when "two_factor"
|
48
|
+
description = "A second factor is required. Use your configured " \
|
49
|
+
"authenticator app or yubikey."
|
50
|
+
create_github_deployment_status(github_deployment["url"], nil, "failure", description)
|
51
|
+
{ error: build["message"] }
|
52
|
+
when Escobar::Heroku::BuildRequestSuccess
|
53
|
+
target_url = "https://dashboard.heroku.com/apps/#{app.name}/" \
|
54
|
+
"activity/builds/#{build['id']}"
|
55
|
+
|
56
|
+
create_github_deployment_status(github_deployment["url"],
|
57
|
+
target_url,
|
58
|
+
"pending",
|
59
|
+
"Build running..")
|
60
|
+
{
|
61
|
+
sha: sha,
|
62
|
+
name: name,
|
63
|
+
repo: github_repository,
|
64
|
+
app_id: app.name,
|
65
|
+
build_id: build["id"],
|
66
|
+
target_url: target_url,
|
67
|
+
deployment_url: github_deployment["url"]
|
68
|
+
}
|
69
|
+
else
|
70
|
+
{ error: "Unable to create heroku build for #{name}" }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
# rubocop:enable Metrics/LineLength
|
74
|
+
|
75
|
+
def create_heroku_build(app_name, sha)
|
76
|
+
body = {
|
77
|
+
source_blob: {
|
78
|
+
url: github_client.archive_link(sha),
|
79
|
+
version: sha[0..7],
|
80
|
+
version_description: "#{github_repository}:#{sha}"
|
81
|
+
}
|
82
|
+
}
|
83
|
+
client.heroku.post("/apps/#{app_name}/builds", body)
|
84
|
+
end
|
85
|
+
|
86
|
+
def create_github_deployment(task, ref, environment, force, extras = {})
|
87
|
+
required_contexts = required_commit_contexts(force)
|
88
|
+
|
89
|
+
options = {
|
90
|
+
ref: ref,
|
91
|
+
task: task,
|
92
|
+
auto_merge: !force,
|
93
|
+
payload: extras.merge(custom_deployment_payload),
|
94
|
+
environment: environment,
|
95
|
+
required_contexts: required_contexts
|
96
|
+
}
|
97
|
+
github_client.create_deployment(options)
|
98
|
+
end
|
99
|
+
|
100
|
+
def create_github_deployment_status(url, target_url, state, description)
|
101
|
+
payload = {
|
102
|
+
state: state,
|
103
|
+
target_url: target_url,
|
104
|
+
description: description
|
105
|
+
}
|
106
|
+
create_deployment_status(url, payload)
|
107
|
+
end
|
108
|
+
|
109
|
+
def create_deployment_status(url, payload)
|
110
|
+
github_client.create_deployment_status(url, payload)
|
111
|
+
end
|
27
112
|
end
|
28
113
|
end
|
29
114
|
end
|
@@ -91,44 +91,20 @@ module Escobar
|
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
create_github_deployment_status(github_deployment["url"], target_url, "pending", "Build running..")
|
105
|
-
{
|
106
|
-
sha: sha,
|
107
|
-
name: name,
|
108
|
-
repo: github_repository,
|
109
|
-
app_id: app.name,
|
110
|
-
build_id: build["id"],
|
111
|
-
target_url: target_url,
|
112
|
-
deployment_url: github_deployment["url"]
|
113
|
-
}
|
94
|
+
def create_deployment(ref, environment, force = false, payload = {})
|
95
|
+
app = environments[environment] && environments[environment].last
|
96
|
+
if app
|
97
|
+
if !app.locked?
|
98
|
+
app.create_build(ref, environment, force, payload)
|
99
|
+
else
|
100
|
+
{ error: "Application #{name} is locked by a second factor",
|
101
|
+
url: app.dashboard_url }
|
102
|
+
end
|
114
103
|
else
|
115
|
-
{ error: "
|
104
|
+
{ error: "No '#{environment}' environment for #{name}." }
|
116
105
|
end
|
117
106
|
end
|
118
107
|
|
119
|
-
def create_deployment(ref, environment, force = false, custom_payload = {})
|
120
|
-
app = environments[environment] && environments[environment].last
|
121
|
-
return({ error: "No '#{environment}' environment for #{name}." }) unless app
|
122
|
-
|
123
|
-
github_deployment = create_github_deployment("deploy", ref, environment, force, custom_payload)
|
124
|
-
return({ error: github_deployment["message"] }) unless github_deployment["sha"]
|
125
|
-
|
126
|
-
sha = github_deployment["sha"]
|
127
|
-
build = create_heroku_build(app.name, sha)
|
128
|
-
create_deployment_from(app, github_deployment, sha, build)
|
129
|
-
end
|
130
|
-
# rubocop:enable Metrics/LineLength
|
131
|
-
|
132
108
|
def get(path)
|
133
109
|
response = kolkrabbi_client.get do |request|
|
134
110
|
request.url path
|
@@ -143,10 +119,6 @@ module Escobar
|
|
143
119
|
@kolkrabbi ||= Faraday.new(url: "https://#{ENV['KOLKRABBI_HOSTNAME']}")
|
144
120
|
end
|
145
121
|
|
146
|
-
def create_deployment_status(url, payload)
|
147
|
-
github_client.create_deployment_status(url, payload)
|
148
|
-
end
|
149
|
-
|
150
122
|
private
|
151
123
|
|
152
124
|
def remote_repository
|
@@ -157,40 +129,6 @@ module Escobar
|
|
157
129
|
{ name: name, pipeline: self.to_hash, provider: "slash-heroku" }
|
158
130
|
end
|
159
131
|
|
160
|
-
def create_github_deployment(task, ref, environment, force, extras = {})
|
161
|
-
required_contexts = required_commit_contexts(force)
|
162
|
-
|
163
|
-
options = {
|
164
|
-
ref: ref,
|
165
|
-
task: task,
|
166
|
-
auto_merge: !force,
|
167
|
-
payload: extras.merge(custom_deployment_payload),
|
168
|
-
environment: environment,
|
169
|
-
required_contexts: required_contexts
|
170
|
-
}
|
171
|
-
github_client.create_deployment(options)
|
172
|
-
end
|
173
|
-
|
174
|
-
def create_github_deployment_status(url, target_url, state, description)
|
175
|
-
payload = {
|
176
|
-
state: state,
|
177
|
-
target_url: target_url,
|
178
|
-
description: description
|
179
|
-
}
|
180
|
-
create_deployment_status(url, payload)
|
181
|
-
end
|
182
|
-
|
183
|
-
def create_heroku_build(app_name, sha)
|
184
|
-
body = {
|
185
|
-
source_blob: {
|
186
|
-
url: github_client.archive_link(sha),
|
187
|
-
version: sha[0..7],
|
188
|
-
version_description: "#{github_repository}:#{sha}"
|
189
|
-
}
|
190
|
-
}
|
191
|
-
client.heroku.post("/apps/#{app_name}/builds", body)
|
192
|
-
end
|
193
|
-
|
194
132
|
def github_client
|
195
133
|
@github_client ||= Escobar::GitHub::Client.new(client.github_token,
|
196
134
|
github_repository)
|
data/lib/escobar/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: escobar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Corey Donohoe
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -196,9 +196,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
196
196
|
version: '0'
|
197
197
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
198
198
|
requirements:
|
199
|
-
- - "
|
199
|
+
- - ">"
|
200
200
|
- !ruby/object:Gem::Version
|
201
|
-
version:
|
201
|
+
version: 1.3.1
|
202
202
|
requirements: []
|
203
203
|
rubyforge_project:
|
204
204
|
rubygems_version: 2.5.1
|