heroploy 0.0.7.beta.2 → 0.0.7.beta.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c7b255a28b5b078f04004da6f949e9154b8e7bd0
4
- data.tar.gz: 6a223d662bae7051ff51761164b9a76071509128
3
+ metadata.gz: f6103a1641de18d652d573743069402de4e24791
4
+ data.tar.gz: b742b6eb75f47e99883975cbb3bd39413e044ade
5
5
  SHA512:
6
- metadata.gz: 3eef148a724b49d55dda13cc7b8804e863e15c48e0779e5ee2189842a999341b5a7bb6e65bc2c8137682ff84a6f141130f34e4aad5dcd9f0cc1fad651aba7c5a
7
- data.tar.gz: c3402cd9a14efa2988d6279a30e543d91ca3eb8860f1c8a55497024898846eaa9efd776d7d1b1af8996becf7bc573003d8df1bd23f2b11e66e5419c9cfc05093
6
+ metadata.gz: 4cacb1cde260230ac3c1b1c37d281aeeebe1f4d237194bfd3ee7ea3e0677153812a8f16a79e3b1d0579f0d45e208161c0ecc9a872ff7810181af9a51552dedba
7
+ data.tar.gz: 4f60d0b01c9ac2d5374c99ae06a54be7792011a97bd58868b3c965f54638386b026d97235fa0bdee38319e9d92b51158de320d13ccca054f20512a6da482f227
data/.travis.yml CHANGED
@@ -2,5 +2,5 @@ language: ruby
2
2
  rvm:
3
3
  - 2.0.0
4
4
  script:
5
- - bundle exec rake spec
5
+ - bundle exec rake cucumber spec
6
6
 
data/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  [![Code Climate](https://codeclimate.com/github/jbrunton/heroploy.png)](https://codeclimate.com/github/jbrunton/heroploy)
6
6
  [![Coverage Status](https://coveralls.io/repos/jbrunton/heroploy/badge.png?branch=master)](https://coveralls.io/r/jbrunton/heroploy?branch=master)
7
7
 
8
- A few helpful rake tasks to manage deploying Rails apps to development, staging and production Heroku servers.
8
+ A few helpful rake tasks to automate configuring and deploying to Heroku apps.
9
9
 
10
10
  ## Installation
11
11
 
@@ -23,7 +23,7 @@ Or install it yourself as:
23
23
 
24
24
  ## Usage
25
25
 
26
- **See [Configuring Heroploy](https://github.com/jbrunton/heroploy/wiki/Configuring-Heroploy) for a more detailed description of the options available.**
26
+ **See the [documentation](https://github.com/jbrunton/heroploy/wiki/) for a more detailed description of the options available for configuring and deploying with Heroploy.**
27
27
 
28
28
 
29
29
  Add a ```heroploy.yml``` file to your application's config directory which describes the Heroku apps you will deploy to, and the checks you would like when deploying to each.
data/Rakefile CHANGED
@@ -2,3 +2,9 @@ require 'bundler/gem_tasks'
2
2
 
3
3
  require 'rspec/core/rake_task'
4
4
  RSpec::Core::RakeTask.new(:spec)
5
+
6
+ require 'cucumber'
7
+ require 'cucumber/rake/task'
8
+ Cucumber::Rake::Task.new(:cucumber) do |t|
9
+ t.cucumber_opts = "features --format pretty"
10
+ end
@@ -0,0 +1,33 @@
1
+ Feature: Deployment checks
2
+
3
+ Scenario: Failing build check
4
+
5
+ Given a staging environment
6
+ When the travis build is failing
7
+ And I have "master" checked out
8
+ And I run "staging:deploy"
9
+ Then the task should fail with "Failing Travis build for branch master"
10
+
11
+ Scenario: Failing branch check
12
+
13
+ Given a staging environment
14
+ When I have "my-development-branch" checked out
15
+ And I run "staging:deploy"
16
+ Then the task should fail with "Cannot deploy branch my-development-branch to staging"
17
+
18
+ Scenario: Failing remote check
19
+
20
+ Given a staging environment
21
+ When I have "master" checked out
22
+ And my branch is ahead of origin
23
+ And I run "staging:deploy"
24
+ Then the task should fail with "Branch master is behind origin/master"
25
+
26
+ Scenario: Failing staged check
27
+
28
+ Given a production environment
29
+ And a staging environment
30
+ When I have "master" checked out
31
+ And my branch is ahead of staging
32
+ And I run "production:deploy"
33
+ Then the task should fail with "Changes not yet staged on staging"
@@ -0,0 +1,25 @@
1
+ Feature: Config variables
2
+
3
+ Scenario: Set config variables
4
+
5
+ Given a development environment with variables:
6
+ """
7
+ foo: bar
8
+ """
9
+ When I run "development:config"
10
+ Then heroploy should execute "heroku config:set foo=bar --app my-development-app"
11
+
12
+ Scenario: Set shared config variables
13
+
14
+ Given a development environment with variables:
15
+ """
16
+ foo: bar
17
+ """
18
+ And a shared environment with variables:
19
+ """
20
+ fizz: buzz
21
+ """
22
+ When I run "development:config"
23
+ Then heroploy should execute "heroku config:set fizz=buzz foo=bar --app my-development-app"
24
+
25
+
@@ -0,0 +1,28 @@
1
+ Feature: Database tasks
2
+
3
+ Scenario: db:migrate
4
+
5
+ Given a production environment
6
+ When I run "production:db:migrate"
7
+ Then heroploy should execute "heroku run rake db:migrate --app my-production-app"
8
+
9
+ Scenario: db:reset
10
+
11
+ Given a production environment
12
+ When I run "production:db:reset"
13
+ Then heroploy should execute "heroku pg:reset DATABASE --confirm my-production-app --app my-production-app"
14
+
15
+ Scenario: db:seed
16
+
17
+ Given a production environment
18
+ When I run "production:db:seed"
19
+ Then heroploy should execute "heroku run rake db:seed --app my-production-app"
20
+
21
+ Scenario: db:recreate
22
+
23
+ Given a production environment
24
+ When I run "production:db:recreate"
25
+ Then heroploy should invoke "production:db:reset"
26
+ And heroploy should invoke "production:db:migrate"
27
+ And heroploy should invoke "production:db:seed"
28
+
@@ -0,0 +1,11 @@
1
+ Feature: Deployment tasks
2
+
3
+ Scenario: Successful deployment
4
+
5
+ Given a development environment
6
+ When I run "development:deploy"
7
+ Then heroploy should invoke "development:check:all"
8
+ And heroploy should invoke "development:push"
9
+ And heroploy should invoke "development:config"
10
+ And heroploy should invoke "development:db:migrate"
11
+ And heroploy should invoke "development:tag"
@@ -0,0 +1,10 @@
1
+ Feature: Local environment
2
+
3
+ Scenario: Default run script
4
+
5
+ Given a local environment with variables:
6
+ """
7
+ foo: bar
8
+ """
9
+ When I run "local:run"
10
+ Then heroploy should execute "foo=bar bundle exec rails s"
@@ -0,0 +1,98 @@
1
+ def define_environment(env_type)
2
+ @environments ||= []
3
+ environment = build(:environment, env_type.to_sym)
4
+ @environments << environment
5
+ environment
6
+ end
7
+
8
+ Given(/^a (local|development|staging|production) environment$/) do |env_type|
9
+ define_environment(env_type)
10
+ end
11
+
12
+ Given(/^a (local|development|staging|production) environment with variables:$/) do |env_type, variables|
13
+ environment = define_environment(env_type)
14
+ environment.variables = YAML::load(variables) unless variables.nil?
15
+ end
16
+
17
+ Given(/^a shared environment with variables:$/) do |variables|
18
+ @shared_env = build(:shared_env, variables: YAML::load(variables))
19
+ end
20
+
21
+ def init_tasks
22
+ @shared_env ||= build(:shared_env)
23
+ deployment_config = build(:deployment_config, environments: @environments, shared_env: @shared_env)
24
+ Heroploy::Tasks::DeployTaskLib.new(deployment_config)
25
+ end
26
+
27
+ def stub_tasks
28
+ Rake::Task.tasks.each do |task|
29
+ allow(task).to receive(:execute).and_call_original
30
+ end
31
+ end
32
+
33
+ def stub_travis
34
+ @travis_repo = build(:travis_repo)
35
+ Travis::Repository.stub(:find).and_return(@travis_repo)
36
+
37
+ @travis_build ||= build(:travis_build, :passed)
38
+ allow(@travis_repo).to receive(:branch).and_return(@travis_build)
39
+ end
40
+
41
+ When(/^I run "(.*?)"$/) do |task_name|
42
+ init_tasks
43
+ stub_travis
44
+ stub_tasks
45
+
46
+ begin
47
+ Rake::Task[task_name].invoke
48
+ rescue => error
49
+ @error = error
50
+ end
51
+ end
52
+
53
+ Then(/^heroploy should execute "(.*?)"$/) do |command|
54
+ expect(Heroploy::Shell).
55
+ to have_received(:exec).
56
+ with(command)
57
+ end
58
+
59
+ Then(/^heroploy should invoke "(.*?)"$/) do |task_name|
60
+ expect(Rake::Task[task_name]).
61
+ to have_received(:execute)
62
+ end
63
+
64
+ When(/^I have "(.*?)" checked out$/) do |branch_name|
65
+ @branch_name = branch_name
66
+ allow_any_instance_of(Heroploy::Tasks::CheckTaskLib).
67
+ to receive(:current_branch).
68
+ and_return(branch_name)
69
+ end
70
+
71
+ Given(/^the travis build is failing$/) do
72
+ @travis_build = build(:travis_build, :failed)
73
+ end
74
+
75
+ Then(/^the task should fail with "(.*?)"$/) do |expected_error|
76
+ unless @error.to_s == expected_error
77
+ if @error.nil?
78
+ raise "Expected failure with message '#{expected_error}' while executing task, but execution was successful"
79
+ else
80
+ puts "Expected failure with message '#{expected_error}' while executing task, but encountered:"
81
+ raise @error
82
+ end
83
+ end
84
+ end
85
+
86
+ When(/^my branch is ahead of origin$/) do
87
+ allow_any_instance_of(Heroploy::Tasks::CheckTaskLib).
88
+ to receive(:git_remote_behind?).
89
+ with('origin', @branch_name).
90
+ and_return(true)
91
+ end
92
+
93
+ When(/^my branch is ahead of staging$/) do
94
+ allow_any_instance_of(Heroploy::Tasks::CheckTaskLib).
95
+ to receive(:git_remote_behind?).
96
+ with('staging', 'master', @branch_name).
97
+ and_return(true)
98
+ end
@@ -0,0 +1,30 @@
1
+ require 'heroploy'
2
+ require 'factory_girl'
3
+ require 'travis'
4
+
5
+ require 'cucumber/rspec/doubles'
6
+
7
+ require 'heroploy/config/deployment_config'
8
+ require 'heroploy/tasks/deploy_task_lib'
9
+
10
+ FactoryGirl.find_definitions
11
+
12
+ World(FactoryGirl::Syntax::Methods)
13
+
14
+ Before do
15
+ allow(Heroploy::Shell).to receive(:eval).and_return("")
16
+ allow(Heroploy::Shell).to receive(:exec)
17
+
18
+ allow_any_instance_of(Heroploy::Tasks::CheckTaskLib).to receive(:git_remote_exists?).
19
+ and_return(true)
20
+
21
+ allow_any_instance_of(Heroploy::Tasks::CheckTaskLib).to receive(:git_remote_has_branch?).
22
+ and_return(true)
23
+
24
+ allow_any_instance_of(Heroploy::Tasks::CheckTaskLib).to receive(:git_remote_behind?).
25
+ and_return(false)
26
+
27
+ Rake::Task.clear
28
+ end
29
+
30
+
data/heroploy.gemspec CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "rake"
24
24
  spec.add_development_dependency "rails"
25
25
  spec.add_development_dependency "rspec"
26
+ spec.add_development_dependency "cucumber"
26
27
  spec.add_development_dependency "factory_girl"
27
28
  spec.add_development_dependency "generator_spec"
28
29
  spec.add_development_dependency "coveralls"
@@ -13,15 +13,23 @@ module Heroploy
13
13
  heroku_exec("run #{cmd}", app_name)
14
14
  end
15
15
 
16
- def heroku_migrate(app_name)
17
- heroku_run("rake db:migrate", app_name)
18
- end
19
-
20
16
  def heroku_config_set(shared_vars, env_vars, app_name)
21
17
  merged_vars = shared_vars.merge(env_vars)
22
18
  vars_string = merged_vars.collect.map{|key,value| "#{key}=#{value}"}.join(" ")
23
19
  heroku_exec("config:set #{vars_string}", app_name)
24
20
  end
21
+
22
+ def heroku_db_migrate(app_name)
23
+ heroku_run("rake db:migrate", app_name)
24
+ end
25
+
26
+ def heroku_db_reset(app_name)
27
+ heroku_exec("pg:reset DATABASE --confirm #{app_name}", app_name)
28
+ end
29
+
30
+ def heroku_db_seed(app_name)
31
+ heroku_run("rake db:seed", app_name)
32
+ end
25
33
  end
26
34
  end
27
35
  end
@@ -0,0 +1,15 @@
1
+ require 'heroploy/commands/shell'
2
+
3
+ module Heroploy
4
+ module Commands
5
+ module Rails
6
+ def rails_server(shared_vars, env_vars)
7
+ merged_vars = shared_vars.merge(env_vars)
8
+ vars_string = merged_vars.collect.map{|key,value| "#{key}=#{value}"}.join(" ")
9
+ cmd = "bundle exec rails s"
10
+ cmd = "#{vars_string} #{cmd}" unless vars_string.empty?
11
+ Shell.exec cmd
12
+ end
13
+ end
14
+ end
15
+ end
@@ -3,6 +3,7 @@ require 'rake/tasklib'
3
3
  require 'heroploy/commands/heroku'
4
4
  require 'heroploy/commands/git'
5
5
  require 'heroploy/commands/checks'
6
+ require 'heroploy/commands/rails'
6
7
 
7
8
  require 'heroploy/tasks/check_task_lib'
8
9
 
@@ -14,6 +15,7 @@ module Heroploy
14
15
  include Commands::Git
15
16
  include Commands::Heroku
16
17
  include Commands::Checks
18
+ include Commands::Rails
17
19
 
18
20
  attr_accessor :deployment_config
19
21
  attr_accessor :env
@@ -26,9 +28,20 @@ module Heroploy
26
28
 
27
29
  def define
28
30
  namespace env.name do
29
- define_check_tasks
30
- define_git_tasks
31
- define_heroku_tasks
31
+ if env.name == 'local'
32
+ define_run_task
33
+ else
34
+ define_check_tasks
35
+ define_git_tasks
36
+ define_db_tasks
37
+ define_heroku_tasks
38
+ end
39
+ end
40
+ end
41
+
42
+ def define_run_task
43
+ task :run do
44
+ rails_server(deployment_config.shared_env.variables, env.variables)
32
45
  end
33
46
  end
34
47
 
@@ -53,20 +66,37 @@ module Heroploy
53
66
  end
54
67
  end
55
68
  end
69
+
70
+ def define_db_tasks
71
+ namespace :db do
72
+ desc "run database migrations on #{env.name}"
73
+ task :migrate do
74
+ heroku_db_migrate(env.app)
75
+ end
76
+
77
+ desc "reset the database on #{env.name}"
78
+ task :reset do
79
+ heroku_db_reset(env.app)
80
+ end
81
+
82
+ desc "seed the database on #{env.name}"
83
+ task :seed do
84
+ heroku_db_seed(env.app)
85
+ end
86
+
87
+ desc "reset, migrate and seed the database"
88
+ task :recreate => [:reset, :migrate, :seed]
89
+ end
90
+ end
56
91
 
57
92
  def define_heroku_tasks
58
- desc "run database migrations on #{env.name}"
59
- task :migrate do
60
- heroku_migrate(env.app)
61
- end
62
-
63
93
  desc "set config variables"
64
94
  task :config => :load_remote_configs do
65
95
  heroku_config_set(deployment_config.shared_env.variables, env.variables, env.app)
66
96
  end
67
97
 
68
98
  desc "deploy to #{env.name}"
69
- task :deploy => ['check:all', :push, :config, :migrate, :tag]
99
+ task :deploy => ['check:all', :push, :config, 'db:migrate', :tag]
70
100
  end
71
101
  end
72
102
  end
@@ -1,3 +1,3 @@
1
1
  module Heroploy
2
- VERSION = "0.0.7.beta.2"
2
+ VERSION = "0.0.7.beta.3"
3
3
  end
data/lib/heroploy.rb CHANGED
@@ -2,4 +2,4 @@ require "rails"
2
2
 
3
3
  require "heroploy/version"
4
4
  require "heroploy/engine" if defined?(Rails) && Rails::VERSION::MAJOR >= 3
5
- require "heroploy/config/var_reader"
5
+
@@ -21,13 +21,6 @@ describe Heroploy::Commands::Heroku do
21
21
  end
22
22
  end
23
23
 
24
- context "#heroku_migrate" do
25
- it "runs rake db:migrate on the heroku server" do
26
- expect_command("heroku run rake db:migrate --app my-app")
27
- commands.heroku_migrate("my-app")
28
- end
29
- end
30
-
31
24
  context "#heroku_config_set" do
32
25
  it "sets the values for the given config variables" do
33
26
  common_vars = {'foo' => 'foo'}
@@ -36,4 +29,25 @@ describe Heroploy::Commands::Heroku do
36
29
  commands.heroku_config_set(common_vars, env_vars, "my-app")
37
30
  end
38
31
  end
32
+
33
+ context "#heroku_db_migrate" do
34
+ it "runs rake db:migrate on the heroku server" do
35
+ expect_command("heroku run rake db:migrate --app my-app")
36
+ commands.heroku_db_migrate("my-app")
37
+ end
38
+ end
39
+
40
+ describe "#heroku_db_reset" do
41
+ it "resets the database for the given app" do
42
+ expect_command("heroku pg:reset DATABASE --confirm my-app --app my-app")
43
+ commands.heroku_db_reset("my-app")
44
+ end
45
+ end
46
+
47
+ describe "#heroku_db_seed" do
48
+ it "seeds the database for the given app" do
49
+ expect_command("heroku run rake db:seed --app my-app")
50
+ commands.heroku_db_seed("my-app")
51
+ end
52
+ end
39
53
  end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe Heroploy::Commands::Rails do
4
+ before(:each) do
5
+ stub_shell
6
+ end
7
+
8
+ let(:commands) { Object.new.extend(Heroploy::Commands::Rails) }
9
+
10
+ describe "#rails_server" do
11
+ it "starts a rails server" do
12
+ expect_command("bundle exec rails s")
13
+ commands.rails_server({}, {})
14
+ end
15
+
16
+ it "passes the given variables to the rails environment" do
17
+ local_variables = {'foo' => 'bar'}
18
+ shared_variables = {'fizz' => 'buzz'}
19
+ expect_command("fizz=buzz foo=bar bundle exec rails s")
20
+ commands.rails_server(shared_variables, local_variables)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+
3
+ describe "db:reset" do
4
+ let(:environment) { build(:environment, :production) }
5
+ include_context "rake"
6
+
7
+ it "invokes heroku_db_reset" do
8
+ expect_any_instance_of(Heroploy::Tasks::EnvTaskLib).to receive(:heroku_db_reset)
9
+ .with("my-production-app")
10
+
11
+ task.invoke
12
+ end
13
+ end
14
+
15
+ describe "db:migrate" do
16
+ let(:environment) { build(:environment, :production) }
17
+ include_context "rake"
18
+
19
+ it "invokes heroku_db_migrate" do
20
+ expect_any_instance_of(Heroploy::Tasks::EnvTaskLib).to receive(:heroku_db_migrate)
21
+ .with("my-production-app")
22
+
23
+ task.invoke
24
+ end
25
+ end
26
+
27
+ describe "db:seed" do
28
+ let(:environment) { build(:environment, :production) }
29
+ include_context "rake"
30
+
31
+ it "invokes heroku_db_seed" do
32
+ expect_any_instance_of(Heroploy::Tasks::EnvTaskLib).to receive(:heroku_db_seed)
33
+ .with("my-production-app")
34
+
35
+ task.invoke
36
+ end
37
+ end
38
+
39
+ describe "db:recreate" do
40
+ let(:environment) { build(:environment, :production) }
41
+ include_context "rake"
42
+
43
+ its(:prerequisites) { should eq ['reset', 'migrate', 'seed'] }
44
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe "run" do
4
+ let(:local_variables) { {'foo' => 'bar'} }
5
+ let(:shared_variables) { {'fizz' => 'buzz'} }
6
+
7
+ let(:shared_env) { build(:shared_env, variables: shared_variables) }
8
+ let(:local_env) { build(:environment, :local, variables: local_variables) }
9
+
10
+ let(:deployment_config) { build(:deployment_config, shared_env: shared_env, environments: [local_env]) }
11
+
12
+ include_context "rake"
13
+
14
+ it "invokes rails_server" do
15
+ expect_any_instance_of(Heroploy::Tasks::EnvTaskLib).to receive(:rails_server)
16
+ .with(shared_variables, local_variables)
17
+
18
+ task.invoke
19
+ end
20
+ end
data/spec/spec_helper.rb CHANGED
@@ -15,7 +15,6 @@ require 'heroploy/tasks/deploy_task_lib'
15
15
  require 'heroploy/config/deployment_config'
16
16
  require 'heroploy/config/environment'
17
17
  require 'heroploy/config/environment_checks'
18
- require 'heroploy/config/var_reader'
19
18
 
20
19
  require 'support/shell_support'
21
20
  require 'support/shared_contexts/rake'
@@ -5,43 +5,64 @@
5
5
  require "rake"
6
6
 
7
7
  shared_context "rake" do
8
- let(:task_name) {
9
- if defined?(environment)
10
- env_name = environment.name
11
- elsif defined?(environments)
12
- env_name = environments[0].name
13
- else
14
- env_name = deployment_config.environments[0].name
15
- end
16
-
17
- "#{env_name}:#{self.class.top_level_description}"
18
- }
19
-
20
- let(:task) { Rake::Task[task_name] }
21
-
22
8
  subject { task }
23
-
9
+ let(:task) { Rake::Task[task_name] }
10
+ let(:task_name) { build_task_name }
11
+
24
12
  before(:each) do
13
+ reset_rake_environment
14
+ create_deployment_tasks
15
+ stub_rake_tasks
16
+ stub_shell
17
+ end
18
+
19
+ def reset_rake_environment
25
20
  Rake::Task.clear
26
-
27
- unless defined?(deploy_config)
28
- if defined?(environment)
29
- deployment_config = build(:deployment_config, environments: [environment])
30
- elsif defined?(environments)
31
- deployment_config = build(:deployment_config, environments: environments)
32
- else
33
- deployment_config = build(:deployment_config)
34
- end
35
- end
36
-
37
- Heroploy::Tasks::DeployTaskLib.new(deployment_config)
38
-
21
+ end
22
+
23
+ def create_deployment_tasks
24
+ Heroploy::Tasks::DeployTaskLib.new(build_deployment_config)
25
+ end
26
+
27
+ def stub_rake_tasks
39
28
  Rake::Task.tasks.each do |task|
40
29
  if task.name != task_name
41
30
  task.stub(:execute)
42
31
  end
43
32
  end
33
+ end
34
+
35
+ def build_environments
36
+ if defined?(environment)
37
+ [environment]
38
+ elsif defined?(environments)
39
+ environments
40
+ end
41
+ end
42
+
43
+ def build_deployment_config
44
+ if defined?(deployment_config)
45
+ deployment_config
46
+ else
47
+ environments = build_environments
48
+
49
+ if environments.nil?
50
+ build(:deployment_config)
51
+ else
52
+ build(:deployment_config, environments: environments)
53
+ end
54
+ end
55
+ end
56
+
57
+ def build_task_name
58
+ if defined?(environment)
59
+ env_name = environment.name
60
+ elsif defined?(environments)
61
+ env_name = environments[0].name
62
+ else
63
+ env_name = deployment_config.environments[0].name
64
+ end
44
65
 
45
- stub_shell
46
- end
66
+ "#{env_name}:#{self.class.top_level_description}"
67
+ end
47
68
  end
@@ -5,11 +5,13 @@ FactoryGirl.define do
5
5
  branch nil
6
6
  travis false
7
7
 
8
- trait :development do
9
- pushed false
10
- staged false
11
- branch nil
12
- travis false
8
+ [:local, :development].each do |t|
9
+ trait t do
10
+ pushed false
11
+ staged false
12
+ branch nil
13
+ travis false
14
+ end
13
15
  end
14
16
 
15
17
  trait :staging do
@@ -21,7 +23,7 @@ FactoryGirl.define do
21
23
 
22
24
  trait :production do
23
25
  pushed true
24
- staged true
26
+ staged 'staging'
25
27
  branch 'master'
26
28
  travis true
27
29
  end
@@ -29,10 +31,16 @@ FactoryGirl.define do
29
31
 
30
32
  factory :environment, :class => Heroploy::Config::Environment do
31
33
  checks { build(:environment_checks) }
34
+ variables { {} }
35
+
36
+ trait :local do
37
+ name 'local'
38
+ end
32
39
 
33
40
  [:development, :staging, :production].each do |t|
34
41
  trait t do
35
42
  name t.to_s
43
+ app "my-#{t.to_s}-app"
36
44
  remote t.to_s
37
45
  checks { build(:environment_checks, t) }
38
46
  end
@@ -41,16 +49,17 @@ FactoryGirl.define do
41
49
 
42
50
  factory :shared_env, :class => Heroploy::Config::SharedEnv do
43
51
  required []
44
- variables {}
52
+ variables { {} }
45
53
  end
46
54
 
47
55
  factory :deployment_config, :class => Heroploy::Config::DeploymentConfig do
48
56
  travis_repo "my-travis-user/my-travis-repo"
49
57
 
50
- shared_env nil
58
+ shared_env { build(:shared_env) }
51
59
 
52
60
  environments {
53
61
  [
62
+ build(:environment, :local),
54
63
  build(:environment, :development),
55
64
  build(:environment, :staging),
56
65
  build(:environment, :production)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: heroploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7.beta.2
4
+ version: 0.0.7.beta.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Brunton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-02 00:00:00.000000000 Z
11
+ date: 2014-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: cucumber
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: factory_girl
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -137,6 +151,13 @@ files:
137
151
  - LICENSE.txt
138
152
  - README.md
139
153
  - Rakefile
154
+ - features/check_tasks.feature
155
+ - features/config_variables.feature
156
+ - features/database_tasks.feature
157
+ - features/deploy_tasks.feature
158
+ - features/local_tasks.feature
159
+ - features/steps/environment_steps.rb
160
+ - features/support/env.rb
140
161
  - heroploy.gemspec
141
162
  - lib/generators/heroploy/install/USAGE
142
163
  - lib/generators/heroploy/install/install_generator.rb
@@ -145,13 +166,13 @@ files:
145
166
  - lib/heroploy/commands/checks.rb
146
167
  - lib/heroploy/commands/git.rb
147
168
  - lib/heroploy/commands/heroku.rb
169
+ - lib/heroploy/commands/rails.rb
148
170
  - lib/heroploy/commands/shell.rb
149
171
  - lib/heroploy/config/deployment_config.rb
150
172
  - lib/heroploy/config/environment.rb
151
173
  - lib/heroploy/config/environment_checks.rb
152
174
  - lib/heroploy/config/remote_config.rb
153
175
  - lib/heroploy/config/shared_env.rb
154
- - lib/heroploy/config/var_reader.rb
155
176
  - lib/heroploy/engine.rb
156
177
  - lib/heroploy/tasks/check_task_lib.rb
157
178
  - lib/heroploy/tasks/deploy_task_lib.rb
@@ -159,18 +180,17 @@ files:
159
180
  - lib/heroploy/tasks/env_var_task_lib.rb
160
181
  - lib/heroploy/tasks/tasks.rake
161
182
  - lib/heroploy/version.rb
162
- - spec/factories.rb
163
183
  - spec/lib/generators/heroploy/install_generator_spec.rb
164
184
  - spec/lib/heroploy/commands/checks_spec.rb
165
185
  - spec/lib/heroploy/commands/git_spec.rb
166
186
  - spec/lib/heroploy/commands/heroku_spec.rb
187
+ - spec/lib/heroploy/commands/rails_spec.rb
167
188
  - spec/lib/heroploy/commands/shell_spec.rb
168
189
  - spec/lib/heroploy/config/deployment_config_spec.rb
169
190
  - spec/lib/heroploy/config/environment_checks_spec.rb
170
191
  - spec/lib/heroploy/config/environment_spec.rb
171
192
  - spec/lib/heroploy/config/remote_config_spec.rb
172
193
  - spec/lib/heroploy/config/shared_env_spec.rb
173
- - spec/lib/heroploy/config/var_reader_spec.rb
174
194
  - spec/lib/heroploy/tasks/check_all_spec.rb
175
195
  - spec/lib/heroploy/tasks/check_branch_spec.rb
176
196
  - spec/lib/heroploy/tasks/check_config_spec.rb
@@ -178,12 +198,15 @@ files:
178
198
  - spec/lib/heroploy/tasks/check_remote_spec.rb
179
199
  - spec/lib/heroploy/tasks/check_staged_spec.rb
180
200
  - spec/lib/heroploy/tasks/check_travis_spec.rb
201
+ - spec/lib/heroploy/tasks/db_spec.rb
202
+ - spec/lib/heroploy/tasks/run_spec.rb
181
203
  - spec/spec_helper.rb
182
204
  - spec/support/customer_matchers/environment_matcher.rb
183
205
  - spec/support/helpers/deploy_config_helper.rb
184
206
  - spec/support/shared_contexts/generator.rb
185
207
  - spec/support/shared_contexts/rake.rb
186
208
  - spec/support/shell_support.rb
209
+ - test/factories.rb
187
210
  homepage: ''
188
211
  licenses:
189
212
  - MIT
@@ -209,18 +232,24 @@ signing_key:
209
232
  specification_version: 4
210
233
  summary: Helpful rake tasks for deploying to Heroku
211
234
  test_files:
212
- - spec/factories.rb
235
+ - features/check_tasks.feature
236
+ - features/config_variables.feature
237
+ - features/database_tasks.feature
238
+ - features/deploy_tasks.feature
239
+ - features/local_tasks.feature
240
+ - features/steps/environment_steps.rb
241
+ - features/support/env.rb
213
242
  - spec/lib/generators/heroploy/install_generator_spec.rb
214
243
  - spec/lib/heroploy/commands/checks_spec.rb
215
244
  - spec/lib/heroploy/commands/git_spec.rb
216
245
  - spec/lib/heroploy/commands/heroku_spec.rb
246
+ - spec/lib/heroploy/commands/rails_spec.rb
217
247
  - spec/lib/heroploy/commands/shell_spec.rb
218
248
  - spec/lib/heroploy/config/deployment_config_spec.rb
219
249
  - spec/lib/heroploy/config/environment_checks_spec.rb
220
250
  - spec/lib/heroploy/config/environment_spec.rb
221
251
  - spec/lib/heroploy/config/remote_config_spec.rb
222
252
  - spec/lib/heroploy/config/shared_env_spec.rb
223
- - spec/lib/heroploy/config/var_reader_spec.rb
224
253
  - spec/lib/heroploy/tasks/check_all_spec.rb
225
254
  - spec/lib/heroploy/tasks/check_branch_spec.rb
226
255
  - spec/lib/heroploy/tasks/check_config_spec.rb
@@ -228,10 +257,13 @@ test_files:
228
257
  - spec/lib/heroploy/tasks/check_remote_spec.rb
229
258
  - spec/lib/heroploy/tasks/check_staged_spec.rb
230
259
  - spec/lib/heroploy/tasks/check_travis_spec.rb
260
+ - spec/lib/heroploy/tasks/db_spec.rb
261
+ - spec/lib/heroploy/tasks/run_spec.rb
231
262
  - spec/spec_helper.rb
232
263
  - spec/support/customer_matchers/environment_matcher.rb
233
264
  - spec/support/helpers/deploy_config_helper.rb
234
265
  - spec/support/shared_contexts/generator.rb
235
266
  - spec/support/shared_contexts/rake.rb
236
267
  - spec/support/shell_support.rb
268
+ - test/factories.rb
237
269
  has_rdoc:
@@ -1,37 +0,0 @@
1
- require 'heroploy/config/deployment_config'
2
-
3
- module Heroploy
4
- module Config
5
- class VarReader
6
- attr_accessor :deployment_config
7
-
8
- def deployment_config
9
- @deployment_config ||= begin
10
- config = Heroploy::Config::DeploymentConfig.load
11
- config.load_remotes! unless config.nil?
12
- config
13
- end
14
- end
15
-
16
- def env_matcher_name
17
- "Rails.env[#{Rails.env}]"
18
- end
19
-
20
- def [](var_name)
21
- config_var = ENV[var_name.to_s]
22
- config_var ||= begin
23
- environment = deployment_config[env_matcher_name]
24
- environment.variables[var_name.to_s] unless environment.nil?
25
- end
26
- config_var ||= begin
27
- shared_env = deployment_config.shared_env
28
- shared_env.variables[var_name.to_s] unless shared_env.nil?
29
- end
30
- end
31
- end
32
- end
33
-
34
- def self.config_vars
35
- @config_vars ||= Config::VarReader.new
36
- end
37
- end
@@ -1,67 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Heroploy::Config::VarReader do
4
- subject(:var_reader) { Heroploy::Config::VarReader.new }
5
-
6
- describe "deployment_config" do
7
- let(:expected_config) { build(:deployment_config) }
8
- before { allow(Heroploy::Config::DeploymentConfig).to receive(:load).and_return(expected_config) }
9
-
10
- it "loads and returns the deployment config" do
11
- expect(var_reader.deployment_config).to eq(expected_config)
12
- end
13
-
14
- it "caches the result" do
15
- expect(Heroploy::Config::DeploymentConfig).to receive(:load).once
16
- var_reader.deployment_config
17
- var_reader.deployment_config
18
- end
19
- end
20
-
21
- describe "[]" do
22
- context "if an environment variable is defined" do
23
- before { allow(ENV).to receive(:[]).with('foo').and_return('bar') }
24
-
25
- it "returns the value of the environment variable" do
26
- expect(var_reader[:foo]).to eq('bar')
27
- end
28
- end
29
-
30
- context "if an environment matcher is defined" do
31
- let(:deployment_config) do
32
- build(:deployment_config,
33
- :shared_env => build(:shared_env, :variables => {'fizz' => 'buzz'}),
34
- :environments => [
35
- build(:environment,
36
- :name => 'Rails.env[test]',
37
- :variables => {'foo' => 'baz'}
38
- )
39
- ]
40
- )
41
- end
42
-
43
- before do
44
- allow(Heroploy::Config::DeploymentConfig).to receive(:load).
45
- and_return(deployment_config)
46
-
47
- allow(Rails).to receive(:env).and_return('test')
48
- end
49
-
50
- it "returns the variable for the matched environment" do
51
- expect(var_reader[:foo]).to eq('baz')
52
- end
53
-
54
- it "returns shared environment variables" do
55
- expect(var_reader[:fizz]).to eq('buzz')
56
- end
57
- end
58
-
59
- context "if no variables are defined" do
60
- before { allow(Heroploy::Config::DeploymentConfig).to receive(:load).and_return(build(:deployment_config)) }
61
-
62
- it "returns nil" do
63
- expect(var_reader[:foo]).to eq(nil)
64
- end
65
- end
66
- end
67
- end