hanzo 0.3 → 0.3.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 +4 -4
- data/.rspec +1 -0
- data/.travis.yml +7 -0
- data/README.md +3 -2
- data/Rakefile +8 -0
- data/lib/hanzo/modules/config.rb +1 -1
- data/lib/hanzo/modules/deploy.rb +5 -1
- data/lib/hanzo/modules/installers/labs.rb +1 -1
- data/lib/hanzo/version.rb +1 -1
- data/spec/cli/config_spec.rb +51 -0
- data/spec/cli/deploy_spec.rb +60 -0
- data/spec/cli/install_spec.rb +66 -0
- data/spec/spec_helper.rb +6 -0
- metadata +13 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4bf04575cd4cf4815cd76c2f2d8010b4b228cdc9
|
4
|
+
data.tar.gz: b6aaa35696f469f440e3f59e672c0fb3b75c1bab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d579c2eed73dd8e1712c2ca0675f8c48f7c19d5c8d73f963a86b8150c0f211a4a5d63e5cbbda7bf905326e7a486db367315f492ff0e8475ef38f1279f0e31fc
|
7
|
+
data.tar.gz: 9ac23d25ffb74114f85857944122d11760ad3c6f2963b15b57eb91146820c9f61a4b4b04074e70b7e664dd398f29137b4a5caf4e6a8cfd3dad38f17915df2d2e
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
<br /><br />
|
8
8
|
<a href="https://rubygems.org/gems/hanzo"><img src="https://badge.fury.io/rb/hanzo.png" /></a>
|
9
9
|
<a href="https://codeclimate.com/github/mirego/hanzo"><img src="https://codeclimate.com/github/mirego/hanzo.png" /></a>
|
10
|
+
<a href="https://travis-ci.org/mirego/hanzo"><img src="https://travis-ci.org/mirego/hanzo.png?branch=master" /></a>
|
10
11
|
</p>
|
11
12
|
|
12
13
|
---
|
@@ -73,6 +74,6 @@ Heroku labs feature for all your environments.
|
|
73
74
|
|
74
75
|
## About Mirego
|
75
76
|
|
76
|
-
Mirego is a team of passionate people who believe that work is a place where you can innovate and have fun. We
|
77
|
+
[Mirego](http://mirego.com) is a team of passionate people who believe that work is a place where you can innovate and have fun. We're a team of [talented people](http://life.mirego.com) who imagine and build beautiful Web and mobile applications. We come together to share ideas and [change the world](http://mirego.org).
|
77
78
|
|
78
|
-
We also love
|
79
|
+
We also [love open-source software](http://open.mirego.com) and we try to give back to the community as much as we can.
|
data/Rakefile
CHANGED
data/lib/hanzo/modules/config.rb
CHANGED
data/lib/hanzo/modules/deploy.rb
CHANGED
@@ -39,7 +39,11 @@ module Hanzo
|
|
39
39
|
def run_migrations
|
40
40
|
if Dir.exists?('db/migrate')
|
41
41
|
migration = Hanzo.agree('Run migrations?')
|
42
|
-
|
42
|
+
|
43
|
+
if migration
|
44
|
+
Hanzo.run "heroku run rake db:migrate --remote #{@env}"
|
45
|
+
Hanzo.run "heroku ps:restart --remote #{@env}"
|
46
|
+
end
|
43
47
|
end
|
44
48
|
end
|
45
49
|
end
|
@@ -7,7 +7,7 @@ module Hanzo
|
|
7
7
|
Hanzo::Heroku.available_labs.each do |name, description|
|
8
8
|
if Hanzo.agree("Add #{name}?")
|
9
9
|
Hanzo::Installers::Remotes.environments.each_pair do |env, app|
|
10
|
-
Hanzo::Installers::Labs.enable(env,
|
10
|
+
Hanzo::Installers::Labs.enable(env, name)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
data/lib/hanzo/version.rb
CHANGED
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hanzo::CLI do
|
4
|
+
describe :config do
|
5
|
+
let(:config!) { Hanzo::CLI.new(['config', action]) }
|
6
|
+
let(:heroku_remotes) { { 'production' => 'heroku-app-production', 'qa' => 'heroku-app-qa' } }
|
7
|
+
|
8
|
+
before { Hanzo::Installers::Remotes.stub(:environments).and_return(heroku_remotes) }
|
9
|
+
|
10
|
+
describe :compare do
|
11
|
+
let(:action) { 'compare' }
|
12
|
+
let(:config_cmd) { 'heroku config' }
|
13
|
+
|
14
|
+
let(:fetch_environment_title) { 'Fetching environment variables' }
|
15
|
+
let(:compare_environment_title) { 'Comparing environment variables' }
|
16
|
+
|
17
|
+
let(:environment_one_name) { 'production' }
|
18
|
+
let(:environment_two_name) { 'qa' }
|
19
|
+
let(:environment_one) {
|
20
|
+
<<-RUBY
|
21
|
+
SMTP_PORT: 25
|
22
|
+
SMTP_PASSWORD: hanzo
|
23
|
+
SMTP_HOST: localhost
|
24
|
+
RUBY
|
25
|
+
}
|
26
|
+
let(:environment_two) {
|
27
|
+
<<-RUBY
|
28
|
+
SMTP_PORT: 25
|
29
|
+
SMTP_USERNAME: hanzo
|
30
|
+
RUBY
|
31
|
+
}
|
32
|
+
|
33
|
+
before do
|
34
|
+
Hanzo.should_receive(:title).with(fetch_environment_title)
|
35
|
+
Hanzo.should_receive(:title).with(compare_environment_title)
|
36
|
+
|
37
|
+
Hanzo.should_receive(:run).with("#{config_cmd} -r #{environment_one_name}").and_return(environment_one)
|
38
|
+
Hanzo.should_receive(:run).with("#{config_cmd} -r #{environment_two_name}").and_return(environment_two)
|
39
|
+
|
40
|
+
Hanzo.should_receive(:print).with("Missing variables in #{environment_one_name}", :yellow)
|
41
|
+
Hanzo.should_receive(:print).with(['- SMTP_USERNAME'])
|
42
|
+
Hanzo.should_receive(:print).with("Missing variables in #{environment_two_name}", :yellow)
|
43
|
+
Hanzo.should_receive(:print).with(['- SMTP_PASSWORD', '- SMTP_HOST'])
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should install specified labs for each environment' do
|
47
|
+
config!
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hanzo::CLI do
|
4
|
+
describe :deploy do
|
5
|
+
let(:env) { 'production' }
|
6
|
+
let(:branch) { '1.0.0' }
|
7
|
+
let(:deploy!) { Hanzo::CLI.new(['deploy', env]) }
|
8
|
+
let(:migrations_exist) { false }
|
9
|
+
let(:heroku_remotes) { { 'production' => 'heroku-app-production' } }
|
10
|
+
let(:migration_dir) { 'db/migrate' }
|
11
|
+
|
12
|
+
let(:migration_question) { 'Run migrations?' }
|
13
|
+
let(:deploy_question) { "Branch to deploy in #{env}:" }
|
14
|
+
|
15
|
+
let(:migration_cmd) { "heroku run rake db:migrate --remote #{env}" }
|
16
|
+
let(:restart_cmd) { "heroku ps:restart --remote #{env}" }
|
17
|
+
let(:deploy_cmd) { "git push -f #{env} #{branch}:master" }
|
18
|
+
|
19
|
+
before do
|
20
|
+
Dir.should_receive(:exists?).with(migration_dir).and_return(migrations_exist)
|
21
|
+
Hanzo::Installers::Remotes.stub(:environments).and_return(heroku_remotes)
|
22
|
+
Hanzo.should_receive(:ask).with(deploy_question).and_return(branch)
|
23
|
+
Hanzo.should_receive(:run).with(deploy_cmd).once
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'without migration' do
|
27
|
+
it 'should git push to heroku upstream' do
|
28
|
+
deploy!
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'with migrations' do
|
33
|
+
let(:migrations_exist) { true }
|
34
|
+
|
35
|
+
context 'that should be ran' do
|
36
|
+
before do
|
37
|
+
Hanzo.should_receive(:agree).with(migration_question).and_return(true)
|
38
|
+
Hanzo.should_receive(:run).with(migration_cmd)
|
39
|
+
Hanzo.should_receive(:run).with(restart_cmd)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should run migrations' do
|
43
|
+
deploy!
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'that should not be ran' do
|
48
|
+
before do
|
49
|
+
Hanzo.should_receive(:agree).with(migration_question).and_return(false)
|
50
|
+
Hanzo.should_not_receive(:run).with(migration_cmd)
|
51
|
+
Hanzo.should_not_receive(:run).with(restart_cmd)
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'should not run migrations' do
|
55
|
+
deploy!
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hanzo::CLI do
|
4
|
+
describe :install do
|
5
|
+
let(:install!) { Hanzo::CLI.new(['install', type]) }
|
6
|
+
let(:heroku_remotes) { { 'production' => 'heroku-app-production', 'qa' => 'heroku-app-qa' } }
|
7
|
+
|
8
|
+
describe :labs do
|
9
|
+
let(:type) { 'labs' }
|
10
|
+
let(:labs_title) { 'Activating Heroku Labs' }
|
11
|
+
let(:available_labs) { { 'user-env-compile' => 'Description' } }
|
12
|
+
|
13
|
+
let(:enable_labs_cmd) { "heroku labs:enable" }
|
14
|
+
let(:enable_labs_info) { '- Enabled for' }
|
15
|
+
|
16
|
+
before do
|
17
|
+
Hanzo::Installers::Remotes.stub(:environments).and_return(heroku_remotes)
|
18
|
+
Hanzo::Heroku.stub(:available_labs).and_return(available_labs)
|
19
|
+
Hanzo.should_receive(:title).with(labs_title)
|
20
|
+
|
21
|
+
available_labs.each do |name, description|
|
22
|
+
Hanzo.should_receive(:agree).with("Add #{name}?").and_return(true)
|
23
|
+
|
24
|
+
heroku_remotes.each do |env, app|
|
25
|
+
Hanzo.should_receive(:run).with("#{enable_labs_cmd} #{name} --remote #{env}")
|
26
|
+
Hanzo.should_receive(:print).with("#{enable_labs_info} #{env}")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should install specified labs for each environment' do
|
32
|
+
install!
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe :remotes do
|
37
|
+
let(:type) { 'remotes' }
|
38
|
+
let(:create_remotes_title) { 'Creating git remotes' }
|
39
|
+
|
40
|
+
before { Hanzo.should_receive(:title).with(create_remotes_title) }
|
41
|
+
|
42
|
+
context '.heroku-remotes exists' do
|
43
|
+
before do
|
44
|
+
Hanzo::Installers::Remotes.stub(:environments).and_return(heroku_remotes)
|
45
|
+
heroku_remotes.each do |env, app|
|
46
|
+
Hanzo.should_receive(:print).with("Adding #{env}")
|
47
|
+
Hanzo.should_receive(:run).with("git remote rm #{env} 2>&1 > /dev/null")
|
48
|
+
Hanzo.should_receive(:run).with("git remote add #{env} git@heroku.com:#{app}.git")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should install git remotes' do
|
53
|
+
install!
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context '.heroku-remotes file is missing' do
|
58
|
+
before { Hanzo.should_receive(:print).twice }
|
59
|
+
|
60
|
+
it 'should display error message' do
|
61
|
+
lambda { install! }.should raise_error SystemExit
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hanzo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Garneau
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -75,6 +75,8 @@ extensions: []
|
|
75
75
|
extra_rdoc_files: []
|
76
76
|
files:
|
77
77
|
- .gitignore
|
78
|
+
- .rspec
|
79
|
+
- .travis.yml
|
78
80
|
- Gemfile
|
79
81
|
- LICENSE.md
|
80
82
|
- README.md
|
@@ -91,6 +93,10 @@ files:
|
|
91
93
|
- lib/hanzo/modules/installers/labs.rb
|
92
94
|
- lib/hanzo/modules/installers/remotes.rb
|
93
95
|
- lib/hanzo/version.rb
|
96
|
+
- spec/cli/config_spec.rb
|
97
|
+
- spec/cli/deploy_spec.rb
|
98
|
+
- spec/cli/install_spec.rb
|
99
|
+
- spec/spec_helper.rb
|
94
100
|
homepage: https://github.com/mirego/hanzo
|
95
101
|
licenses:
|
96
102
|
- BSD 3-Clause
|
@@ -115,4 +121,8 @@ rubygems_version: 2.1.0
|
|
115
121
|
signing_key:
|
116
122
|
specification_version: 4
|
117
123
|
summary: Hanzo is a tool to handle deployments in multiple environments on Heroku.
|
118
|
-
test_files:
|
124
|
+
test_files:
|
125
|
+
- spec/cli/config_spec.rb
|
126
|
+
- spec/cli/deploy_spec.rb
|
127
|
+
- spec/cli/install_spec.rb
|
128
|
+
- spec/spec_helper.rb
|