dpl 1.6.7.travis.549.1 → 1.6.7.travis.552.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 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