heroku_deployer 0.6.3 → 0.7
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/lib/amitree/heroku_client.rb +18 -10
- data/lib/amitree/heroku_deployer.rb +3 -3
- metadata +5 -6
- data/lib/heroku/new_api.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2b37db385331039d22c8a8606c068690774e52e3
|
4
|
+
data.tar.gz: d83ad7799d516a0a07aecbc2f3d70507c833b59b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 577e8d776958ab6e9e02c54c68b12f14be2d398fb0b8b1c331a40aea665e8d77571b353ddad35b6f430feaeeacc527e9f2ab296ac645fe5b3dd87daa294c418e
|
7
|
+
data.tar.gz: 018b0dc7afd3c5cd3a67900a51e4aaa40c5fc60c0d229756307d8eaf9a0f160f2245bfaf1aca838a28c2e33b0e1f60a7441f660ec85cc5e9671ec16c5a81198a
|
@@ -1,5 +1,4 @@
|
|
1
|
-
require '
|
2
|
-
require 'heroku/new_api'
|
1
|
+
require 'platform-api'
|
3
2
|
require 'rendezvous'
|
4
3
|
|
5
4
|
module Amitree
|
@@ -11,14 +10,21 @@ module Amitree
|
|
11
10
|
end
|
12
11
|
|
13
12
|
def initialize(api_key, staging_app_name, production_app_name)
|
14
|
-
@heroku =
|
15
|
-
|
16
|
-
@heroku_new = Heroku::NewAPI.new(:api_key => api_key)
|
13
|
+
@heroku = PlatformAPI.connect(api_key)
|
14
|
+
@heroku_no_cache = PlatformAPI.connect(api_key, cache: Moneta.new(:Null))
|
17
15
|
@staging_app_name = staging_app_name
|
18
16
|
@production_app_name = production_app_name
|
19
17
|
@promoted_release_regexp = /Promote #{@staging_app_name} (v\d+)/
|
20
18
|
end
|
21
19
|
|
20
|
+
def get_staging_commit(release)
|
21
|
+
@heroku.slug.info(@staging_app_name, release['slug']['id'])['commit']
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_production_commit(release)
|
25
|
+
@heroku.slug.info(@production_app_name, release['slug']['id'])['commit']
|
26
|
+
end
|
27
|
+
|
22
28
|
def current_production_release
|
23
29
|
get_releases(@production_app_name)[-1]
|
24
30
|
end
|
@@ -51,7 +57,7 @@ module Amitree
|
|
51
57
|
slug = staging_slug(staging_release_name)
|
52
58
|
puts "Deploying slug to production: #{slug}"
|
53
59
|
unless options[:dry_run]
|
54
|
-
@
|
60
|
+
@heroku.release.create(@production_app_name, {'slug' => slug, 'description' => "Promote #{@staging_app_name} #{staging_release_name}"})
|
55
61
|
db_migrate_on_production(options)
|
56
62
|
end
|
57
63
|
end
|
@@ -60,8 +66,8 @@ module Amitree
|
|
60
66
|
unless staging_release_name =~ /\Av(\d+)\z/
|
61
67
|
raise Error.new "Unexpected release name: #{staging_release_name}"
|
62
68
|
end
|
63
|
-
result = @
|
64
|
-
result
|
69
|
+
result = @heroku.release.info(@staging_app_name, $1)
|
70
|
+
result['slug']['id'] || raise(Error.new("Could not find slug in API response: #{result.inspect}"))
|
65
71
|
end
|
66
72
|
|
67
73
|
def db_migrate_on_production(options={}, attempts=0)
|
@@ -80,12 +86,14 @@ module Amitree
|
|
80
86
|
|
81
87
|
private
|
82
88
|
def get_releases(app_name)
|
83
|
-
|
89
|
+
# Use our own cache because of https://github.com/heroku/platform-api/issues/16
|
90
|
+
@release_cache ||= {}
|
91
|
+
@release_cache[app_name] ||= @heroku_no_cache.release.list(app_name).to_a
|
84
92
|
end
|
85
93
|
|
86
94
|
def heroku_run(app_name, command)
|
87
95
|
puts "Running command on #{app_name}: #{command}..."
|
88
|
-
data = @heroku.
|
96
|
+
data = @heroku.dyno.create(app_name, { command: command, attach: true })
|
89
97
|
read, write = IO.pipe
|
90
98
|
Rendezvous.start(url: data['rendezvous_url'], input: read)
|
91
99
|
read.close
|
@@ -52,14 +52,14 @@ module Amitree
|
|
52
52
|
result.production_promoted_from_staging = @heroku.promoted_from_staging?(result.production_release)
|
53
53
|
staging_releases = @heroku.staging_releases_since(@heroku.staging_release_name(result.production_release))
|
54
54
|
|
55
|
-
prod_commit = result.production_release
|
56
|
-
puts "Production release is #{
|
55
|
+
prod_commit = @heroku.get_production_commit(result.production_release)
|
56
|
+
puts "Production release is #{prod_commit_full}" if options[:verbose]
|
57
57
|
|
58
58
|
result.stories = stories_worked_on_between(prod_commit, 'HEAD')
|
59
59
|
all_stories = Hash[result.stories.map{|story| [story.id, story]}]
|
60
60
|
|
61
61
|
staging_releases.reverse.each do |staging_release|
|
62
|
-
staging_commit = staging_release
|
62
|
+
staging_commit = @heroku.get_staging_commit(staging_release)
|
63
63
|
stories = all_stories.values_at(*@git.stories_worked_on_between(prod_commit, staging_commit)).compact
|
64
64
|
story_ids = stories.map(&:id)
|
65
65
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: heroku_deployer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.7'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Wargnier
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-09-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -40,19 +40,19 @@ dependencies:
|
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: 2.7.1
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
43
|
+
name: platform-api
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - '='
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: 0.
|
48
|
+
version: 0.2.0
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - '='
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: 0.
|
55
|
+
version: 0.2.0
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: rendezvous
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -91,7 +91,6 @@ files:
|
|
91
91
|
- lib/amitree/git_client.rb
|
92
92
|
- lib/amitree/heroku_client.rb
|
93
93
|
- lib/amitree/heroku_deployer.rb
|
94
|
-
- lib/heroku/new_api.rb
|
95
94
|
homepage: http://rubygems.org/gems/heroku_deployer
|
96
95
|
licenses:
|
97
96
|
- MIT
|
data/lib/heroku/new_api.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'multi_json'
|
2
|
-
|
3
|
-
module Heroku
|
4
|
-
class NewAPI < API
|
5
|
-
def initialize(options={})
|
6
|
-
options[:headers] ||= {}
|
7
|
-
options[:headers]['Accept'] = 'application/vnd.heroku+json; version=3'
|
8
|
-
super(options)
|
9
|
-
end
|
10
|
-
|
11
|
-
# POST /apps/:app/releases/:release
|
12
|
-
def post_release(app, query={})
|
13
|
-
request(
|
14
|
-
:expects => 201,
|
15
|
-
:method => :post,
|
16
|
-
:path => "/apps/#{app}/releases",
|
17
|
-
:body => MultiJson.dump(query)
|
18
|
-
)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|