dpl 1.6.7.travis.549.1 → 1.6.7.travis.552.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/dpl/provider/heroku.rb +4 -3
- data/lib/dpl/provider/heroku/api.rb +84 -0
- data/spec/provider/heroku_api_spec.rb +30 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MmE1MzRjYjdjOWVmZmZkZDVkNTM1NGU0Mzk2NDBjZjM3YWZkZDRlMw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OTNmNmY2ZGZkNWE0ZTZjYzMwZWY0YjcyZDkyYzRjZGQ4NGM4ODU4NA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MDI0Y2ZmYzM3ODg5OGRjYjg3YWIyY2ZhNjQ4NGMxYzU4MTAxMzQxZDQ2OTAy
|
10
|
+
MjUyYzg1YWI4Njk0OWJkYWRjZGE0ZGJiOTU2N2IwOGJmNDhmNjI1NjFkNWM2
|
11
|
+
NzQxYTU4NzVhZDI2Yzc2OTdmYzU5YWUwYWUwMWQ3ZjYxNjMxZDY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
N2JkNTM2Zjk3ZWE1M2ZiNzQwM2FkMDFmZmNiNjdhMTI2MGE5YTU1YmM4MjFi
|
14
|
+
MjZkMWVhZDNhNDc0Y2MwM2QzOGExMGIyMzVlYWI5MDA0ZGU3MjAyZDFkMjc3
|
15
|
+
ZTdjZjM1ZDJkOTdiZmQ1NGQwNTU3YzdhOWVhN2I2MzFmZDlkY2E=
|
data/lib/dpl/provider/heroku.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
module DPL
|
2
2
|
class Provider
|
3
3
|
module Heroku
|
4
|
-
autoload :Anvil,
|
5
|
-
autoload :
|
6
|
-
autoload :
|
4
|
+
autoload :Anvil, 'dpl/provider/heroku/anvil'
|
5
|
+
autoload :API, 'dpl/provider/heroku/api'
|
6
|
+
autoload :Git, 'dpl/provider/heroku/git'
|
7
|
+
autoload :GitDeployKey, 'dpl/provider/heroku/git_deploy_key'
|
7
8
|
|
8
9
|
extend self
|
9
10
|
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'shellwords'
|
3
|
+
|
4
|
+
module DPL
|
5
|
+
class Provider
|
6
|
+
module Heroku
|
7
|
+
class API < Git
|
8
|
+
def needs_key?
|
9
|
+
false
|
10
|
+
end
|
11
|
+
|
12
|
+
def user
|
13
|
+
@user ||= api.get_user.body["email"]
|
14
|
+
end
|
15
|
+
|
16
|
+
def push_app
|
17
|
+
pack_archive
|
18
|
+
upload_archive
|
19
|
+
trigger_build
|
20
|
+
end
|
21
|
+
|
22
|
+
def archive_file
|
23
|
+
Shellwords.escape("#{ENV['HOME']}/.dpl.#{option(:app)}.tgz")
|
24
|
+
end
|
25
|
+
|
26
|
+
def pack_archive
|
27
|
+
log "creating application archive"
|
28
|
+
context.shell "tar -zcf #{archive_file} ."
|
29
|
+
end
|
30
|
+
|
31
|
+
def upload_archive
|
32
|
+
log "uploading application archive"
|
33
|
+
context.shell "curl #{Shellwords.escape(put_url)} -X PUT -H 'Content-Type:' --data-binary @#{archive_file}"
|
34
|
+
end
|
35
|
+
|
36
|
+
def trigger_build
|
37
|
+
log "triggering new deployment"
|
38
|
+
response = post(:builds, source_blob: { url: get_url, version: version })
|
39
|
+
stream_url = response.fetch('stream_url')
|
40
|
+
context.shell "curl #{Shellwords.escape(stream_url)}"
|
41
|
+
end
|
42
|
+
|
43
|
+
def get_url
|
44
|
+
source_blob.fetch("get_url")
|
45
|
+
end
|
46
|
+
|
47
|
+
def put_url
|
48
|
+
source_blob.fetch("put_url")
|
49
|
+
end
|
50
|
+
|
51
|
+
def source_blob
|
52
|
+
@source_blog ||= post(:sources).fetch("source_blob")
|
53
|
+
end
|
54
|
+
|
55
|
+
def version
|
56
|
+
@version ||= begin
|
57
|
+
sha = ENV['TRAVIS_COMMIT'] || `git rev-parse HEAD`.strip
|
58
|
+
if ENV['TRAVIS_JOB_NUMBER']
|
59
|
+
"Travis Build ##{ENV['TRAVIS_JOB_NUMBER']} (#{sha})"
|
60
|
+
else
|
61
|
+
sha
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def post(subpath, body = nil, options = {})
|
67
|
+
options = {
|
68
|
+
method: :post,
|
69
|
+
path: "/apps/#{option(:app)}/#{subpath}",
|
70
|
+
headers: { "Accept" => "application/vnd.heroku+json; version=edge" },
|
71
|
+
expects: [200, 201]
|
72
|
+
}.merge(options)
|
73
|
+
|
74
|
+
if body
|
75
|
+
options[:body] = JSON.dump(body)
|
76
|
+
options[:headers]['Content-Type'] = 'application/json'
|
77
|
+
end
|
78
|
+
|
79
|
+
api.request(options).body
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'heroku-api'
|
3
|
+
require 'dpl/provider/heroku'
|
4
|
+
|
5
|
+
describe DPL::Provider::Heroku do
|
6
|
+
subject(:provider) do
|
7
|
+
described_class.new(DummyContext.new, :app => 'example', :key_name => 'key', :api_key => "foo", :strategy => "api")
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#ssh" do
|
11
|
+
it "doesn't require an ssh key" do
|
12
|
+
expect(provider.needs_key?).to eq(false)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#api" do
|
17
|
+
it 'accepts an api key' do
|
18
|
+
api = double(:api)
|
19
|
+
expect(::Heroku::API).to receive(:new).with(:api_key => "foo").and_return(api)
|
20
|
+
expect(provider.api).to eq(api)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'accepts a user and a password' do
|
24
|
+
api = double(:api)
|
25
|
+
provider.options.update(:user => "foo", :password => "bar")
|
26
|
+
expect(::Heroku::API).to receive(:new).with(:user => "foo", :password => "bar").and_return(api)
|
27
|
+
expect(provider.api).to eq(api)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dpl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.7.travis.
|
4
|
+
version: 1.6.7.travis.552.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Konstantin Haase
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -115,6 +115,7 @@ files:
|
|
115
115
|
- lib/dpl/provider/hackage.rb
|
116
116
|
- lib/dpl/provider/heroku.rb
|
117
117
|
- lib/dpl/provider/heroku/anvil.rb
|
118
|
+
- lib/dpl/provider/heroku/api.rb
|
118
119
|
- lib/dpl/provider/heroku/git.rb
|
119
120
|
- lib/dpl/provider/heroku/git_deploy_key.rb
|
120
121
|
- lib/dpl/provider/modulus.rb
|
@@ -146,6 +147,7 @@ files:
|
|
146
147
|
- spec/provider/gcs_spec.rb
|
147
148
|
- spec/provider/hackage_spec.rb
|
148
149
|
- spec/provider/heroku_anvil_spec.rb
|
150
|
+
- spec/provider/heroku_api_spec.rb
|
149
151
|
- spec/provider/heroku_git_deploy_key_spec.rb
|
150
152
|
- spec/provider/heroku_git_spec.rb
|
151
153
|
- spec/provider/modulus_spec.rb
|