Class: DPL::Provider::Heroku::API

Inherits:
Generic show all
Defined in:
lib/dpl/provider/heroku/api.rb

Instance Attribute Summary

Attributes inherited from DPL::Provider

#context, #options

Instance Method Summary collapse

Methods inherited from Generic

#api, #api_options, #check_app, #check_auth, #deploy, #info, #needs_key?, #restart, #run, #user

Methods inherited from DPL::Provider

apt_get, #check_app, #cleanup, #commit_msg, context, #create_key, #deploy, #detect_encoding?, #encoding_for, #error, experimental, #initialize, #log, #needs_key?, new, npm_g, #option, pip, requires, #run, #setup_git_credentials, #setup_git_ssh, #sha, shell, #uncleanup, #user_agent, #warn

Constructor Details

This class inherits a constructor from DPL::Provider

Instance Method Details

#archive_fileObject



14
15
16
# File 'lib/dpl/provider/heroku/api.rb', line 14

def archive_file
  Shellwords.escape("#{context.env['HOME']}/.dpl.#{option(:app)}.tgz")
end

#get_urlObject



35
36
37
# File 'lib/dpl/provider/heroku/api.rb', line 35

def get_url
  source_blob.fetch("get_url")
end

#pack_archiveObject



18
19
20
21
# File 'lib/dpl/provider/heroku/api.rb', line 18

def pack_archive
  log "creating application archive"
  context.shell "tar -zcf #{archive_file} ."
end

#post(subpath, body = nil, options = {}) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/dpl/provider/heroku/api.rb', line 51

def post(subpath, body = nil, options = {})
  options = {
    method: :post,
    path: "/apps/#{option(:app)}/#{subpath}",
    headers: { "Accept" => "application/vnd.heroku+json; version=edge" },
    expects: [200, 201]
  }.merge(options)

  if body
    options[:body]                    = JSON.dump(body)
    options[:headers]['Content-Type'] = 'application/json'
  end

  api.request(options).body
end

#push_appObject



8
9
10
11
12
# File 'lib/dpl/provider/heroku/api.rb', line 8

def push_app
  pack_archive
  upload_archive
  trigger_build
end

#put_urlObject



39
40
41
# File 'lib/dpl/provider/heroku/api.rb', line 39

def put_url
  source_blob.fetch("put_url")
end

#source_blobObject



43
44
45
# File 'lib/dpl/provider/heroku/api.rb', line 43

def source_blob
  @source_blog ||= post(:sources).fetch("source_blob")
end

#trigger_buildObject



28
29
30
31
32
33
# File 'lib/dpl/provider/heroku/api.rb', line 28

def trigger_build
  log "triggering new deployment"
  response   = post(:builds, source_blob: { url: get_url, version: version })
  stream_url = response.fetch('stream_url')
  context.shell "curl #{Shellwords.escape(stream_url)}"
end

#upload_archiveObject



23
24
25
26
# File 'lib/dpl/provider/heroku/api.rb', line 23

def upload_archive
  log "uploading application archive"
  context.shell "curl #{Shellwords.escape(put_url)} -X PUT -H 'Content-Type:' --data-binary @#{archive_file}"
end

#versionObject



47
48
49
# File 'lib/dpl/provider/heroku/api.rb', line 47

def version
  @version ||= options[:version] || context.env['TRAVIS_COMMIT'] || `git rev-parse HEAD`.strip
end