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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NDE1ODI3OGVjODZiNzE4MGQ3M2I3NmU5NWVlYmUyM2ZhYjc2MWVjZQ==
4
+ MmE1MzRjYjdjOWVmZmZkZDVkNTM1NGU0Mzk2NDBjZjM3YWZkZDRlMw==
5
5
  data.tar.gz: !binary |-
6
- ZGM3ODNlNTgyYTVkY2EyOWE3ZTI1Njc3NTA1YzEyYzA1N2NhMjZlMw==
6
+ OTNmNmY2ZGZkNWE0ZTZjYzMwZWY0YjcyZDkyYzRjZGQ4NGM4ODU4NA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZTk4MDczMDI1NDhiNjhmNjFhODhlMGU1N2IyNTdhNmMwYzgwNDYzYWJhZjQ5
10
- ZmM4OGQyMjAwMGMzMGZiYjc0ZjQxOWI4Y2NhOWMwMjhkMmJjZjA4MjU3NjRm
11
- YjY1ZmQ4YWQ4ZGIzN2Y3ODhjZWIzYTRkNjk5NDk5ZmJiNjJkNGU=
9
+ MDI0Y2ZmYzM3ODg5OGRjYjg3YWIyY2ZhNjQ4NGMxYzU4MTAxMzQxZDQ2OTAy
10
+ MjUyYzg1YWI4Njk0OWJkYWRjZGE0ZGJiOTU2N2IwOGJmNDhmNjI1NjFkNWM2
11
+ NzQxYTU4NzVhZDI2Yzc2OTdmYzU5YWUwYWUwMWQ3ZjYxNjMxZDY=
12
12
  data.tar.gz: !binary |-
13
- ZTkyYzNkNzVkMTFjYmYzNmNlMTE1MTdmNWQ4ZGMxYjRhMDJiMWY3ZjRjNTcw
14
- ODExYjYzMzU3YmI5OGQ0MmY1M2U3MGVmODY5YTQzYTYzNzcxNDFjNmY4OTAx
15
- ODViNzljMzY2OTQyN2Y1NDBjZjc1ZjMzNWJjMjJiZDk4ZTkyYTI=
13
+ N2JkNTM2Zjk3ZWE1M2ZiNzQwM2FkMDFmZmNiNjdhMTI2MGE5YTU1YmM4MjFi
14
+ MjZkMWVhZDNhNDc0Y2MwM2QzOGExMGIyMzVlYWI5MDA0ZGU3MjAyZDFkMjc3
15
+ ZTdjZjM1ZDJkOTdiZmQ1NGQwNTU3YzdhOWVhN2I2MzFmZDlkY2E=
@@ -1,9 +1,10 @@
1
1
  module DPL
2
2
  class Provider
3
3
  module Heroku
4
- autoload :Anvil, 'dpl/provider/heroku/anvil'
5
- autoload :Git, 'dpl/provider/heroku/git'
6
- autoload :GitDeployKey, 'dpl/provider/heroku/git_deploy_key'
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.549.1
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-01 00:00:00.000000000 Z
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