whisk_deploy 0.6.26
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.
- data/CHANGELOG +292 -0
- data/MIT-LICENSE +20 -0
- data/README.integration_specs +24 -0
- data/README.markdown +832 -0
- data/Rakefile +105 -0
- data/VERSION +1 -0
- data/WHY.txt +45 -0
- data/bin/wd +61 -0
- data/bin/wd_role +42 -0
- data/examples/deploy-configs.yml +13 -0
- data/examples/deploy-local.yml +4 -0
- data/examples/deploy-multiple-remotes.yml +26 -0
- data/examples/deploy-staging.yml +8 -0
- data/examples/deploy.rake +11 -0
- data/examples/deploy.yml +16 -0
- data/init.rb +1 -0
- data/install.rb +5 -0
- data/lib/whiskey_disk.rb +327 -0
- data/lib/whiskey_disk/config.rb +127 -0
- data/lib/whiskey_disk/config/abstract_filter.rb +19 -0
- data/lib/whiskey_disk/config/filter.rb +48 -0
- data/lib/whiskey_disk/config/filters/add_environment_name_filter.rb +11 -0
- data/lib/whiskey_disk/config/filters/add_project_name_filter.rb +11 -0
- data/lib/whiskey_disk/config/filters/check_for_duplicate_domains_filter.rb +21 -0
- data/lib/whiskey_disk/config/filters/convert_role_strings_to_list_filter.rb +20 -0
- data/lib/whiskey_disk/config/filters/default_config_target_filter.rb +12 -0
- data/lib/whiskey_disk/config/filters/default_domain_filter.rb +12 -0
- data/lib/whiskey_disk/config/filters/drop_empty_domain_roles_filter.rb +32 -0
- data/lib/whiskey_disk/config/filters/environment_scope_filter.rb +20 -0
- data/lib/whiskey_disk/config/filters/hashify_domain_entries_filter.rb +29 -0
- data/lib/whiskey_disk/config/filters/localize_domains_filter.rb +24 -0
- data/lib/whiskey_disk/config/filters/modules/scope_helper.rb +11 -0
- data/lib/whiskey_disk/config/filters/normalize_ssh_options_filter.rb +29 -0
- data/lib/whiskey_disk/config/filters/project_scope_filter.rb +34 -0
- data/lib/whiskey_disk/config/filters/select_project_and_environment_filter.rb +12 -0
- data/lib/whiskey_disk/config/filters/stringify_hash_keys_filter.rb +25 -0
- data/lib/whiskey_disk/helpers.rb +50 -0
- data/lib/whiskey_disk/rake.rb +47 -0
- data/scenarios/git_repositories/config.git/HEAD +1 -0
- data/scenarios/git_repositories/config.git/config +5 -0
- data/scenarios/git_repositories/config.git/description +1 -0
- data/scenarios/git_repositories/config.git/git-daemon-export-ok +0 -0
- data/scenarios/git_repositories/config.git/hooks/applypatch-msg.sample +15 -0
- data/scenarios/git_repositories/config.git/hooks/commit-msg.sample +24 -0
- data/scenarios/git_repositories/config.git/hooks/post-commit.sample +8 -0
- data/scenarios/git_repositories/config.git/hooks/post-receive.sample +15 -0
- data/scenarios/git_repositories/config.git/hooks/post-update.sample +8 -0
- data/scenarios/git_repositories/config.git/hooks/pre-applypatch.sample +14 -0
- data/scenarios/git_repositories/config.git/hooks/pre-commit.sample +46 -0
- data/scenarios/git_repositories/config.git/hooks/pre-rebase.sample +169 -0
- data/scenarios/git_repositories/config.git/hooks/prepare-commit-msg.sample +36 -0
- data/scenarios/git_repositories/config.git/hooks/update.sample +128 -0
- data/scenarios/git_repositories/config.git/info/exclude +6 -0
- data/scenarios/git_repositories/config.git/objects/0d/b14dd6ddc54017c0a11960dcda82ed802cde69 +0 -0
- data/scenarios/git_repositories/config.git/objects/0e/e781f5ce80d64db32a74a7aae7b5248dafe112 +3 -0
- data/scenarios/git_repositories/config.git/objects/17/6bf54cf17d1d1c24556dc059c4144a5df230e8 +0 -0
- data/scenarios/git_repositories/config.git/objects/20/e9ff3feaa8ede30f707e5f1b4356e3c02bb7ec +0 -0
- data/scenarios/git_repositories/config.git/objects/45/117b1c775f0de415478dbf08ed9d667ab17d13 +0 -0
- data/scenarios/git_repositories/config.git/objects/51/3954c9aca090e6ce40359f0e9fde30ea78eb8c +0 -0
- data/scenarios/git_repositories/config.git/objects/66/947a7a11a6f5d3d561fe95de284ced3010819a +0 -0
- data/scenarios/git_repositories/config.git/objects/6b/bc79311bfac47d3ed724aa82a4814e0dda4c67 +0 -0
- data/scenarios/git_repositories/config.git/objects/71/eb5df52676e8e6efba471050b46978173af110 +1 -0
- data/scenarios/git_repositories/config.git/objects/84/17d2fe3e8fcc0825249c517b29b0f9ea8b8b31 +2 -0
- data/scenarios/git_repositories/config.git/objects/8b/384fcfcf7c0dee7c3c1d5636bee9e645d9cf38 +0 -0
- data/scenarios/git_repositories/config.git/objects/bb/59da633ba74296b0c2f9ff70784ac155ddb599 +0 -0
- data/scenarios/git_repositories/config.git/objects/cc/b86b26189afbf45d8eb9165812ab86dbdfca63 +0 -0
- data/scenarios/git_repositories/config.git/objects/d1/0bcd51fec41f854001e4d61f99d9e282a695d3 +0 -0
- data/scenarios/git_repositories/config.git/objects/d8/a8b0f5b1fd66844efb141d9544965ea0065f2d +0 -0
- data/scenarios/git_repositories/config.git/objects/e6/b02c66ad632e6b8535c4630cb8fe07732a72fc +0 -0
- data/scenarios/git_repositories/config.git/objects/e8/b8bfeeba735c0a1a873082554cb4d7256ac125 +0 -0
- data/scenarios/git_repositories/config.git/objects/f9/0181466a1a60b793ca9cc9abd584c18d4e3887 +0 -0
- data/scenarios/git_repositories/config.git/objects/f9/49d5d8a4f12c91471e34d4e277239c35ebd10d +0 -0
- data/scenarios/git_repositories/config.git/refs/heads/master +1 -0
- data/scenarios/git_repositories/project.git/HEAD +1 -0
- data/scenarios/git_repositories/project.git/config +5 -0
- data/scenarios/git_repositories/project.git/description +1 -0
- data/scenarios/git_repositories/project.git/git-daemon-export-ok +0 -0
- data/scenarios/git_repositories/project.git/hooks/applypatch-msg.sample +15 -0
- data/scenarios/git_repositories/project.git/hooks/commit-msg.sample +24 -0
- data/scenarios/git_repositories/project.git/hooks/post-commit.sample +8 -0
- data/scenarios/git_repositories/project.git/hooks/post-receive.sample +15 -0
- data/scenarios/git_repositories/project.git/hooks/post-update.sample +8 -0
- data/scenarios/git_repositories/project.git/hooks/pre-applypatch.sample +14 -0
- data/scenarios/git_repositories/project.git/hooks/pre-commit.sample +46 -0
- data/scenarios/git_repositories/project.git/hooks/pre-rebase.sample +169 -0
- data/scenarios/git_repositories/project.git/hooks/prepare-commit-msg.sample +36 -0
- data/scenarios/git_repositories/project.git/hooks/update.sample +128 -0
- data/scenarios/git_repositories/project.git/info/exclude +6 -0
- data/scenarios/git_repositories/project.git/objects/04/26e152e66c8cd42974279bdcae09be9839c172 +0 -0
- data/scenarios/git_repositories/project.git/objects/04/f4de85eaf72ef1631dc6d7424045c0a749b757 +1 -0
- data/scenarios/git_repositories/project.git/objects/06/13fe277280cbcdb2856e1eefc70bdaff011b20 +0 -0
- data/scenarios/git_repositories/project.git/objects/06/7aca89b86265eee211387434c3e50f37ccf009 +0 -0
- data/scenarios/git_repositories/project.git/objects/09/445dacc4822722612d60833c9948219ecdd8f5 +0 -0
- data/scenarios/git_repositories/project.git/objects/11/c4ec64326de35462f4e79d0f4229bf8e26e0c5 +0 -0
- data/scenarios/git_repositories/project.git/objects/20/1c7641c2e42b0b904e5c1f793489d8b858e4da +2 -0
- data/scenarios/git_repositories/project.git/objects/23/979639da60d2d31e9744468df1c1221b101e64 +0 -0
- data/scenarios/git_repositories/project.git/objects/27/a3fff2c4c45ab5513a405f694c0a042cb5d417 +1 -0
- data/scenarios/git_repositories/project.git/objects/2c/0c33cfba8e1af15df88522c0db2b10a6a94138 +2 -0
- data/scenarios/git_repositories/project.git/objects/38/b574660305ecb5fec6b2daa7ee1e0dbf1b6003 +0 -0
- data/scenarios/git_repositories/project.git/objects/4a/57abb5e4e426cfc9101b3af22ac83ccbd8e2ad +0 -0
- data/scenarios/git_repositories/project.git/objects/4c/77ebdd985e57afe7988480720c5dc77ec525c9 +0 -0
- data/scenarios/git_repositories/project.git/objects/51/c94da6f1b8aa9d2346088d3d362475b60c7f32 +0 -0
- data/scenarios/git_repositories/project.git/objects/5b/a96acf9cc9b87babe37c032676f53bf1ba9ae7 +2 -0
- data/scenarios/git_repositories/project.git/objects/5d/f555601d60f1c2a84d2364af0ad640612c3ba5 +0 -0
- data/scenarios/git_repositories/project.git/objects/71/03b5ac94940d596c2160a5cfcd55ca4ccac41f +0 -0
- data/scenarios/git_repositories/project.git/objects/73/3fc331098b03523f414f3509b9ae6e637c6866 +0 -0
- data/scenarios/git_repositories/project.git/objects/80/26076649ceccbe96a6292f2432652f08483035 +0 -0
- data/scenarios/git_repositories/project.git/objects/86/d1ef0976be4567de562224e1b51fbf9820c53a +1 -0
- data/scenarios/git_repositories/project.git/objects/87/a9d8b09b3401d21b23d90253332d6b28b47db2 +0 -0
- data/scenarios/git_repositories/project.git/objects/8b/030ba688255c917d189ae3f87d7c5ccd226bc2 +0 -0
- data/scenarios/git_repositories/project.git/objects/95/c9d5ad9b1c90e4c805516783105fc2037dedeb +2 -0
- data/scenarios/git_repositories/project.git/objects/95/d82d043af35a80eabfd56c0d705abfa3488787 +2 -0
- data/scenarios/git_repositories/project.git/objects/96/0bf34bb0b46d0aeb0be87f688f4ef06a4b35e1 +0 -0
- data/scenarios/git_repositories/project.git/objects/a3/860106dc1d148c7831cd45ae38829b4ed47702 +2 -0
- data/scenarios/git_repositories/project.git/objects/a8/506d6439b71784a72ac72d284b2ad53088f573 +0 -0
- data/scenarios/git_repositories/project.git/objects/ad/22ea6c7563777936ecfbe50d8e2cf8120fd525 +0 -0
- data/scenarios/git_repositories/project.git/objects/ae/3900de54aff557c61c81146d00f9d38e55a265 +1 -0
- data/scenarios/git_repositories/project.git/objects/bf/5e3740d52b80abb0378b3f85f93a53b1294521 +1 -0
- data/scenarios/git_repositories/project.git/objects/bf/b59811cdbc069418dee14b171e6e7e979784b7 +0 -0
- data/scenarios/git_repositories/project.git/objects/cc/5ac0afb24e727d5de344cc26a425f4fb7fd17d +3 -0
- data/scenarios/git_repositories/project.git/objects/d1/091aa2dd76885108461110c639e6b33a297fce +0 -0
- data/scenarios/git_repositories/project.git/objects/d8/913f6650eb2b7bf2a633732d8452008ca23dcb +0 -0
- data/scenarios/git_repositories/project.git/objects/db/d1b9667f1b26b13331ac0c321dced8be1aeab0 +3 -0
- data/scenarios/git_repositories/project.git/objects/e4/3b9107e9b1908ce415025e64eb83a493d329b7 +0 -0
- data/scenarios/git_repositories/project.git/objects/ef/2a88894d5421920b9dfe67a9a4d8043830e62e +0 -0
- data/scenarios/git_repositories/project.git/objects/f4/0123a1ff20c65d8dc15a38a83222647908e6f7 +0 -0
- data/scenarios/git_repositories/project.git/objects/f5/0af315b75ca0b12c720dec6d916b76b968c319 +0 -0
- data/scenarios/git_repositories/project.git/objects/f6/0215709b7b23f3738e9cbaf634b1c86bbd376a +0 -0
- data/scenarios/git_repositories/project.git/refs/heads/bad_rakefile +1 -0
- data/scenarios/git_repositories/project.git/refs/heads/hook_with_changed +1 -0
- data/scenarios/git_repositories/project.git/refs/heads/master +1 -0
- data/scenarios/git_repositories/project.git/refs/heads/no_rake_hooks +1 -0
- data/scenarios/git_repositories/project.git/refs/heads/post_rake_tasks +1 -0
- data/scenarios/invalid/deploy.yml +1 -0
- data/scenarios/local/deploy.yml.erb +17 -0
- data/scenarios/remote/deploy.yml +119 -0
- data/scenarios/setup/vagrant/.gitignore +3 -0
- data/scenarios/setup/vagrant/Vagrantfile +10 -0
- data/scenarios/setup/vagrant/manifests/integration.pp +32 -0
- data/scenarios/setup/vagrant/pids/.gitignore +1 -0
- data/spec/.bacon +0 -0
- data/spec/init_spec.rb +9 -0
- data/spec/install_spec.rb +43 -0
- data/spec/integration/branch_switching_spec.rb +41 -0
- data/spec/integration/deployment_failures_spec.rb +106 -0
- data/spec/integration/helper_spec.rb +90 -0
- data/spec/integration/invalid_configuration_spec.rb +39 -0
- data/spec/integration/local_deployments_spec.rb +230 -0
- data/spec/integration/post_rake_tasks_spec.rb +226 -0
- data/spec/integration/post_scripts_spec.rb +246 -0
- data/spec/integration/remote_deployments_spec.rb +166 -0
- data/spec/integration/staleness_checks_spec.rb +72 -0
- data/spec/spec_helper.rb +117 -0
- data/spec/wd_command_spec.rb +986 -0
- data/spec/wd_role_command_spec.rb +49 -0
- data/spec/whiskey_disk/config/filter_spec.rb +77 -0
- data/spec/whiskey_disk/config/filters/add_environment_name_filter_spec.rb +20 -0
- data/spec/whiskey_disk/config/filters/add_project_name_filter_spec.rb +19 -0
- data/spec/whiskey_disk/config/filters/check_for_duplicate_domains_filter_spec.rb +29 -0
- data/spec/whiskey_disk/config/filters/convert_role_strings_to_list_filter_spec.rb +48 -0
- data/spec/whiskey_disk/config/filters/default_config_target_filter_spec.rb +19 -0
- data/spec/whiskey_disk/config/filters/default_domain_filter_spec.rb +18 -0
- data/spec/whiskey_disk/config/filters/drop_empty_domain_roles_filter_spec.rb +60 -0
- data/spec/whiskey_disk/config/filters/environment_scope_filter_spec.rb +32 -0
- data/spec/whiskey_disk/config/filters/hashify_domain_entries_filter_spec.rb +41 -0
- data/spec/whiskey_disk/config/filters/localize_domains_filter_spec.rb +30 -0
- data/spec/whiskey_disk/config/filters/normalize_ssh_options_filter_spec.rb +56 -0
- data/spec/whiskey_disk/config/filters/project_scope_filter_spec.rb +75 -0
- data/spec/whiskey_disk/config/filters/select_project_and_environment_filter_spec.rb +30 -0
- data/spec/whiskey_disk/config/filters/stringify_hash_keys_filter_spec.rb +40 -0
- data/spec/whiskey_disk/config_spec.rb +754 -0
- data/spec/whiskey_disk/helpers_spec.rb +443 -0
- data/spec/whiskey_disk/rake_spec.rb +261 -0
- data/spec/whiskey_disk_spec.rb +1224 -0
- data/tasks/deploy.rake +2 -0
- data/whisk_deploy.gemspec +215 -0
- metadata +241 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
file { '/etc/motd':
|
|
2
|
+
content => "Welcome to your Vagrant-built virtual machine! Managed by Puppet.\n"
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
file { '/opt/deploy/target':
|
|
6
|
+
ensure => directory,
|
|
7
|
+
owner => 'vagrant',
|
|
8
|
+
group => 'vagrant',
|
|
9
|
+
mode => '775'
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
file { '/home/vagrant/.bashrc':
|
|
13
|
+
ensure => 'present',
|
|
14
|
+
owner => 'vagrant',
|
|
15
|
+
group => 'vagrant',
|
|
16
|
+
mode => '755',
|
|
17
|
+
content => 'RUBYLIB="/opt/lib"; export RUBYLIB'
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
host {'host':
|
|
21
|
+
ensure => 'present',
|
|
22
|
+
host_aliases => 'wd-git.example.com',
|
|
23
|
+
ip => '10.0.2.2',
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
package {'git-core':
|
|
27
|
+
ensure => 'latest'
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
package {'rake':
|
|
31
|
+
ensure => 'latest'
|
|
32
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*.pid
|
data/spec/.bacon
ADDED
|
File without changes
|
data/spec/init_spec.rb
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper.rb'))
|
|
2
|
+
require 'rake'
|
|
3
|
+
|
|
4
|
+
describe 'when the init.rb plugin loader has been included' do
|
|
5
|
+
it 'loads the main library' do
|
|
6
|
+
require(File.expand_path(File.join(File.dirname(__FILE__), '..', 'init')))
|
|
7
|
+
$".should.include(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'whiskey_disk.rb')))
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
|
2
|
+
|
|
3
|
+
def do_install
|
|
4
|
+
eval File.read(File.join(File.dirname(__FILE__), *%w[.. install.rb ]))
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
describe 'the plugin install.rb script' do
|
|
8
|
+
before do
|
|
9
|
+
self.stub!(:puts).and_return(true)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it 'displays the content of the plugin README file' do
|
|
13
|
+
self.stub!(:readme_contents).and_return('README CONTENTS')
|
|
14
|
+
self.should.receive(:puts).with('README CONTENTS')
|
|
15
|
+
do_install
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe 'readme_contents' do
|
|
19
|
+
it 'works without arguments' do
|
|
20
|
+
do_install
|
|
21
|
+
lambda { readme_contents }.should.not.raise(ArgumentError)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'accepts no arguments' do
|
|
25
|
+
do_install
|
|
26
|
+
lambda { readme_contents(:foo) }.should.raise(ArgumentError)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'reads the plugin README file' do
|
|
30
|
+
do_install
|
|
31
|
+
File.stub!(:join).and_return('/path/to/README')
|
|
32
|
+
IO.should.receive(:read).with('/path/to/README')
|
|
33
|
+
readme_contents
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'returns the contents of the plugin README file' do
|
|
37
|
+
do_install
|
|
38
|
+
File.stub!(:join).and_return('/path/to/README')
|
|
39
|
+
IO.stub!(:read).with('/path/to/README').and_return('README CONTENTS')
|
|
40
|
+
readme_contents.should == 'README CONTENTS'
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper.rb'))
|
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib', 'whiskey_disk'))
|
|
3
|
+
|
|
4
|
+
integration_spec do
|
|
5
|
+
describe 'when configured for a remote deployment' do
|
|
6
|
+
before do
|
|
7
|
+
setup_deployment_area
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe 'and deploying on a different branch than originally deployed' do
|
|
11
|
+
before do
|
|
12
|
+
@config = scenario_config('remote/deploy.yml')
|
|
13
|
+
@args = "--path=#{@config} --to=project:remote"
|
|
14
|
+
run_setup(@args)
|
|
15
|
+
run_deploy(@args)
|
|
16
|
+
|
|
17
|
+
@args = "--path=#{@config} --to=project:remote-on-other-branch"
|
|
18
|
+
File.unlink(deployed_file('project/README')) # modify the deployed checkout
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'updates the checkout of the repository on the target path' do
|
|
22
|
+
run_deploy(@args)
|
|
23
|
+
File.exists?(deployed_file('project/README')).should == true
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'has the working copy set to the new branch' do
|
|
27
|
+
run_deploy(@args)
|
|
28
|
+
current_branch('project').should == 'no_rake_hooks'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'reports the remote deployment as successful' do
|
|
32
|
+
run_deploy(@args)
|
|
33
|
+
File.read(integration_log).should =~ /vagrant => succeeded/
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'exits with a true status' do
|
|
37
|
+
run_deploy(@args).should == true
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper.rb'))
|
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib', 'whiskey_disk'))
|
|
3
|
+
|
|
4
|
+
integration_spec do
|
|
5
|
+
describe 'when specified project cannot be found in the configuration' do
|
|
6
|
+
before do
|
|
7
|
+
setup_deployment_area
|
|
8
|
+
|
|
9
|
+
@config = scenario_config('remote/deploy.yml')
|
|
10
|
+
@args = "--path=#{@config} --to=bogus:remote"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe 'and performing a setup' do
|
|
14
|
+
it 'does not checkout a repository for the project to the target path' do
|
|
15
|
+
run_setup(@args)
|
|
16
|
+
File.exists?(deployed_file('bogus')).should == false
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it 'does not checkout a repository for any project in the configuration file to the target path' do
|
|
20
|
+
run_setup(@args)
|
|
21
|
+
File.exists?(deployed_file('project')).should == false
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'includes a helpful error message' do
|
|
25
|
+
run_setup(@args)
|
|
26
|
+
File.read(integration_log).should =~ /No configuration file defined data for project `bogus`/
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'exits with a false status' do
|
|
30
|
+
run_setup(@args).should == false
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe 'and performing a deployment' do
|
|
35
|
+
before do
|
|
36
|
+
checkout_repo('project')
|
|
37
|
+
File.unlink(deployed_file('project/README')) # modify the deployed checkout
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'does not checkout a repository for the project to the target path' do
|
|
41
|
+
run_deploy(@args)
|
|
42
|
+
File.exists?(deployed_file('bogus')).should == false
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'does not update the repository for any project in the configuration file to the target path' do
|
|
46
|
+
run_deploy(@args)
|
|
47
|
+
File.exists?(deployed_file('project/README')).should == false
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'includes a helpful error message' do
|
|
51
|
+
run_deploy(@args)
|
|
52
|
+
File.read(integration_log).should =~ /No configuration file defined data for project `bogus`/
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it 'exits with a false status' do
|
|
56
|
+
run_deploy(@args).should == false
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
describe 'when specified environment cannot be found in the configuration' do
|
|
62
|
+
before do
|
|
63
|
+
setup_deployment_area
|
|
64
|
+
|
|
65
|
+
@config = scenario_config('remote/deploy.yml')
|
|
66
|
+
@args = "--path=#{@config} --to=project:bogus"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
describe 'and performing a setup' do
|
|
70
|
+
it 'does not checkout a repository for the project to the target path' do
|
|
71
|
+
run_setup(@args)
|
|
72
|
+
File.exists?(deployed_file('project')).should == false
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it 'includes a helpful error message' do
|
|
76
|
+
run_setup(@args)
|
|
77
|
+
File.read(integration_log).should =~ /No configuration file defined data for project `project`, environment `bogus`/
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it 'exits with a false status' do
|
|
81
|
+
run_setup(@args).should == false
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
describe 'and performing a deployment' do
|
|
86
|
+
before do
|
|
87
|
+
checkout_repo('project')
|
|
88
|
+
File.unlink(deployed_file('project/README')) # modify the deployed checkout
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it 'does not update the repository for the project to the target path' do
|
|
92
|
+
run_deploy(@args)
|
|
93
|
+
File.exists?(deployed_file('project/README')).should == false
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it 'includes a helpful error message' do
|
|
97
|
+
run_deploy(@args)
|
|
98
|
+
File.read(integration_log).should =~ /No configuration file defined data for project `project`, environment `bogus`/
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it 'exits with a false status' do
|
|
102
|
+
run_deploy(@args).should == false
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper.rb'))
|
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib', 'whiskey_disk'))
|
|
3
|
+
|
|
4
|
+
integration_spec do
|
|
5
|
+
describe 'when a post_deploy hook uses the changed? method' do
|
|
6
|
+
before do
|
|
7
|
+
setup_deployment_area
|
|
8
|
+
@config = scenario_config('remote/deploy.yml')
|
|
9
|
+
@args = "--path=#{@config} --to=project:hook_with_changed"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe 'and performing a setup' do
|
|
13
|
+
it 'performs a checkout of the repository to the target path' do
|
|
14
|
+
run_setup(@args)
|
|
15
|
+
File.exists?(deployed_file('project/README')).should == true
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'considers all files changed, running any actions guarded by #changed?' do
|
|
19
|
+
run_setup(@args)
|
|
20
|
+
File.read(integration_log).should =~ /changed\? was true/
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'considers all files changed, including by rsync, running any actions guarded by #changed?' do
|
|
24
|
+
run_setup(@args)
|
|
25
|
+
File.read(integration_log).should =~ /changed\? by rsync was true/
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'considers all files changed, not running any actions guarded by ! #changed?' do
|
|
29
|
+
run_setup(@args)
|
|
30
|
+
File.read(integration_log).should.not =~ /changed\? was false/
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'considers all files changed, including by rsync not running any actions guarded by ! #changed?' do
|
|
34
|
+
run_setup(@args)
|
|
35
|
+
File.read(integration_log).should.not =~ /changed\? by rsync was false/
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'reports the remote setup as successful' do
|
|
39
|
+
run_setup(@args)
|
|
40
|
+
File.read(integration_log).should =~ /vagrant => succeeded/
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it 'exits with a true status' do
|
|
44
|
+
run_setup(@args).should == true
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
describe 'and performing a deployment' do
|
|
49
|
+
before do
|
|
50
|
+
checkout_repo('project', 'hook_with_changed')
|
|
51
|
+
checkout_repo('config')
|
|
52
|
+
jump_to_initial_commit('project') # reset the deployed checkout
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it 'updates the repo checkout' do
|
|
56
|
+
run_deploy(@args)
|
|
57
|
+
File.exists?(deployed_file('project/README')).should == true
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it 'runs actions contingent on file changes' do
|
|
61
|
+
run_deploy(@args)
|
|
62
|
+
File.read(integration_log).should =~ /changed\? was true/
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it 'runs actions contingent on rsync file changes' do
|
|
66
|
+
run_deploy(@args)
|
|
67
|
+
File.read(integration_log).should =~ /changed\? by rsync was true/
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it 'does not run actions contingent upon files not changing' do
|
|
71
|
+
run_deploy(@args)
|
|
72
|
+
File.read(integration_log).should =~ /changed\? was false/
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it 'does not run actions contingent upon rsync files not changing' do
|
|
76
|
+
run_deploy(@args)
|
|
77
|
+
File.read(integration_log).should =~ /changed\? by rsync was false/
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it 'exits with a true status' do
|
|
81
|
+
run_deploy(@args).should == true
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it 'reports the deployment as successful' do
|
|
85
|
+
run_deploy(@args)
|
|
86
|
+
File.read(integration_log).should =~ /vagrant => succeeded/
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper.rb'))
|
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib', 'whiskey_disk'))
|
|
3
|
+
|
|
4
|
+
integration_spec do
|
|
5
|
+
describe 'when an invalid configuration file is specified' do
|
|
6
|
+
before do
|
|
7
|
+
setup_deployment_area
|
|
8
|
+
@config = scenario_config('invalid/deploy.yml')
|
|
9
|
+
@args = "--path=#{@config} --to=project:invalid"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe 'performing a setup' do
|
|
13
|
+
it 'exits with a false status' do
|
|
14
|
+
run_setup(@args).should == false
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'does not create a repo checkout' do
|
|
18
|
+
run_setup(@args)
|
|
19
|
+
File.exists?(deployed_file('project')).should == false
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe 'performing a deployment' do
|
|
24
|
+
before do
|
|
25
|
+
checkout_repo('project')
|
|
26
|
+
File.unlink(deployed_file('project/README')) # modify the deployed checkout
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'exits with a false status' do
|
|
30
|
+
run_deploy(@args).should == false
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'does not update a repo checkout' do
|
|
34
|
+
run_deploy(@args)
|
|
35
|
+
File.exists?(deployed_file('project/README')).should == false
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper.rb'))
|
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib', 'whiskey_disk'))
|
|
3
|
+
|
|
4
|
+
integration_spec do
|
|
5
|
+
describe 'when configured for a local deployment' do
|
|
6
|
+
before do
|
|
7
|
+
setup_deployment_area
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe 'when the configuration specifies no domain' do
|
|
11
|
+
before do
|
|
12
|
+
@config = scenario_config('local/deploy.yml.erb')
|
|
13
|
+
@args = "--path=#{@config} --to=project:local-default"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe 'performing a setup' do
|
|
17
|
+
it 'performs a checkout of the repository to the target path' do
|
|
18
|
+
run_setup(@args)
|
|
19
|
+
File.exists?(deployed_file('project/README')).should == true
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'reports the local setup as successful' do
|
|
23
|
+
run_setup(@args)
|
|
24
|
+
File.read(integration_log).should =~ /local => succeeded/
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'exits with a true status' do
|
|
28
|
+
run_setup(@args).should == true
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe 'performing a deployment' do
|
|
33
|
+
before do
|
|
34
|
+
checkout_repo('project')
|
|
35
|
+
File.unlink(deployed_file('project/README')) # modify the deployed checkout
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'updates the checkout of the repository on the target path' do
|
|
39
|
+
run_deploy(@args)
|
|
40
|
+
File.exists?(deployed_file('project/README')).should == true
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it 'reports the local deployment as successful' do
|
|
44
|
+
run_deploy(@args)
|
|
45
|
+
File.read(integration_log).should =~ /local => succeeded/
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'exits with a true status' do
|
|
49
|
+
run_deploy(@args).should == true
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe 'when the configuration specifies a single domain via the "local" keyword' do
|
|
55
|
+
before do
|
|
56
|
+
@config = scenario_config('local/deploy.yml.erb')
|
|
57
|
+
@args = "--path=#{@config} --to=project:local-keyword"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe 'performing a setup' do
|
|
61
|
+
it 'performs a checkout of the repository to the target path' do
|
|
62
|
+
run_setup(@args)
|
|
63
|
+
File.exists?(deployed_file('project/README')).should == true
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it 'reports the local setup as successful' do
|
|
67
|
+
run_setup(@args)
|
|
68
|
+
File.read(integration_log).should =~ /local => succeeded/
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it 'exits with a true status' do
|
|
72
|
+
run_setup(@args).should == true
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
describe 'performing a deployment' do
|
|
77
|
+
before do
|
|
78
|
+
checkout_repo('project')
|
|
79
|
+
File.unlink(deployed_file('project/README')) # modify the deployed checkout
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it 'updates the checkout of the repository on the target path' do
|
|
83
|
+
run_deploy(@args)
|
|
84
|
+
File.exists?(deployed_file('project/README')).should == true
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it 'reports the local deployment as successful' do
|
|
88
|
+
run_deploy(@args)
|
|
89
|
+
File.read(integration_log).should =~ /local => succeeded/
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it 'exits with a true status' do
|
|
93
|
+
run_deploy(@args).should == true
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
describe 'when the configuration specifies a single domain specified as user@domain, using --only=domain' do
|
|
99
|
+
before do
|
|
100
|
+
@config = scenario_config('local/deploy.yml.erb')
|
|
101
|
+
@args = "--path=#{@config} --to=project:local-user-domain --only=localhost"
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
describe 'performing a setup' do
|
|
105
|
+
it 'performs a checkout of the repository to the target path' do
|
|
106
|
+
run_setup(@args)
|
|
107
|
+
File.exists?(deployed_file('project/README')).should == true
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
it 'reports the named domain setup as successful' do
|
|
111
|
+
run_setup(@args)
|
|
112
|
+
File.read(integration_log).should =~ /localhost => succeeded/
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
it 'exits with a true status' do
|
|
116
|
+
run_setup(@args).should == true
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
describe 'performing a deployment' do
|
|
121
|
+
before do
|
|
122
|
+
checkout_repo('project')
|
|
123
|
+
File.unlink(deployed_file('project/README')) # modify the deployed checkout
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it 'updates the checkout of the repository on the target path' do
|
|
127
|
+
run_deploy(@args)
|
|
128
|
+
File.exists?(deployed_file('project/README')).should == true
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it 'reports the named domain deployment as successful' do
|
|
132
|
+
run_deploy(@args)
|
|
133
|
+
File.read(integration_log).should =~ /localhost => succeeded/
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
it 'exits with a true status' do
|
|
137
|
+
run_deploy(@args).should == true
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
describe 'when the configuration specifies a single domain without username, using --only=domain' do
|
|
143
|
+
before do
|
|
144
|
+
@config = scenario_config('local/deploy.yml.erb')
|
|
145
|
+
@args = "--path=#{@config} --to=project:local-domain --only=localhost"
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
describe 'performing a setup' do
|
|
149
|
+
it 'performs a checkout of the repository to the target path' do
|
|
150
|
+
run_setup(@args)
|
|
151
|
+
File.exists?(deployed_file('project/README')).should == true
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
it 'reports the named domain setup as successful' do
|
|
155
|
+
run_setup(@args)
|
|
156
|
+
File.read(integration_log).should =~ /localhost => succeeded/
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
it 'exits with a true status' do
|
|
160
|
+
run_setup(@args).should == true
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
describe 'performing a deployment' do
|
|
165
|
+
before do
|
|
166
|
+
checkout_repo('project')
|
|
167
|
+
File.unlink(deployed_file('project/README')) # modify the deployed checkout
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
it 'updates the checkout of the repository on the target path' do
|
|
171
|
+
run_deploy(@args)
|
|
172
|
+
File.exists?(deployed_file('project/README')).should == true
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
it 'reports the named domain deployment as successful' do
|
|
176
|
+
run_deploy(@args)
|
|
177
|
+
File.read(integration_log).should =~ /localhost => succeeded/
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
it 'exits with a true status' do
|
|
181
|
+
run_deploy(@args).should == true
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
describe 'when the configuration specifies a single domain which does not match the --only domain' do
|
|
187
|
+
before do
|
|
188
|
+
@config = scenario_config('local/deploy.yml.erb')
|
|
189
|
+
@args = "--path=#{@config} --to=project:local-domain --only=vagrant2"
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
describe 'performing a setup' do
|
|
193
|
+
it 'does not perform a checkout of the repository to the target path' do
|
|
194
|
+
run_setup(@args)
|
|
195
|
+
File.exists?(deployed_file('project/README')).should == false
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
it 'reports that there were no deployments' do
|
|
199
|
+
run_setup(@args)
|
|
200
|
+
File.read(integration_log).should =~ /No deployments/
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
it 'exits with a true status' do
|
|
204
|
+
run_setup(@args).should == true
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
describe 'performing a deployment' do
|
|
209
|
+
before do
|
|
210
|
+
checkout_repo('project')
|
|
211
|
+
File.unlink(deployed_file('project/README')) # modify the deployed checkout
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
it 'does not update the checkout of the repository on the target path' do
|
|
215
|
+
run_deploy(@args)
|
|
216
|
+
File.exists?(deployed_file('project/README')).should == false
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
it 'reports that there were no deployments' do
|
|
220
|
+
run_deploy(@args)
|
|
221
|
+
File.read(integration_log).should =~ /No deployments/
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
it 'exits with a true status' do
|
|
225
|
+
run_deploy(@args).should == true
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
end
|